Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/CRailWay.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 12 - (show annotations) (download) (as text)
Sat Oct 26 14:53:53 2013 UTC (10 years, 6 months ago) by okadu
File MIME type: text/x-chdr
File size: 8384 byte(s)
[okadu] Version 2.15
橋脚・架線柱手動設置機能
車輌プラグイン以外でクランク等使用可能に
エンジン模型プラグイン追加

1 #ifndef CRAILWAY_H_INCLUDED
2 #define CRAILWAY_H_INCLUDED
3
4 #include "CLine.h"
5 #include "CTrainSetBuffer.h"
6 #include "CRailLink.h"
7
8 class CRailTraceCurve;
9 class CRailLinkTemp;
10 class CPier;
11 class CPlatformInst;
12 class CScene;
13 class CRailPlugin;
14 class CTiePlugin;
15 class CGirderPlugin;
16 class CPierPlugin;
17 class CLinePlugin;
18 class CPolePlugin;
19 class CDetectInfo;
20 class CRailWayParentLink;
21
22 /*
23 * 橋脚位置データ
24 */
25 class CPierPos{
26 public:
27 float m_Pos; // 位置
28 CPier *m_Link; // 架線柱
29 public:
30 CPierPos(){ m_Pos = 0.0f; m_Link = NULL; }
31 CPierPos(float p, CPier *l){ m_Pos = p; m_Link = l; }
32 bool operator<(const CPierPos &rhs){ return m_Pos<rhs.m_Pos; }
33 void RestoreAddress();
34 char *Read(char *);
35 void Save(FILE *);
36 };
37
38 // 反復子
39 typedef list<CPierPos>::iterator IPierPos;
40
41 /*
42 * 架線柱位置データ
43 */
44 class CPolePos{
45 public:
46 float m_Pos; // 位置
47 int m_Track; // 軌道番号
48 bool m_Multi; // 複線用リンク
49 CPole *m_Link; // 架線柱
50 public:
51 CPolePos(){ m_Pos = 0.0f; m_Link = NULL; }
52 CPolePos(float p, CPole *l, int t, bool m){
53 m_Pos = p; m_Link = l; m_Track = t; m_Multi = m;
54 }
55 bool operator<(const CPolePos &rhs){ return m_Pos<rhs.m_Pos; }
56 void RestoreAddress();
57 char *Read(char *);
58 void Save(FILE *);
59 };
60
61 // 反復子
62 typedef list<CPolePos>::iterator IPolePos;
63
64 ////////////////////////////////////////////////////////////////////////////////
65 ////////////////////////////////////////////////////////////////////////////////
66
67 /*
68 * レールインスタンス
69 */
70 class CRailWay{
71 friend class CRailWayLink;
72 friend class CGroupEndLocator;
73 friend class CRailBuildMode;
74 private:
75 static CRailWay **ms_Root; // 接続ルート
76 static float ms_MinDist; // 最小検出距離
77 static CRailWayLink ms_Detect; // 検出情報
78 void *m_OldAdr; // 旧アドレス
79 int m_Selected; // 選択フラグ
80 vector<float> m_RailMapV; // レールマッピング V 座標
81 vector<float> m_TieMapV; // 枕木マッピング V 座標
82 vector<float> m_GirderMapV; // 橋桁マッピング V 座標
83 vector<float> m_LineMapV; // 架線マッピング V 座標
84 float m_PierPos; // 橋脚設置位置
85 float m_PolePos; // 架線柱位置
86 float m_SegLen; // セグメント長
87 bool m_BuildLine; // 架線設置フラグ
88 bool m_WarpDummy; // ワープ用ダミーレール
89 bool m_MultiTrackDummy; // 複線用ダミーレール
90 int m_DummyTrackNum; // ダミー用軌道数
91 float m_DummyTrackInterval; // ダミー用軌道間隔
92 std::string m_RailBlock; // 閉塞区間
93 int m_SpeedLimit; // 制限速度
94 CRailConnectorLink m_Link[2]; // 接続コネクタ
95 list<CRailSplitter> m_SplitList; // 分割点リスト
96 CRailWayParentLink *m_Parent; // 親オブジェクト
97 CPlatformInst *m_Platform; // プラットフォーム
98 CScene *m_Scene; // シーン
99 CRailPlugin *m_RailPlugin; // レールプラグイン
100 CTiePlugin *m_TiePlugin; // 枕木プラグイン
101 CGirderPlugin *m_GirderPlugin; // 橋桁プラグイン
102 CPierPlugin *m_PierPlugin; // 橋脚プラグイン
103 CLinePlugin *m_LinePlugin; // 架線プラグイン
104 CPolePlugin *m_PolePlugin; // 架線柱プラグイン
105 list<CPierPos> m_PierList; // 橋脚リスト
106 list<CPolePos> m_PoleList; // 架線柱リスト
107 list<CGroupEndLocator *> m_GroupEnd; // 編成終端データ
108 CRailWay *m_Next; // リスト次
109 public:
110 static void SetRoot(CRailWay **r){ ms_Root = r; }
111 static void ResetDetect(){ ms_MinDist = -1.0f; }
112 static bool IsDetected(){ return ms_MinDist>=0.0f; }
113 static float GetMinDist(){ return ms_MinDist; }
114 static CRailWayLink GetDetect(){ return ms_Detect; }
115 CRailWay();
116 CRailWay(CRailConnectorLink &, CRailConnectorLink &,
117 CRailPlugin *, CTiePlugin *, CGirderPlugin *,
118 CPierPlugin *ipi = NULL, CLinePlugin *lpi = NULL, CPolePlugin *ppi = NULL,
119 list<CRailSplitter> *splist = NULL);
120 ~CRailWay();
121 CRailWay *Next(){ return m_Next; }
122 CRailWay **NextAdr(){ return &m_Next; }
123 void *OldAdr(){ return m_OldAdr; }
124 int GetSelectFlag(){ return m_Selected; }
125 void AddSelectFlag(int s){ m_Selected |= s; }
126 CRailWayLink CreateLink(int s){ return CRailWayLink(s, this); }
127 CScene *GetScene(){ return m_Scene; }
128 CRailPlugin *GetRailPlugin(){ return m_RailPlugin; }
129 CTiePlugin *GetTiePlugin(){ return m_TiePlugin; }
130 CGirderPlugin *GetGirderPlugin(){ return m_GirderPlugin; }
131 CRailWayParentLink *GetParent(){ return m_Parent; }
132 void SetParent(CDetectInfo *);
133 CPlatformInst *GetPlatform(){ return m_Platform; }
134 void SetPlatform(CPlatformInst *pl){ m_Platform = pl; }
135 void SetWarpDummy();
136 bool IsMultiTrackDummy(){ return m_MultiTrackDummy; }
137 bool IsLinkable(int, VEC3 &);
138 float GetSegLen();
139 void Stabilize();
140 void AddSplitter(const CRailSplitter &spl){ m_SplitList.push_back(spl); }
141 CRailConnectorLink SplitLink(CRailLinkTemp *, CRailWay **, IRailSplitter);
142 void SplitSelect();
143 CRailWay *Delete();
144 void ConnectRailWay(int, CRailWay *, int, CScene *);
145 void BranchRailWay(int, CRailWay *, int, CScene *);
146 void DisconnectRailWay(int, CScene *);
147 bool SetRailBlock(char *rb);
148 bool IsRailBlock(){ return !m_RailBlock.empty(); }
149 std::string& GetRailBlock(){ return m_RailBlock; }
150 bool CheckRailBlock(CTrainGroup *);
151 bool SetSpeedLimit(int);
152 bool IsSpeedLimit(){ return m_SpeedLimit>=0; }
153 int GetSpeedLimit(){ return m_SpeedLimit; }
154 void SetMapTemp();
155 void CopyMapTemp(int);
156 void CopyMapTempMulti(int, float *, float *, int *, float *, float *, int *);
157 CPoleLink GetPoleLink(int);
158 void AddPolePos(float p){ m_PolePos += p; }
159 void AddPole(float, CPole *, int, bool);
160 void InsertPole(float, CPole *, int, bool);
161 void DeletePole(CPole *);
162 void AddPierPos(float p){ m_PierPos += p; }
163 void AddPier(float, CPier *);
164 void InsertPier(float, CPier *);
165 void DeletePier(CPier *);
166 void BuildLine(CPierPlugin *, CLinePlugin *, CPolePlugin *);
167 void ShowSegment();
168 void ScanInput(int, VEC3 &, VEC3 &);
169 void ScanInputWarp(int, VEC3 &, VEC3 &);
170 void TraceRail(int, CRailTraceCurve *);
171 void TraceRailSplit(int, CRailTraceCurve *);
172 VEC3 GetFirstDir(int);
173 void RemoveGroup();
174 void CheckWarpEndScene(CScene *);
175 bool IsInsideGroup(int, float);
176 bool SetTrain(int, float, CGroupEndLocator *, bool,
177 ITrainSetBuffer *, ITrainSetBuffer *, CTrainGroup *, bool, bool);
178 int MarchTrain(float *, CGroupEndLocator *, CTrainGroup *, CTrainGroup *);
179 bool CheckPlatformExtend(int, CPlatformInst *);
180 int GetPlatformState();
181 void UpdateSplitList();
182 void Dump();
183 void Render();
184 void RenderWarp();
185 void RestoreAddress();
186 char *Read(char *);
187 char *ReadWarp(char *);
188 void Save(FILE *);
189 void SaveWarp(FILE *);
190 };
191
192 // 反復子
193 typedef list<CRailWay *>::iterator IPRailWay;
194 typedef list<list<CRailWay *> >::iterator ILPRailWay;
195 typedef list<list<list<CRailWay *> > >::iterator ILLPRailWay;
196
197 /*
198 * 接続先カント量を求める
199 */
200 inline float CRailWayLink::GetCant(){
201 return m_Side ? -m_Link->m_Link[m_Side].m_Cant : m_Link->m_Link[m_Side].m_Cant;
202 }
203
204 /*
205 * 接続先座標を求める
206 */
207 inline VEC3 CRailWayLink::GetPos(){
208 return m_Link->m_Link[m_Side].GetPos();
209 }
210
211 /*
212 * 接続先反対座標を求める
213 */
214 inline VEC3 CRailWayLink::GetOppositePos(){
215 return m_Link->m_Link[!m_Side].GetPos();
216 }
217
218 /*
219 * 最初の分割点までの dir ベクトルを求める
220 */
221 inline VEC3 CRailWayLink::GetFirstDir(){
222 return m_Link->GetFirstDir(m_Side);
223 }
224
225 /*
226 * レール接続一時データ
227 */
228 class CRailLinkTemp{
229 public:
230 int m_Side; // サイド
231 float m_SumLen; // 積算距離
232 IRailSplitter m_SpliceItr; // スプリット位置
233 VEC3 m_Pos; // 座標
234 VEC3 m_Right; // right
235 VEC3 m_Up; // up
236 VEC3 m_Dir; // dir
237 CRailWay *m_Link; // レール
238 public:
239 CRailLinkTemp(){ m_Link = NULL; }
240 CRailLinkTemp(int, float, VEC3 &, VEC3 &, VEC3 &, VEC3 &, CRailWay *, IRailSplitter);
241 CRailConnectorLink SplitLink(CRailWay **wadr){
242 return m_Link->SplitLink(this, wadr, m_SpliceItr);
243 }
244 void CopyMapTemp(){ m_Link->CopyMapTemp(m_Side); }
245 };
246
247 // 外部グローバル
248 extern list<list<list<CRailWay *> > > g_MultiTrackRailList;
249 extern ILLPRailWay g_MultiTrackSegment;
250 extern ILPRailWay g_SingleTrackSegment;
251 extern bool g_MultiTrackDummy;
252 extern int g_DummyTrackNum;
253 extern float g_DummyTrackInterval;
254 extern map<std::string, CTrainGroup *> g_RailBlockMap;
255
256 // 関数宣言
257 CTrainGroup* GetRailBlockUser(std::string&);
258 void SetRailBlockUser(std::string&, CTrainGroup *);
259 void ClearRailBlockUser(CTrainGroup *);
260
261 #endif

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26