Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/CRailEditMode.cpp

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

1 #include "stdafx.h"
2 #include "CPopMenu.h"
3 #include "CSimpleDialog.h"
4 #include "CPier.h"
5 #include "CScene.h"
6 #include "CSaveFile.h"
7 #include "CRailDetectCurve.h"
8 #include "CRailEditMode.h"
9 #include "CRailPlugin.h"
10 #include "CTiePlugin.h"
11 #include "CGirderPlugin.h"
12 #include "CPierPlugin.h"
13 #include "CLinePlugin.h"
14 #include "CPolePlugin.h"
15 #include "CSkinPlugin.h"
16
17 // 関数宣言
18 void PushUndoStack();
19
20 // 外部定数
21 extern const int CSR_MOVE_TSD;
22
23 // 外部グローバル
24 extern CLinePlugin *g_Line;
25
26 // 内部グローバル
27 bool g_ShowRailSelect = false;
28 bool g_ShowRailWaySelect = false;
29 bool g_ShowRailBlockSelect = false;
30 bool g_ShowSpeedLimitSelect = false;
31 bool g_ShowPierSelect = false;
32 bool g_ShowPoleSelect = false;
33 bool g_ShowLineSelect = false;
34 bool g_ShowWarpSelect = false;
35 int g_RailEditModalState; // モーダル状態
36 string g_RailEditTempString; // テンポラリ文字列
37 CYesNoDialog *g_RailEditYesNoDialog = NULL; // 問合せダイアログ
38 CInputDialog *g_RailEditInputDialog = NULL; // 入力ダイアログ
39
40 /*
41 * レール選択表示状態リセット
42 */
43 void ResetShowRailSelect(){
44 g_ShowRailSelect = false;
45 g_ShowRailWaySelect = false;
46 g_ShowRailBlockSelect = false;
47 g_ShowSpeedLimitSelect = false;
48 g_ShowPierSelect = false;
49 g_ShowPoleSelect = false;
50 g_ShowLineSelect = false;
51 g_ShowWarpSelect = false;
52 }
53
54 /*
55 * コンストラクタ
56 */
57 CRailEditMode::CRailEditMode(){
58 int i, gww = TILE_UNIT*14, gwh = TILE_UNIT*(3+6);
59 m_EditWindow.Init(TILE_UNIT, g_DispHeight-gwh-TILE_UNIT,
60 gww, gwh, lang(EditOption), &m_Interface, true);
61 m_ModeLabel.Init(TILE_HALF, TILE_QUAD+TILE_UNIT,
62 gww-TILE_UNIT, TILE_UNIT, lang(EditMode_UpDn), &m_EditWindow, 0, 1);
63 char *modelabel[RAIL_EDIT_MODES] = {
64 lang(SelectEditRail), lang(SelectAddPier), lang(SelectEditPier),
65 lang(SelectAddPole), lang(SelectEditPole), lang(SelectEditLine), lang(ConnectLine),
66 lang(SelectWarp), lang(ConnectWarp), lang(RailBlock), lang(SpeedLimit)};
67 for(i = 0; i<RAIL_EDIT_MODES; i++) m_Mode[i].Init(
68 TILE_HALF+(i/6)*((gww-TILE_UNIT-TILE_QUAD)/2+TILE_QUAD),
69 TILE_QUAD+TILE_UNIT*(2+i%6), (gww-TILE_UNIT-TILE_QUAD)/2, TILE_UNIT,
70 modelabel[i], &m_EditWindow, i ? &m_Mode[i-1] : NULL);
71 m_EditMode = EM_EDIT_RAIL;
72 m_Mode[m_EditMode].SetCheck();
73
74 class CRailBlockSetter: public CMenuCommand{
75 public:
76 void Exec(){
77 g_RailEditModalState = 10;
78 g_ModalDialog = g_RailEditInputDialog = new CInputDialog(
79 lang(RailBlockNameInquireMessage), lang(SetRailBlock), "", 64);
80 }
81 };
82 class CRailBlockRemover: public CMenuCommand{
83 public:
84 void Exec(){
85 PushUndoStack();
86 g_Scene->SetRailBlock("");
87 g_Scene->Dump();
88 }
89 };
90 m_RailBlockMenu = new CPopMenu("", NULL);
91 (new CPopMenu(lang(SetRailBlock), m_RailBlockMenu))->SetCommand(new CRailBlockSetter);
92 (new CPopMenu(lang(DeleteRailBlock), m_RailBlockMenu))->SetCommand(new CRailBlockRemover);
93
94 class CSpeedLimitSetter: public CMenuCommand{
95 public:
96 void Exec(){
97 g_RailEditModalState = 20;
98 g_ModalDialog = g_RailEditInputDialog = new CInputDialog(
99 lang(SpeedLimitInquireMessage), lang(SetSpeedLimit), "", 64);
100 }
101 };
102 class CSpeedLimitRemover: public CMenuCommand{
103 public:
104 void Exec(){
105 PushUndoStack();
106 g_Scene->SetSpeedLimit(-1);
107 g_Scene->Dump();
108 }
109 };
110 m_SpeedLimitMenu = new CPopMenu("", NULL);
111 (new CPopMenu(lang(SetSpeedLimit), m_SpeedLimitMenu))->SetCommand(new CSpeedLimitSetter);
112 (new CPopMenu(lang(DeleteSpeedLimit), m_SpeedLimitMenu))->SetCommand(new CSpeedLimitRemover);
113 }
114
115 /*
116 * デストラクタ
117 */
118 CRailEditMode::~CRailEditMode(){
119 DELETE_V(m_RailBlockMenu);
120 DELETE_V(m_SpeedLimitMenu);
121 }
122
123 /*
124 * モードを有効化
125 */
126 void CRailEditMode::EnterCursorScenery(){
127 ms_ModeLabel = lang(EditRail);
128 g_Scene->ScanInputRailWay(4, V3ZERO, V3ZERO, true);
129 g_Scene->ScanInputPier(4, V3ZERO, V3ZERO);
130 g_Scene->ScanInputLine(4, V3ZERO, V3ZERO);
131 g_Scene->ScanInputPole(4, V3ZERO, V3ZERO);
132 m_LineLinkFrom.m_Link = NULL;
133 m_WarpLinkFrom.m_Link = NULL;
134 m_DragState = 0;
135 }
136
137 /*
138 * モーダル処理
139 */
140 void CRailEditMode::ModalFuncCursorScenery(){
141 bool changed = false;
142 if(g_RailEditInputDialog){
143 if(g_RailEditInputDialog->CheckOK()){
144 g_RailEditTempString = g_RailEditInputDialog->GetInputText();
145 DELETE_V(g_ModalDialog);
146 g_RailEditInputDialog = NULL;
147 switch(g_RailEditModalState){
148 case 10: // set rail block
149 PushUndoStack();
150 changed |= g_Scene->SetRailBlock((char *)g_RailEditTempString.c_str());
151 break;
152 case 20: // set rail block
153 PushUndoStack();
154 int speed_limit = -1;
155 sscanf((char *)g_RailEditTempString.c_str(), "%d", &speed_limit);
156 if(speed_limit<0) speed_limit = -1;
157 changed |= g_Scene->SetSpeedLimit(speed_limit);
158 break;
159 }
160 }else if(g_RailEditInputDialog->CheckCancel()){
161 DELETE_V(g_ModalDialog);
162 g_RailEditInputDialog = NULL;
163 }
164 }
165 if(changed) g_Scene->Dump();
166 }
167
168 /*
169 * 入力チェック
170 */
171 void CRailEditMode::ScanInputCursorScenery(){
172 POINT pos = g_Cursor.GetPos();
173 m_EditWindow.SetAutoTransparent();
174 if(m_Interface.ScanInput()) return;
175 if(m_EditWindow.CheckClose()){
176 SetNeutral();
177 return;
178 }
179 if(GetKey(DIK_UP)==S_PUSH){
180 int tmp = m_Mode->GetNumber()-1;
181 if(tmp<0) tmp = RAIL_EDIT_MODES-1;
182 m_Mode[tmp].SetCheck();
183 }
184 if(GetKey(DIK_DOWN)==S_PUSH){
185 int tmp = m_Mode->GetNumber()+1;
186 if(tmp>=RAIL_EDIT_MODES) tmp = 0;
187 m_Mode[tmp].SetCheck();
188 }
189 EditMode editmode = (EditMode)m_Mode->GetNumber();
190 ResetShowRailSelect();
191 switch(m_EditMode){
192 case EM_ADD_PIER:
193 case EM_ADD_POLE:
194 g_ShowRailSelect = true;
195 g_ShowRailWaySelect = true;
196 break;
197 case EM_EDIT_RAIL:
198 case EM_EDIT_RAIL_BLOCK:
199 case EM_EDIT_SPEED_LIMIT:
200 if(m_EditMode==EM_EDIT_RAIL_BLOCK) g_ShowRailBlockSelect = !CheckAlt();
201 if(m_EditMode==EM_EDIT_SPEED_LIMIT) g_ShowSpeedLimitSelect = !CheckAlt();
202 g_ShowRailSelect = true;
203 g_ShowRailWaySelect = CheckAlt();
204 break;
205 case EM_EDIT_PIER: g_ShowPierSelect = true; break;
206 case EM_EDIT_POLE: g_ShowPoleSelect = true; break;
207 case EM_EDIT_LINE: g_ShowLineSelect = true; break;
208 case EM_EDIT_WARP: g_ShowWarpSelect = true; break;
209 }
210 if(g_NetworkInitialized){
211 GetCamera()->ScanInput(1);
212 return;
213 }
214 if(editmode!=m_EditMode){
215 m_EditMode = editmode;
216 g_Scene->ScanInputRailWay(4, V3ZERO, V3ZERO, true);
217 g_Scene->ScanInputPier(4, V3ZERO, V3ZERO);
218 g_Scene->ScanInputLine(4, V3ZERO, V3ZERO);
219 g_Scene->ScanInputPole(4, V3ZERO, V3ZERO);
220 }
221 if(CheckAlt()){
222 switch(m_EditMode){
223 case EM_EDIT_RAIL:
224 case EM_EDIT_RAIL_BLOCK:
225 case EM_EDIT_SPEED_LIMIT:
226 g_Scene->ScanInputRailWay(1, g_Cursor.GetVEC3(), V3ZERO, m_EditMode==EM_EDIT_RAIL);
227 switch(GetCamera()->ScanInput(1)){
228 case 12:
229 if(CRailDetectCurve2D::IsDetected()){
230 PushUndoStack();
231 CRailDetectCurve2D::GetDetect().SplitLink(NULL);
232 g_Scene->Dump();
233 }
234 break;
235 }
236 break;
237 }
238 }else if(m_EditMode==EM_ADD_PIER || m_EditMode==EM_ADD_POLE){
239 g_Scene->ScanInputRailWay(1, g_Cursor.GetVEC3(), V3ZERO, true);
240 switch(GetCamera()->ScanInput(1)){
241 case 12:
242 if(CRailDetectCurve2D::IsDetected()){
243 PushUndoStack();
244 CRailLinkTemp &detect = CRailDetectCurve2D::GetDetect();
245 VEC3 tpos = detect.m_Pos, tright = detect.m_Right, tup = detect.m_Up, tdir = detect.m_Dir;
246 if(!detect.m_Side) tright=-tright;
247 float ofs = detect.m_Side ? detect.m_Link->GetSegLen()-detect.m_SumLen : detect.m_SumLen;
248 if(m_EditMode==EM_ADD_PIER && g_Pier){
249 float pickalt = tpos.y;
250 if(g_Rail) g_Rail->CalcPierPos(&tpos, &tright, &tup, &tdir);
251 if(g_Tie) g_Tie->CalcPierPos(&tpos, &tright, &tup, &tdir);
252 if(g_Girder) g_Girder->CalcPierPos(&tpos, &tright, &tup, &tdir);
253 CPier *pier = new CPier(tpos, tdir, tup, pickalt, g_Pier);
254 if(pier->Confirm()) detect.m_Link->InsertPier(ofs, pier);
255 }else if(m_EditMode==EM_ADD_POLE && g_Pole){
256 CPole *pole = new CPole(tpos+g_Line->GetTrolleyAlt()*tup
257 +g_Line->GetHeight()*V3UP, tdir, g_Pole);
258 detect.m_Link->InsertPole(ofs, pole, 0, false);
259 }
260 g_Scene->Dump();
261 }
262 break;
263 }
264 }else{
265 switch(m_EditMode){
266 case EM_CONNECT_LINE:
267 g_Scene->ScanInputPole(1, g_Cursor.GetVEC3(), V3ZERO);
268 break;
269 case EM_CONNECT_WARP:
270 g_Scene->ScanInputRailWay(5, g_Cursor.GetVEC3(), V3ZERO, false);
271 break;
272 }
273 switch(GetCamera()->ScanInput(3)){
274 case 10:
275 m_DragState = 1;
276 m_DragBegin = g_Cursor.GetVEC3();
277 break;
278 case 11:
279 switch(m_DragState){
280 case 1:
281 if(V3Len(&(g_Cursor.GetVEC3()-m_DragBegin))<CSR_MOVE_TSD) break;
282 m_DragState = 2;
283 case 2:
284 m_DragEnd = g_Cursor.GetVEC3();
285 switch(m_EditMode){
286 case EM_EDIT_RAIL:
287 case EM_EDIT_RAIL_BLOCK:
288 case EM_EDIT_SPEED_LIMIT:
289 g_Scene->ScanInputRailWay(2, m_DragBegin, m_DragEnd, m_EditMode==EM_EDIT_RAIL);
290 break;
291 case EM_EDIT_PIER:
292 g_Scene->ScanInputPier(2, m_DragBegin, m_DragEnd);
293 break;
294 case EM_EDIT_POLE:
295 g_Scene->ScanInputPole(2, m_DragBegin, m_DragEnd);
296 break;
297 case EM_EDIT_LINE:
298 g_Scene->ScanInputLine(2, m_DragBegin, m_DragEnd);
299 break;
300 case EM_EDIT_WARP:
301 g_SaveFile->ScanInputWarp(2, m_DragBegin, m_DragEnd);
302 break;
303 }
304 break;
305 }
306 break;
307 case 32:
308 switch(m_EditMode){
309 case EM_CONNECT_LINE:
310 m_LineLinkFrom.m_Link = NULL;
311 break;
312 case EM_CONNECT_WARP:
313 m_WarpLinkFrom.m_Link = NULL;
314 break;
315 case EM_EDIT_RAIL_BLOCK:
316 m_RailBlockMenu->Popup(pos.x, pos.y);
317 break;
318 case EM_EDIT_SPEED_LIMIT:
319 m_SpeedLimitMenu->Popup(pos.x, pos.y);
320 break;
321 }
322 break;
323 default:
324 switch(m_DragState){
325 case 0:
326 switch(m_EditMode){
327 case EM_EDIT_RAIL:
328 case EM_EDIT_RAIL_BLOCK:
329 case EM_EDIT_SPEED_LIMIT:
330 g_Scene->ScanInputRailWay(4, g_Cursor.GetVEC3(), V3ZERO, m_EditMode==EM_EDIT_RAIL);
331 if(CRailDetectCurve2D::IsDetected())
332 CRailDetectCurve2D::GetDetect().m_SpliceItr->m_Selected |= 1;
333 break;
334 case EM_EDIT_PIER:
335 g_Scene->ScanInputPier(4, g_Cursor.GetVEC3(), V3ZERO);
336 if(CPier::IsDetected()) CPier::GetDetect()->AddSelectFlag(1);
337 break;
338 case EM_EDIT_POLE:
339 g_Scene->ScanInputPole(4, g_Cursor.GetVEC3(), V3ZERO);
340 if(CPole::IsDetected()) CPole::GetDetect().m_Link->AddSelectFlag(1);
341 break;
342 case EM_EDIT_LINE:
343 g_Scene->ScanInputLine(4, g_Cursor.GetVEC3(), V3ZERO);
344 if(CLine::IsDetected()) CLine::GetDetect()->AddSelectFlag(1);
345 break;
346 case EM_EDIT_WARP:
347 g_SaveFile->ScanInputWarp(4, g_Cursor.GetVEC3(), V3ZERO);
348 if(CRailWay::IsDetected())
349 CRailWay::GetDetect().m_Link->AddSelectFlag(1);
350 break;
351 }
352 break;
353 case 1:
354 switch(m_EditMode){
355 case EM_EDIT_RAIL:
356 case EM_EDIT_RAIL_BLOCK:
357 case EM_EDIT_SPEED_LIMIT:
358 g_Scene->ScanInputRailWay(4, m_DragBegin, V3ZERO, m_EditMode==EM_EDIT_RAIL);
359 if(CRailDetectCurve2D::IsDetected())
360 CRailDetectCurve2D::GetDetect().m_SpliceItr->m_Selected |= 1;
361 break;
362 case EM_EDIT_PIER:
363 g_Scene->ScanInputPier(4, m_DragBegin, V3ZERO);
364 if(CPier::IsDetected()) CPier::GetDetect()->AddSelectFlag(1);
365 break;
366 case EM_EDIT_POLE:
367 g_Scene->ScanInputPole(4, m_DragBegin, V3ZERO);
368 if(CPole::IsDetected()) CPole::GetDetect().m_Link->AddSelectFlag(1);
369 break;
370 case EM_EDIT_LINE:
371 g_Scene->ScanInputLine(4, m_DragBegin, V3ZERO);
372 if(CLine::IsDetected()) CLine::GetDetect()->AddSelectFlag(1);
373 break;
374 case EM_CONNECT_LINE:
375 if(CPole::IsDetected()){
376 if(m_LineLinkFrom.m_Link && g_Line){
377 CPoleLink linkto = CPole::GetDetect();
378 VEC3 dir = linkto.GetPos()-m_LineLinkFrom.GetPos();
379 if(m_LineLinkFrom.m_Link==linkto.m_Link
380 && m_LineLinkFrom.m_Track==linkto.m_Track){
381 EnqueueCommonDialog(new CSimpleDialog(
382 lang(SameSrcAndDest), lang(Error)));
383 g_Skin->Error();
384 }else if(g_Scene->FindLine(&m_LineLinkFrom, &linkto)){
385 EnqueueCommonDialog(new CSimpleDialog(
386 lang(LineAlreadyExists), lang(Error)));
387 g_Skin->Error();
388 }else{
389 PushUndoStack();
390 m_LineLinkFrom.m_Side =
391 V3Dot(&dir, &m_LineLinkFrom.GetDir())>0.0f;
392 linkto.m_Side = V3Dot(&dir, &linkto.GetDir())<0.0f;
393 new CLine(m_LineLinkFrom, linkto, g_Line);
394 m_LineLinkFrom.m_Link = NULL;
395 g_Scene->Dump();
396 }
397 }else{
398 m_LineLinkFrom = CPole::GetDetect();
399 }
400 }
401 break;
402 case EM_EDIT_WARP:
403 g_SaveFile->ScanInputWarp(4, m_DragBegin, V3ZERO);
404 if(CRailWay::IsDetected())
405 CRailWay::GetDetect().m_Link->AddSelectFlag(1);
406 break;
407 case EM_CONNECT_WARP:
408 if(CRailDetectCurve2D::IsDetected()){
409 if(m_WarpLinkFrom.m_Link){
410 CRailLinkTemp linkto = CRailDetectCurve2D::GetDetect();
411 if(m_WarpLinkFrom.m_Link==linkto.m_Link
412 && m_WarpLinkFrom.m_Side==linkto.m_Side){
413 EnqueueCommonDialog(new CSimpleDialog(
414 lang(SameSrcAndDest), lang(Error)));
415 g_Skin->Error();
416 }else{
417 PushUndoStack();
418 g_SaveFile->SetWarpRoot();
419 CRailWay *warp = new CRailWay(
420 R2L(m_WarpLinkFrom.SplitLink(NULL)),
421 R2L(linkto.SplitLink(NULL)), NULL, NULL, NULL);
422 warp->SetWarpDummy();
423 m_WarpLinkFrom.m_Link = NULL;
424 g_Scene->ResetRailWayRoot();
425 }
426 }else{
427 m_WarpLinkFrom = CRailDetectCurve2D::GetDetect();
428 }
429 }
430 break;
431 }
432 case 2:
433 switch(m_EditMode){
434 case EM_EDIT_RAIL:
435 case EM_EDIT_RAIL_BLOCK:
436 case EM_EDIT_SPEED_LIMIT:
437 g_Scene->ScanInputRailWay(3, V3ZERO, V3ZERO, m_EditMode==EM_EDIT_RAIL);
438 break;
439 case EM_EDIT_PIER:
440 g_Scene->ScanInputPier(3, V3ZERO, V3ZERO);
441 break;
442 case EM_EDIT_POLE:
443 g_Scene->ScanInputPole(3, V3ZERO, V3ZERO);
444 break;
445 case EM_EDIT_LINE:
446 g_Scene->ScanInputLine(3, V3ZERO, V3ZERO);
447 break;
448 case EM_EDIT_WARP:
449 g_SaveFile->ScanInputWarp(3, V3ZERO, V3ZERO);
450 break;
451 }
452 break;
453 }
454 m_DragState = 0;
455 if(GetKey(DIK_DELETE)==S_PUSH){
456 PushUndoStack();
457 bool deleted = false;
458 switch(m_EditMode){
459 case EM_EDIT_RAIL: deleted |= g_Scene->DeleteRailWay(); break;
460 case EM_EDIT_PIER: deleted |= g_Scene->DeletePier(NULL); break;
461 case EM_EDIT_POLE: deleted |= g_Scene->DeletePole(NULL); break;
462 case EM_EDIT_LINE: deleted |= g_Scene->DeleteLine(NULL); break;
463 case EM_EDIT_WARP: deleted |= g_SaveFile->DeleteWarp(); break;
464 }
465 if(deleted) g_Scene->Dump();
466 }
467 break;
468 }
469 }
470 }
471
472 /*
473 * レンダリング
474 */
475 void CRailEditMode::RenderCursorScenery(){
476 if(ms_PhotoMode) return;
477 if(g_NetworkInitialized){
478 devResetMatrix();
479 devSetLighting(FALSE);
480 g_StrTex->RenderCenter(g_DispWidth/2, g_DispHeight/3,
481 ScaleColor(0xffffffff, g_BlinkAlpha), ScaleColor(0xff000000, g_BlinkAlpha),
482 lang(CannotEditInNetMode));
483 }else{
484 switch(m_EditMode){
485 case EM_EDIT_RAIL:
486 if(CheckAlt()) CRailDetectCurve2D::RenderLink();
487 break;
488 case EM_ADD_PIER:
489 case EM_ADD_POLE:
490 CRailDetectCurve2D::RenderLink();
491 break;
492 case EM_CONNECT_LINE:
493 CPole::RenderLink();
494 if(m_LineLinkFrom.m_Link){
495 m_LineLinkFrom.Render(0xffffff00);
496 if(CPole::IsDetected()) Draw3DLineWithShadow(
497 m_LineLinkFrom.GetPos(), CPole::GetDetect().GetPos(), 0xffffff00);
498 }
499 break;
500 case EM_CONNECT_WARP:
501 if(CRailDetectCurve2D::IsDetected()){
502 CRailDetectCurve2D::RenderLink();
503 devResetMatrix();
504 devSetLighting(FALSE);
505 devSetTexture(0, NULL);
506 Draw3DPointAs2DRect(CRailDetectCurve2D::GetDetect().m_Pos, 0xff00ffff, 5);
507 }
508 if(m_WarpLinkFrom.m_Link && m_WarpLinkFrom.m_Link->GetScene()==g_Scene){
509 devSetLighting(TRUE);
510 g_LinkObject.SetPos(m_WarpLinkFrom.m_Pos);
511 g_LinkObject.SetDir(m_WarpLinkFrom.m_Dir, m_WarpLinkFrom.m_Up);
512 g_LinkObject.Render();
513 devResetMatrix();
514 devSetLighting(FALSE);
515 devSetTexture(0, NULL);
516 Draw3DPointAs2DRect(m_WarpLinkFrom.m_Pos, 0xffffff00, 5);
517 if(CRailDetectCurve2D::IsDetected()){
518 CRailLinkTemp linkto = CRailDetectCurve2D::GetDetect();
519 if(m_WarpLinkFrom.m_Link->GetScene()==linkto.m_Link->GetScene()
520 && m_WarpLinkFrom.m_Link->GetScene()==g_Scene){
521 devSetTexture(0, NULL);
522 Draw3DLineWithShadow(m_WarpLinkFrom.m_Pos, linkto.m_Pos, 0xffffff00);
523 }
524 }
525 }
526 devSetLighting(FALSE);
527 break;
528 case EM_EDIT_RAIL_BLOCK:
529 if(CheckAlt()) CRailDetectCurve2D::RenderLink();
530 if(CRailDetectCurve2D::IsDetected()){
531 CRailWay *blockway = CRailDetectCurve2D::GetDetect().m_Link;
532 if(blockway->IsRailBlock()) g_StrTex->RenderLeft(
533 TILE_QUAD, TILE_UNIT*2+TILE_QUAD, 0xffffffff, 0xff000000,
534 FlashIn("%s: %s", lang(RailBlock), blockway->GetRailBlock().c_str()));
535 }
536 break;
537 case EM_EDIT_SPEED_LIMIT:
538 if(CheckAlt()) CRailDetectCurve2D::RenderLink();
539 if(CRailDetectCurve2D::IsDetected()){
540 CRailWay *limitway = CRailDetectCurve2D::GetDetect().m_Link;
541 if(limitway->IsSpeedLimit()) g_StrTex->RenderLeft(
542 TILE_QUAD, TILE_UNIT*2+TILE_QUAD, 0xffffffff, 0xff000000,
543 FlashIn("%s: %d [km/h]", lang(SpeedLimit), limitway->GetSpeedLimit()));
544 }
545 break;
546 }
547 if(m_DragState==2) Draw2DRect(
548 m_DragBegin.x, m_DragBegin.y, m_DragEnd.x, m_DragEnd.y, 0xffff0000);
549 }
550 }

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