| 1 |
#ifndef CRAILLINK_H_INCLUDED |
| 2 |
#define CRAILLINK_H_INCLUDED |
| 3 |
|
| 4 |
class CRailWayLink; |
| 5 |
class CRailConnector; |
| 6 |
class CRailWay; |
| 7 |
|
| 8 |
#include "CVertexDump.h" |
| 9 |
|
| 10 |
/* |
| 11 |
* レール分割子 |
| 12 |
*/ |
| 13 |
class CRailSplitter{ |
| 14 |
public: |
| 15 |
VEC3 m_Pos; // 座標 |
| 16 |
VEC3 m_Right; // up |
| 17 |
VEC3 m_Up; // right |
| 18 |
VEC3 m_Dir; // dir |
| 19 |
int m_Selected; // 選択フラグ |
| 20 |
public: |
| 21 |
CRailSplitter(){} |
| 22 |
CRailSplitter(const VEC3 &p, const VEC3 &d){ |
| 23 |
m_Pos = p; m_Dir = d; m_Selected = 0; |
| 24 |
} |
| 25 |
CRailSplitter(const VEC3 &p, const VEC3 &r, const VEC3 &u, const VEC3 &d){ |
| 26 |
m_Pos = p; m_Right = r; m_Up = u; m_Dir = d; m_Selected = 0; |
| 27 |
} |
| 28 |
CRailSplitter Get(int rev){ |
| 29 |
return rev ? CRailSplitter(m_Pos, -m_Right, m_Up, -m_Dir) : *this; |
| 30 |
} |
| 31 |
float CalcDist(CRailSplitter &rhs){ return V3Len(&(rhs.m_Pos-m_Pos)); } |
| 32 |
void CalcCantAxis(float); |
| 33 |
CRailSplitter CalcMid(CRailSplitter *, float); |
| 34 |
char *Read(char *); |
| 35 |
void Save(FILE *, char *); |
| 36 |
}; |
| 37 |
|
| 38 |
// 反復子 |
| 39 |
typedef list<CRailSplitter>::iterator IRailSplitter; |
| 40 |
typedef list<CRailSplitter>::reverse_iterator RIRailSplitter; |
| 41 |
|
| 42 |
/* |
| 43 |
* コネクタリンク |
| 44 |
*/ |
| 45 |
class CRailConnectorLink{ |
| 46 |
public: |
| 47 |
int m_Side; // サイド |
| 48 |
int m_Point; // ポイント |
| 49 |
float m_Cant; // カント量 |
| 50 |
CRailConnector *m_Link; // リンク |
| 51 |
public: |
| 52 |
CRailConnectorLink(){ m_Side = m_Point = 0; m_Link = NULL; } |
| 53 |
CRailConnectorLink::CRailConnectorLink(int side, int point, CRailConnector *link){ |
| 54 |
m_Side = side; m_Point = point; m_Link = link; |
| 55 |
} |
| 56 |
void Connect(CRailWayLink &); |
| 57 |
void Disconnect(); |
| 58 |
VEC3 GetPos(); |
| 59 |
VEC3 GetRight(); |
| 60 |
VEC3 GetUp(); |
| 61 |
VEC3 GetDir(); |
| 62 |
CRailSplitter GetSplitter(int); |
| 63 |
float GetCant(); |
| 64 |
bool GetShadowTerminate(); |
| 65 |
int GetLinkCount(); |
| 66 |
void RestoreAddress(); |
| 67 |
char *Read(char *, char *); |
| 68 |
void Save(FILE *, char *); |
| 69 |
}; |
| 70 |
|
| 71 |
/* |
| 72 |
* レールリンク |
| 73 |
*/ |
| 74 |
class CRailWayLink{ |
| 75 |
public: |
| 76 |
int m_Side; // サイド |
| 77 |
CRailWay *m_Link; // リンク |
| 78 |
public: |
| 79 |
CRailWayLink(){ m_Side = 0; m_Link = NULL; } |
| 80 |
CRailWayLink::CRailWayLink(int side, CRailWay *link){ m_Side = side; m_Link = link; } |
| 81 |
float GetCant(); |
| 82 |
VEC3 GetPos(); |
| 83 |
VEC3 GetOppositePos(); |
| 84 |
VEC3 GetFirstDir(); |
| 85 |
void WarpToOppositeEnd(); |
| 86 |
void RestoreAddress(); |
| 87 |
char *Read(char *, char *); |
| 88 |
void Save(FILE *, char *); |
| 89 |
}; |
| 90 |
|
| 91 |
#endif |