Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//-----------------------------------------------------------------------------
// File: pipe.h
//
// Desc: PIPE base class
//
// Copyright (c) 1994-2000 Microsoft Corporation
//-----------------------------------------------------------------------------
#ifndef __pipe_h__
#define __pipe_h__
// pipe drawing status
enum { PIPE_ACTIVE, PIPE_STUCK, PIPE_OUT_OF_NODES };
// pipe types
enum { TYPE_NORMAL, TYPE_FLEX_REGULAR, TYPE_FLEX_TURNING };
// ways pipe choose directions
enum { CHOOSE_DIR_RANDOM_WEIGHTED, CHOOSE_DIR_CHASE // when chasing a lead pipe
};
// ways pipe choose start positions
enum { CHOOSE_STARTPOS_RANDOM, CHOOSE_STARTPOS_FURTHEST // furthest from last position
};
//-----------------------------------------------------------------------------
// Name: PIPE class
// Desc: - Describes a pipe that draws thru the node array
// - Could have more than one pipe drawing in each array at same time
// - Pipe has position and direction in node array
//-----------------------------------------------------------------------------
class STATE;
class PIPE { public: int m_type; IPOINT3D m_curPos; // current node position of pipe
D3DMATERIAL8* m_pMat;
STATE* m_pState; // for state value access
void SetChooseDirectionMethod( int method ); void SetChooseStartPosMethod( int method ); int ChooseNewDirection(); BOOL IsStuck(); // if pipe is stuck or not
BOOL NowhereToRun() { return m_status == PIPE_OUT_OF_NODES; }
PIPE( STATE *state ); virtual ~PIPE(); virtual void Start() = 0; virtual void Draw() = 0;
protected: float m_radius; // ideal radius (fluctuates for FPIPE)
int m_status; // ACTIVE/STUCK/STOPPED, etc.
int m_lastDir; // last direction taken by pipe
int m_notchVec; // current notch vector
int m_weightStraight; // current weighting of going straight
ID3DXMatrixStack* m_pWorldMatrixStack;
BOOL SetStartPos(); // starting node position
void ChooseMaterial(); void UpdateCurrentPosition( int dir ); void TranslateToCurrentPosition(); void align_plusz( int newDir );
private: int m_chooseDirMethod; int m_chooseStartPosMethod;
int GetBestDirsForChase( int *bestDirs ); };
extern void align_plusz( int newDir ); extern int notchTurn[NUM_DIRS][NUM_DIRS][NUM_DIRS];
#endif // __pipe_h__
|