Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/CTrainPlugin.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: 9829 byte(s)
[okadu] Version 2.15
橋脚・架線柱手動設置機能
車輌プラグイン以外でクランク等使用可能に
エンジン模型プラグイン追加

1 #ifndef CTRAINPLUGIN_H_INCLUDED
2 #define CTRAINPLUGIN_H_INCLUDED
3
4 #include "CModelPlugin.h"
5 #include "CTrainSetBuffer.h"
6
7 /*
8 * オブジェクトジョイント ZY 指定
9 */
10 class CObjectJointZY: public CObjectJoint{
11 public:
12 VEC2 m_AttachCoord; // 接続先ローカル ZY 座標
13 VEC2 m_LocalCoord; // 自分側ローカル ZY 座標
14 public:
15 char *Read(char *, CModelPlugin *);
16 VEC3 GetPos(){
17 VEC3 ret(0.0f, m_AttachCoord.y, m_AttachCoord.x);
18 CObject *obj = m_Link->GetObject();
19 return *D3DXVec3TransformCoord(
20 &ret, &(ret/obj->GetScale()), &obj->GetMatrix());
21 }
22 VEC3 GetRight(){
23 CObject *obj = m_Link->GetObject();
24 return m_Link->GetTurn() ? -obj->GetRight() : obj->GetRight();
25 }
26 };
27
28 /*
29 * オブジェクトジョイント ZY + X 指定
30 */
31 class CObjectJointZYX: public CObjectJointZY{
32 public:
33 float m_AttachX; // 接続先ローカル X 座標
34 public:
35 char *Read(char *, CModelPlugin *);
36 VEC3 GetPos(){
37 VEC3 ret(m_AttachX, m_AttachCoord.y, m_AttachCoord.x);
38 CObject *obj = m_Link->GetObject();
39 return *D3DXVec3TransformCoord(
40 &ret, &(ret/obj->GetScale()), &obj->GetMatrix());
41 }
42 };
43
44 ////////////////////////////////////////////////////////////////////////////////
45 ////////////////////////////////////////////////////////////////////////////////
46
47 /*
48 * 車軸
49 */
50 class CAxleObject: public CNamedObject{
51 friend class CAxlePosture;
52 friend class CTrainPlugin;
53 private:
54 int m_Symmetric; // 対称カウント
55 float m_Diameter; // 直径
56 float m_MaxRotation; // フレーム当たり回転量最大値
57 bool m_WheelSound; // 車輪音フラグ
58 VEC2 m_Coord; // 座標
59 public:
60 bool operator<(const CAxleObject &rhs) const{ return m_Coord.x<rhs.m_Coord.x; }
61 virtual int GetType(){ return 1; }
62 char *Read(char *, CModelPlugin *);
63 float CalcRotation(float);
64 void SetPreview(float, bool);
65 void SetPosture(VEC3, VEC3, VEC3, float);
66 };
67
68 // 反復子
69 typedef list<CAxleObject>::iterator IAxleObject;
70
71 /*
72 * 車体
73 */
74 class CBodyObject: public CNamedObject{
75 friend class CTrainPlugin;
76 private:
77 static VEC3 ms_TiltDir; // 振り子ベクトル
78 float m_TiltRatio; // 振り子係数
79 float m_TiltMaxAngle; // 振り子最大角度
80 float m_TiltBaseAlt; // 振り子基準高さ
81 CObjectJointZY m_Joint1, m_Joint2; // 接続情報
82 public:
83 static void SetTiltDir(VEC3 &td){ ms_TiltDir = td; }
84 char *Read(char *, CModelPlugin *);
85 void SetPosture();
86 };
87
88 // 反復子
89 typedef list<CBodyObject>::iterator IBodyObject;
90
91 ////////////////////////////////////////////////////////////////////////////////
92 ////////////////////////////////////////////////////////////////////////////////
93
94 /*
95 * フリーオブジェクトコンテナ
96 */
97 class CFreeObjectContainer{
98 private:
99 CFreeObjectBase *m_FreeObject; // フリーオブジェクト
100 public:
101 CFreeObjectContainer();
102 CFreeObjectContainer(const CFreeObjectContainer &);
103 CFreeObjectContainer(CFreeObject3D *);
104 ~CFreeObjectContainer();
105 char *Read(char *, CModelPlugin *);
106 void SetPosture(){ m_FreeObject->SetPostureFreeObject(); }
107 CNamedObject *Check(const string &name){ return m_FreeObject->CheckFreeObject(name); }
108 int GetNamedObjectNum(){ return m_FreeObject->GetNamedObjectNum(); }
109 CNamedObject *GetNamedObject(int i){ return m_FreeObject->GetNamedObject(i); }
110 void LoadModel(CModelPlugin *mpi){ m_FreeObject->LoadModelFreeObject(mpi); }
111 void AttachPartsObject(){ m_FreeObject->AttachPartsFreeObject(); }
112 void ScanInput(){ m_FreeObject->ScanInputFreeObject(); }
113 void Render(){ m_FreeObject->RenderFreeObject(); }
114 };
115
116 // 反復子
117 typedef list<CFreeObjectContainer>::iterator IFreeObjectContainer;
118
119 ////////////////////////////////////////////////////////////////////////////////
120 ////////////////////////////////////////////////////////////////////////////////
121
122 /*
123 * 2 点配置
124 */
125 class CFreeObjectZY: public CNamedObject, public CFreeObjectBase{
126 friend class CTrainPlugin;
127 private:
128 float m_FixPosition; // pos 固定位置
129 float m_FixRight; // right 固定位置
130 CObjectJointZYX m_Joint1, m_Joint2; // 接続情報
131 public:
132 CFreeObjectBase *Duplicate(){ return new CFreeObjectZY(*this); }
133 char *Read(char *, CModelPlugin *);
134 void SetPostureFreeObject();
135 CNamedObject *CheckFreeObject(const string &name){ return Check(name); }
136 int GetNamedObjectNum(){ return 1; }
137 CNamedObject *GetNamedObject(int i){ return this; }
138 void LoadModelFreeObject(CModelPlugin *mpi){ LoadModel(mpi); }
139 void AttachPartsFreeObject(){ GetPartsObject(); }
140 void ScanInputFreeObject(){ CheckDetect(); }
141 void RenderFreeObject(){ Render(); }
142 };
143
144 /*
145 * 三角形辺
146 */
147 class CTriangleLinkZY: public CNamedObject{
148 friend class CFreeTriangleZY;
149 friend class CFreeCrankZY;
150 friend class CFreePistonZY;
151 private:
152 VEC2 m_LinkCoord; // 三角形リンク座標
153 CObjectJointZYX m_Joint; // 接続情報
154 public:
155 char *Read(char *, CModelPlugin *);
156 };
157
158 /*
159 * 三角形オブジェクト
160 */
161 class CFreeTriangleZY: public CFreeObjectBase{
162 friend class CTrainPlugin;
163 private:
164 CTriangleLinkZY m_Link1, m_Link2; // 辺
165 public:
166 CFreeObjectBase *Duplicate(){ return new CFreeTriangleZY(*this); }
167 char *Read(char *, CModelPlugin *);
168 void SetPostureFreeObject();
169 CNamedObject *CheckFreeObject(const string &name){
170 return m_Link1.Check(name) ? &m_Link1
171 : (m_Link2.Check(name) ? &m_Link2 : NULL);
172 }
173 int GetNamedObjectNum(){ return 2; }
174 CNamedObject *GetNamedObject(int i){ return i ? &m_Link2 : &m_Link1; }
175 void LoadModelFreeObject(CModelPlugin *mpi){
176 m_Link1.LoadModel(mpi); m_Link2.LoadModel(mpi);
177 }
178 void AttachPartsFreeObject(){ m_Link1.GetPartsObject(); m_Link2.GetPartsObject(); }
179 void ScanInputFreeObject(){ m_Link1.CheckDetect(); m_Link2.CheckDetect(); }
180 void RenderFreeObject(){ m_Link1.Render(); m_Link2.Render(); }
181 };
182
183 /*
184 * クランクスライダ
185 */
186 class CCrankSlideZY: public CNamedObject{
187 friend class CFreeCrankZY;
188 private:
189 VEC2 m_Direction; // 三角形リンク座標
190 CObjectJointZYX m_Joint; // 接続情報
191 public:
192 char *Read(char *, CModelPlugin *);
193 };
194
195 /*
196 * クランクオブジェクト
197 */
198 class CFreeCrankZY: public CFreeObjectBase{
199 friend class CTrainPlugin;
200 private:
201 CTriangleLinkZY m_Link; // 辺
202 CCrankSlideZY m_Slide; // スライダ
203 public:
204 CFreeObjectBase *Duplicate(){ return new CFreeCrankZY(*this); }
205 char *Read(char *, CModelPlugin *);
206 void SetPostureFreeObject();
207 CNamedObject *CheckFreeObject(const string &name){
208 return m_Link.Check(name) ? (CNamedObject *)&m_Link
209 : (m_Slide.Check(name) ? (CNamedObject *)&m_Slide : NULL);
210 }
211 int GetNamedObjectNum(){ return 2; }
212 CNamedObject *GetNamedObject(int i){ return i ? (CNamedObject*)&m_Slide : (CNamedObject*)&m_Link; }
213 void LoadModelFreeObject(CModelPlugin *mpi){
214 m_Link.LoadModel(mpi); m_Slide.LoadModel(mpi);
215 }
216 void AttachPartsFreeObject(){ m_Link.GetPartsObject(); m_Slide.GetPartsObject(); }
217 void ScanInputFreeObject(){ m_Link.CheckDetect(); m_Slide.CheckDetect(); }
218 void RenderFreeObject(){ m_Link.Render(); m_Slide.Render(); }
219 };
220
221 /*
222 * ピストンオブジェクト
223 */
224 class CFreePistonZY: public CFreeObjectBase{
225 friend class CTrainPlugin;
226 private:
227 CTriangleLinkZY m_Link1, m_Link2; // 辺
228 public:
229 CFreeObjectBase *Duplicate(){ return new CFreePistonZY(*this); }
230 char *Read(char *, CModelPlugin *);
231 void SetPostureFreeObject();
232 CNamedObject *CheckFreeObject(const string &name){
233 return m_Link1.Check(name) ? &m_Link1
234 : (m_Link2.Check(name) ? &m_Link2 : NULL);
235 }
236 int GetNamedObjectNum(){ return 2; }
237 CNamedObject *GetNamedObject(int i){ return i ? &m_Link2 : &m_Link1; }
238 void LoadModelFreeObject(CModelPlugin *mpi){
239 m_Link1.LoadModel(mpi); m_Link2.LoadModel(mpi);
240 }
241 void AttachPartsFreeObject(){ m_Link1.GetPartsObject(); m_Link2.GetPartsObject(); }
242 void ScanInputFreeObject(){ m_Link1.CheckDetect(); m_Link2.CheckDetect(); }
243 void RenderFreeObject(){ m_Link1.Render(); m_Link2.Render(); }
244 };
245
246 ////////////////////////////////////////////////////////////////////////////////
247 ////////////////////////////////////////////////////////////////////////////////
248
249 /*
250 * 車輌プラグイン
251 */
252 class CTrainPlugin: public CModelPlugin{
253 friend class CTrain;
254 friend class CTrainGroup;
255 private:
256 float m_FrontLimit; // 前部連結位置
257 float m_TailLimit; // 後部連結位置
258 float m_Length; // 長さ
259 float m_MaxVelocity; // 最高速度
260 float m_MaxAcceleration; // 最高加速度
261 float m_MaxDeceleration; // 最高減速度
262 float m_TiltSpeed; // 振り子動作速度
263 float m_DoorClosingTime; // ドア閉め所要時間
264 list<CAxleObject> m_AxleObject; // 車軸
265 list<CBodyObject> m_BodyObject; // 車体
266 list<CFreeObjectContainer> m_FreeObject; // フリーオブジェクト
267 CObjectJoint3D m_FrontCabin; // 前部運転席位置
268 CObjectJoint3D m_TailCabin; // 後部運転席位置
269 public:
270 static void RenderPreview();
271 CTrainPlugin(char *id): CModelPlugin(id){}
272 ~CTrainPlugin();
273 char *DirName(){ return "Train"; }
274 char *TextName(){ return "Train.txt"; }
275 char *TextName2(){ return "Train2.txt"; }
276 bool Load();
277 bool LoadOldForm();
278 void SetPreview();
279 void Preview(float, bool);
280 CNamedObject *FindObject(const string &);
281 bool IsSoundEnabled();
282 void SetAxleList(CTrain *);
283 void SetPosture();
284 void AttachPartsObject();
285 void ScanInput(CTrain *);
286 void Render(CTrain *);
287 void Simulate(CTrain *);
288 CPLUGIN_CASTFUNC(CTrainPlugin);
289 };
290
291 /*
292 * 車輌プラグインリスト
293 */
294 class CTrainPluginList: public CModelPluginList{
295 private:
296 public:
297 char *DirName(){ return "Train"; }
298 char *TextName(){ return "Train.txt"; }
299 char *TextName2(){ return "Train2.txt"; }
300 char *Default(){ return "Aizentranza01"; }
301 CPlugin *NewEntry(char *id){ return new CTrainPlugin(id); }
302 CPLUGINLIST_CASTFUNC(CTrainPlugin);
303 };
304
305 // 外部グローバル
306 extern CTrainPlugin *g_Train;
307 extern CTrainPluginList *g_TrainPluginList;
308
309 #endif

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