| 1 |
#ifndef CRAILBUILDER_H_INCLUDED |
| 2 |
#define CRAILBUILDER_H_INCLUDED |
| 3 |
|
| 4 |
#include "CRailWay.h" |
| 5 |
|
| 6 |
class CRailCurve; |
| 7 |
class CRailConnectorLink; |
| 8 |
class CRailPlugin; |
| 9 |
class CTiePlugin; |
| 10 |
class CGirderPlugin; |
| 11 |
|
| 12 |
/* |
| 13 |
* レール設置子 |
| 14 |
*/ |
| 15 |
class CRailBuilder{ |
| 16 |
private: |
| 17 |
static int ms_CurrentTrack; // 現在のトラック |
| 18 |
static int ms_TrackNum; // 線数 |
| 19 |
static float ms_TrackInterval; // 線間隔 |
| 20 |
static float ms_TrackShift; // 中心からのシフト量 |
| 21 |
static bool ms_LiftRailSurface; // レール持ち上げ |
| 22 |
static VEC3 ms_BeginPosSum; // 開始位置総和 |
| 23 |
static VEC3 ms_BeginDirSum; // 開始方向総和 |
| 24 |
static VEC3 ms_EndPosSum; // 終了位置総和 |
| 25 |
static VEC3 ms_EndDirSum; // 終了方向総和 |
| 26 |
bool m_HitFlag; // 判定フラグ |
| 27 |
VEC3 m_Pos; // 座標 |
| 28 |
VEC3 m_HitPos; // 判定座標 |
| 29 |
VEC3 m_HitNorm; // 判定法線 |
| 30 |
vector<CRailLinkTemp> m_Link; // 接続情報 |
| 31 |
CRailBuilder *m_Prev; // 前 |
| 32 |
CRailBuilder *m_Next; // 次 |
| 33 |
public: |
| 34 |
static void ResetDirSum(); |
| 35 |
static void SetTrack(int, int, float, bool); |
| 36 |
static int GetCurrentTrack(){ return ms_CurrentTrack; } |
| 37 |
CRailBuilder(VEC3, CRailBuilder *); |
| 38 |
~CRailBuilder(); |
| 39 |
CRailBuilder *Pop(); |
| 40 |
CRailBuilder *GetPrev(){ return m_Prev; } |
| 41 |
VEC3 GetPos(){ return m_Pos; } |
| 42 |
VEC3 SetPos(VEC3, int); |
| 43 |
bool CheckLink(){ |
| 44 |
return ms_CurrentTrack<ms_TrackNum |
| 45 |
&& m_Link.size()>ms_CurrentTrack && m_Link[ms_CurrentTrack].m_Link; |
| 46 |
} |
| 47 |
bool IsLinkEmpty(){ |
| 48 |
return !m_Link.size() || m_Link.size()==1 && !m_Link.begin()->m_Link; |
| 49 |
} |
| 50 |
bool IsLinkFilled(){ |
| 51 |
return m_Link.size()==ms_TrackNum && m_Link.rbegin()->m_Link; |
| 52 |
} |
| 53 |
CRailLinkTemp &GetLink(){ return m_Link[ms_CurrentTrack]; } |
| 54 |
bool SetLink(CRailLinkTemp &); |
| 55 |
void PushLink(){ if(m_Link.size()<ms_TrackNum) m_Link.push_back(CRailLinkTemp()); } |
| 56 |
bool IsLast(); |
| 57 |
void CalcRight(VEC3 *, VEC3 *, VEC3 *, VEC3 *); |
| 58 |
VEC3 CalcSplitPos(); |
| 59 |
VEC3 CalcTrackPos(VEC3 *); |
| 60 |
bool Curve(CRailCurve *, CRailPlugin *, CTiePlugin *, CGirderPlugin *); |
| 61 |
void Render(CLineDumpL *, CRailPlugin *, CTiePlugin *, CGirderPlugin *, bool); |
| 62 |
void BuildRail(CRailConnectorLink &, CRailConnectorLink &, |
| 63 |
CRailPlugin *, CTiePlugin *, CGirderPlugin *); |
| 64 |
}; |
| 65 |
|
| 66 |
#endif |