Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/CGameMode.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 11 - (show annotations) (download) (as text)
Sun Sep 9 04:21:31 2012 UTC (11 years, 8 months ago) by okadu
File MIME type: text/x-c++src
File size: 26194 byte(s)
[okadu] Version 2.14a バグ修正いろいろ

1 #include "stdafx.h"
2 #include "HighTimer.h"
3 #include "Capture.h"
4 #include "RSPV.h"
5 #include "CJobTimer.h"
6 #include "CScene.h"
7 #include "CSaveFile.h"
8 #include "CToggleIcon.h"
9 #include "CPopMenu.h"
10 #include "CDragContainer.h"
11 #include "CModelSwitch.h"
12 #include "CSkinPlugin.h"
13 #include "CRailPlugin.h"
14 #include "CTiePlugin.h"
15 #include "CGirderPlugin.h"
16 #include "CPierPlugin.h"
17 #include "CLinePlugin.h"
18 #include "CPolePlugin.h"
19 #include "CTrainPlugin.h"
20 #include "CStationPlugin.h"
21 #include "CSurfacePlugin.h"
22 #include "CEnvPlugin.h"
23 #include "CNeutralMode.h"
24 #include "CRailSelectMode.h"
25 #include "CTieSelectMode.h"
26 #include "CGirderSelectMode.h"
27 #include "CPierSelectMode.h"
28 #include "CLineSelectMode.h"
29 #include "CPoleSelectMode.h"
30 #include "CRailBuildMode.h"
31 #include "CRailEditMode.h"
32 #include "CTrainEditMode.h"
33 #include "CDiaEditMode.h"
34 #include "CTrainSetMode.h"
35 #include "CTrainViewMode.h"
36 #include "CStationSelectMode.h"
37 #include "CStationBuildMode.h"
38 #include "CStationEditMode.h"
39 #include "CSceneEditMode.h"
40 #include "CEnvEditMode.h"
41 #include "CSimulationMode.h"
42 #include "CFileMode.h"
43 #include "CConfigMode.h"
44 #include "CSkinSelectMode.h"
45 #include "CVideoMode.h"
46 #include "CExitMode.h"
47
48 // ��������
49 void ModelPluginFreeInst();
50 namespace LanguageResource{
51 bool InitLanguage();
52 }
53
54 // ��������
55 const int MODE_LABEL_WIDTH = TILE_UNIT*6; // ���[�h�\������
56 const int PANEL_HIDE_FRAME = MAXFPS; // �p�l���\������
57 const int MODE_SUB[MODE_NUM] = {8, 4, 3, 3, 3, 5}; // �T�u���[�h��
58 const float PANEL_SHOW_RATIO = 0.5f; // �p�l���\�����x
59 const float PANEL_HIDE_RATIO = 0.1f; // �p�l���B�����x
60
61 // �O���O���[�o��
62 extern bool g_IgnoreAcceleration;
63
64 // �����O���[�o��
65 int g_BlinkCounter = 0; // ���p�_���J�E���^ (0..MAXFPS-1)
66 float g_BlinkAlpha = 0.0f; // ���p�_���A���t�@ (0.0..1.0)
67 bool g_RenderBlink = false; // �����_�����O�_���t���O
68 LONGLONG g_SoundSync = 0; // �T�E���h�����p�^�C�}
69 float g_FrameDelta = 0.0f; // �t���[������ [ms]
70 bool g_CursorLockable = false; // �J�[�\�����b�N�J�n
71
72 CNeutralMode *g_NeutralMode; // �j���[�g�������[�h
73 CRailSelectMode *g_RailSelectMode; // ���[���I�����[�h
74 CTieSelectMode *g_TieSelectMode; // �����I�����[�h
75 CGirderSelectMode *g_GirderSelectMode; // �����I�����[�h
76 CPierSelectMode *g_PierSelectMode; // ���r�I�����[�h
77 CLineSelectMode *g_LineSelectMode; // �����I�����[�h
78 CPoleSelectMode *g_PoleSelectMode; // �������I�����[�h
79 CRailBuildMode *g_RailBuildMode; // ���H���u���[�h
80 CRailEditMode *g_RailEditMode; // ���H���W���[�h
81 CTrainEditMode *g_TrainEditMode; // ���q�������[�h
82 CDiaEditMode *g_DiaEditMode; // �^�s�������[�h
83 CTrainSetMode *g_TrainSetMode; // ���q�z�u���[�h
84 CTrainViewMode *g_TrainViewMode; // ���q���_���[�h
85 CStructSelectMode *g_StructSelectMode; // �{���I�����[�h
86 CStructBuildMode *g_StructBuildMode; // �{�����u���[�h
87 CStructEditMode *g_StructEditMode; // �{�����W���[�h
88 CStationSelectMode *g_StationSelectMode; // �{���I�����[�h
89 CStationBuildMode *g_StationBuildMode; // �{�����u���[�h
90 CStationEditMode *g_StationEditMode; // �{�����W���[�h
91 CSceneEditMode *g_SceneEditMode; // �V�[�����W���[�h
92 CEnvEditMode *g_EnvEditMode; // �������W���[�h
93 CSimulationMode *g_SimulationMode; // �V�~�����[�V�����������[�h
94 CFileMode *g_FileMode; // �t�@�C�����[�h
95 CConfigMode *g_ConfigMode; // �����������[�h
96 CSkinSelectMode *g_SkinSelectMode; // �X�L���I�����[�h
97 CVideoMode *g_VideoMode; // �r�f�I���[�h
98 CExitMode *g_ExitMode; // �I�����[�h
99 CWindowCtrl *g_ModalDialog = NULL; // ���[�_���E�B���h�E
100
101 // static �����o
102 int CGameMode::ms_TopPanelTime;
103 int CGameMode::ms_RightPanelTime;
104 float CGameMode::ms_TopPanelShow;
105 float CGameMode::ms_RightPanelShow;
106 float CGameMode::ms_WindDirTemp;
107 string CGameMode::ms_ModeLabel;
108 CGameMode *CGameMode::ms_ActiveMode;
109 CToggleIcon *CGameMode::ms_MenuIcon[];
110
111 /*
112 * [static]
113 * ��������������
114 */
115 void CGameMode::WakeUp(){
116 LanguageResource::InitLanguage();
117 g_ConfigMode = new CConfigMode;
118 g_ConfigMode->Load();
119 }
120
121 /*
122 * [static]
123 * �e���[�h������
124 */
125 void CGameMode::InitMenu(){
126 CPluginMode::InitMenu();
127 int i, j;
128 ms_TopPanelTime = ms_RightPanelTime = PANEL_HIDE_FRAME*3;
129 ms_TopPanelShow = ms_RightPanelShow = 1.0f;
130 string name[MODE_NUM][9] = {{
131 FlashIn("%s (F1)", lang(RailOperation)),
132 FlashIn("%s (1)", lang(SelectRail)),
133 FlashIn("%s (2)", lang(SelectTie)),
134 FlashIn("%s (3)", lang(SelectGirder)),
135 FlashIn("%s (4)", lang(SelectPier)),
136 FlashIn("%s (5)", lang(SelectLine)),
137 FlashIn("%s (6)", lang(SelectPole)),
138 FlashIn("%s (7)", lang(BuildRail)),
139 FlashIn("%s (8)", lang(EditRail))
140 }, {
141 FlashIn("%s (F2)", lang(TrainOperation)),
142 FlashIn("%s (1)", lang(EditTrain)),
143 FlashIn("%s (2)", lang(TravelSetting)),
144 FlashIn("%s (3)", lang(SetTrain)),
145 FlashIn("%s (4)", lang(TrainView))
146 }, {
147 FlashIn("%s (F3)", lang(StationOperation)),
148 FlashIn("%s (1)", lang(SelectStation)),
149 FlashIn("%s (2)", lang(BuildStation)),
150 FlashIn("%s (3)", lang(EditStation))
151 }, {
152 FlashIn("%s (F4)", lang(StructOperation)),
153 FlashIn("%s (1)", lang(SelectStruct)),
154 FlashIn("%s (2)", lang(BuildStruct)),
155 FlashIn("%s (3)", lang(EditStruct))
156 }, {
157 FlashIn("%s (F5)", lang(SceneOperation)),
158 FlashIn("%s (1)", lang(EditScene)),
159 FlashIn("%s (2)", lang(SelectEnv)),
160 FlashIn("%s (3)", lang(SimulationSetting))
161 }, {
162 FlashIn("%s (F6)", lang(System)),
163 FlashIn("%s (1)", lang(File)),
164 FlashIn("%s (2)", lang(Configuration)),
165 FlashIn("%s (3)", lang(SelectSkin)),
166 FlashIn("%s (4)", lang(Video)),
167 FlashIn("%s (5)", lang(Quit))
168 }};
169 char *expr[MODE_NUM][9] = {{
170 lang(RailOperationModeExp),
171 lang(SelectRailModeExp),
172 lang(SelectTieModeExp),
173 lang(SelectGirderModeExp),
174 lang(SelectPierModeExp),
175 lang(SelectLineModeExp),
176 lang(SelectPoleModeExp),
177 lang(BuildRailModeExp),
178 lang(EditRailModeExp)
179 }, {
180 lang(TrainOperationModeExp),
181 lang(EditTrainModeExp),
182 lang(TravelSettingModeExp),
183 lang(SetTrainModeExp),
184 lang(TrainViewModeExp)
185 }, {
186 lang(StationOperationModeExp),
187 lang(SelectStationModeExp),
188 lang(BuildStationModeExp),
189 lang(EditStationModeExp)
190 }, {
191 lang(StructOperationModeExp),
192 lang(SelectStructModeExp),
193 lang(BuildStructModeExp),
194 lang(EditStructModeExp)
195 }, {
196 lang(SceneOperationModeExp),
197 lang(EditSceneModeExp),
198 lang(SelectEnvModeExp),
199 lang(SimulationSettingModeExp)
200 }, {
201 lang(SystemModeExp),
202 lang(FileModeExp),
203 lang(ConfigurationModeExp),
204 lang(SelectSkinModeExp),
205 lang(VideoModeExp),
206 lang(QuitModeExp)
207 }};
208 CGameMode *mode[MODE_NUM][9] = {
209 {NULL, g_RailSelectMode, g_TieSelectMode, g_GirderSelectMode, g_PierSelectMode,
210 g_LineSelectMode, g_PoleSelectMode, g_RailBuildMode, g_RailEditMode},
211 {NULL, g_TrainEditMode, g_DiaEditMode, g_TrainSetMode, g_TrainViewMode},
212 {NULL, g_StationSelectMode, g_StationBuildMode, g_StationEditMode},
213 {NULL, g_StructSelectMode, g_StructBuildMode, g_StructEditMode},
214 {NULL, g_SceneEditMode, g_EnvEditMode, g_SimulationMode},
215 {NULL, g_FileMode, g_ConfigMode, g_SkinSelectMode, g_VideoMode, g_ExitMode}};
216 for(i = 0; i<MODE_NUM; i++){
217 int sub = MODE_SUB[i];
218 ms_MenuIcon[i] = new CToggleIcon[sub+1];
219 ms_MenuIcon[i][0].Init(
220 0, 0, TILE_UNIT*2, TILE_UNIT*2, (char *)name[i][0].c_str(), expr[i][0], NULL,
221 i ? &ms_MenuIcon[i-1][0] : NULL, NULL, DIK_F1+i,
222 0.875f, 0.25f, 0.875f, 0.125f, 0.0f, 0.0f, i);
223 ms_MenuIcon[i][0].SetSlidePos(
224 g_DispWidth-TILE_UNIT*2, g_DispHeight*(i+2), true);
225 ms_MenuIcon[i][1].Init(
226 0, 0, TILE_UNIT*2, TILE_UNIT*2, (char *)name[i][1].c_str(), expr[i][1], NULL,
227 i ? &ms_MenuIcon[i-1][MODE_SUB[i-1]] : NULL, mode[i][1], DIK_1,
228 0.625f, 0.125f, 0.75f, 0.125f, 0.25f, 0.0, i);
229 for(j = 2; j<sub; j++) ms_MenuIcon[i][j].Init(
230 0, 0, TILE_UNIT*2, TILE_UNIT*2, (char *)name[i][j].c_str(), expr[i][j], NULL,
231 &ms_MenuIcon[i][j-1], mode[i][j], DIK_1+j-1,
232 0.625f, 0.25f, 0.75f, 0.25f, (j%4)*0.25f, (j/4)*0.25f, i);
233 ms_MenuIcon[i][sub].Init(
234 0, 0, TILE_UNIT*2, TILE_UNIT*2, (char *)name[i][sub].c_str(), expr[i][sub], NULL,
235 &ms_MenuIcon[i][j-1], mode[i][sub], DIK_1+j-1, 0.625f, 0.375f,
236 0.75f, 0.375f, (sub%4)*0.25f, (sub/4)*0.25f, i);
237 }
238 ms_MenuIcon[0][0].ClearGroupCheck();
239 ms_MenuIcon[0][1].ClearGroupCheck();
240 if(g_RSPV==RSPV_SKIN){
241 ms_MenuIcon[5][0].SetCheck(false);
242 ms_MenuIcon[5][3].SetCheck(false);
243 }
244 void InitNetworkInterface();
245 InitNetworkInterface();
246 }
247
248 /*
249 * [static]
250 * ���C�����[�v
251 */
252 void CGameMode::MainLoop(){
253 CArrowSceneryMode::InitInterface();
254 CRailBuildMode::InitRailwayInterface();
255 CStructBuildMode::InitInterface();
256 g_NeutralMode = new CNeutralMode;
257 g_RailSelectMode = new CRailSelectMode;
258 g_TieSelectMode = new CTieSelectMode;
259 g_GirderSelectMode = new CGirderSelectMode;
260 g_PierSelectMode = new CPierSelectMode;
261 g_LineSelectMode = new CLineSelectMode;
262 g_PoleSelectMode = new CPoleSelectMode;
263 g_RailBuildMode = new CRailBuildMode;
264 g_RailEditMode = new CRailEditMode;
265 g_TrainEditMode = new CTrainEditMode;
266 g_DiaEditMode = new CDiaEditMode;
267 g_TrainSetMode = new CTrainSetMode;
268 g_TrainViewMode = new CTrainViewMode;
269 g_StructSelectMode = new CStructSelectMode;
270 g_StructBuildMode = new CStructBuildMode;
271 g_StructEditMode = new CStructEditMode;
272 g_StationSelectMode = new CStationSelectMode;
273 g_StationBuildMode = new CStationBuildMode;
274 g_StationEditMode = new CStationEditMode;
275 g_SceneEditMode = new CSceneEditMode;
276 g_EnvEditMode = new CEnvEditMode;
277 g_SimulationMode = new CSimulationMode;
278 g_FileMode = new CFileMode;
279 //g_ConfigMode = new CConfigMode;
280 g_SkinSelectMode = new CSkinSelectMode;
281 g_VideoMode = new CVideoMode;
282 g_ExitMode = new CExitMode;
283 if(!g_RSPV){
284 LoadModeSettings();
285 }else{
286 DELETE_A(g_ConfigBuffer);
287 }
288 InitCapture();
289 g_ConfigMode->CheckHardware();
290 switch(g_RSPV){
291 case RSPV_RAIL:
292 g_RailPluginList->FindAvailable()->SetPreview();
293 g_RailSelectMode->Enter();
294 break;
295 case RSPV_TIE:
296 g_TiePluginList->FindAvailable()->SetPreview();
297 g_TieSelectMode->Enter();
298 break;
299 case RSPV_GIRDER:
300 g_GirderPluginList->FindAvailable()->SetPreview();
301 g_GirderSelectMode->Enter();
302 break;
303 case RSPV_PIER:
304 g_PierPluginList->FindAvailable()->SetPreview();
305 g_PierSelectMode->Enter();
306 break;
307 case RSPV_LINE:
308 g_LinePluginList->FindAvailable()->SetPreview();
309 g_LineSelectMode->Enter();
310 break;
311 case RSPV_POLE:
312 g_PolePluginList->FindAvailable()->SetPreview();
313 g_PoleSelectMode->Enter();
314 break;
315 case RSPV_TRAIN:
316 g_TrainPluginList->FindAvailable()->SetPreview();
317 g_TrainEditMode->Enter();
318 break;
319 case RSPV_STATION:
320 g_StationPluginList->FindAvailable()->SetPreview();
321 g_StationSelectMode->Enter();
322 break;
323 case RSPV_STRUCT:
324 g_StructPluginList->FindAvailable()->SetPreview();
325 g_StructSelectMode->Enter();
326 break;
327 case RSPV_SURFACE:
328 g_SurfacePluginList->FindAvailable()->SetPreview();
329 g_SceneEditMode->Enter();
330 break;
331 case RSPV_ENV:
332 g_EnvPluginList->FindAvailable()->SetPreview();
333 g_EnvEditMode->Enter();
334 break;
335 case RSPV_SKIN:
336 g_SkinPluginList->FindAvailable()->SetPreview();
337 g_SkinSelectMode->Enter();
338 break;
339 default:
340 g_NeutralMode->Enter();
341 break;
342 }
343 InitMenu();
344 while(ms_ActiveMode) ms_ActiveMode->Spin();
345 bool RSNCloseSession();
346 RSNCloseSession();
347 int i;
348 for(i = 0; i<MODE_NUM; i++) DELETE_A(ms_MenuIcon[i]);
349 if(!g_RSPV) g_ConfigMode->Save();
350 ReleaseCaptureRS();
351 CPluginMode::FreeMenu();
352 DELETE_V(g_NeutralMode);
353 DELETE_V(g_RailSelectMode);
354 DELETE_V(g_TieSelectMode);
355 DELETE_V(g_GirderSelectMode);
356 DELETE_V(g_PierSelectMode);
357 DELETE_V(g_LineSelectMode);
358 DELETE_V(g_PoleSelectMode);
359 DELETE_V(g_RailBuildMode);
360 DELETE_V(g_RailEditMode);
361 DELETE_V(g_TrainEditMode);
362 DELETE_V(g_DiaEditMode);
363 DELETE_V(g_TrainSetMode);
364 DELETE_V(g_TrainViewMode);
365 DELETE_V(g_StructSelectMode);
366 DELETE_V(g_StructBuildMode);
367 DELETE_V(g_StructEditMode);
368 DELETE_V(g_StationSelectMode);
369 DELETE_V(g_StationBuildMode);
370 DELETE_V(g_StationEditMode);
371 DELETE_V(g_SceneEditMode);
372 DELETE_V(g_EnvEditMode);
373 DELETE_V(g_SimulationMode);
374 DELETE_V(g_FileMode);
375 DELETE_V(g_ConfigMode);
376 DELETE_V(g_SkinSelectMode);
377 DELETE_V(g_VideoMode);
378 DELETE_V(g_ExitMode);
379 }
380
381 /*
382 * [static]
383 * ����������
384 */
385 void CGameMode::LoadModeSettings(){
386 char *str = g_ConfigScript, *eee;
387 try{
388 if(!(str = g_NeutralMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
389 if(!(str = g_RailSelectMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
390 if(!(str = g_TieSelectMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
391 if(!(str = g_GirderSelectMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
392 if(!(str = g_PierSelectMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
393 if(!(str = g_LineSelectMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
394 if(!(str = g_PoleSelectMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
395 if(!(str = g_RailBuildMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
396 if(!(str = g_RailEditMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
397 if(!(str = g_TrainEditMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
398 if(!(str = g_TrainSetMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
399 if(!(str = g_TrainViewMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
400 if(!(str = g_StructSelectMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
401 if(!(str = g_StructBuildMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
402 if(!(str = g_StructEditMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
403 if(!(str = g_StationSelectMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
404 if(!(str = g_StationBuildMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
405 if(!(str = g_StationEditMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
406 if(!(str = g_SceneEditMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
407 if(!(str = g_EnvEditMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
408 if(!(str = g_SimulationMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
409 if(!(str = g_FileMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
410 if(!(str = g_ConfigMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
411 if(!(str = g_SkinSelectMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
412 if(!(str = g_VideoMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
413 if(!(str = g_ExitMode->LoadSetting(eee = str)) && g_ConfigBuffer) throw CSynErr(eee);
414 if(g_ConfigBuffer && *(eee = str)) throw CSynErr(eee);
415 }
416 catch(CSynErr err){
417 err.Handle("\"Config.txt\"", g_ConfigBuffer);
418 }
419 DELETE_A(g_ConfigBuffer);
420 }
421
422 /*
423 * [static]
424 * ����������
425 */
426 void CGameMode::SaveModeSettings(
427 FILE *file // �t�@�C��
428 ){
429 g_NeutralMode->SaveSetting(file);
430 g_RailSelectMode->SaveSetting(file);
431 g_TieSelectMode->SaveSetting(file);
432 g_GirderSelectMode->SaveSetting(file);
433 g_PierSelectMode->SaveSetting(file);
434 g_LineSelectMode->SaveSetting(file);
435 g_PoleSelectMode->SaveSetting(file);
436 g_RailBuildMode->SaveSetting(file);
437 g_RailEditMode->SaveSetting(file);
438 g_TrainEditMode->SaveSetting(file);
439 g_TrainSetMode->SaveSetting(file);
440 g_TrainViewMode->SaveSetting(file);
441 g_StructSelectMode->SaveSetting(file);
442 g_StructBuildMode->SaveSetting(file);
443 g_StructEditMode->SaveSetting(file);
444 g_StationSelectMode->SaveSetting(file);
445 g_StationBuildMode->SaveSetting(file);
446 g_StationEditMode->SaveSetting(file);
447 g_SceneEditMode->SaveSetting(file);
448 g_EnvEditMode->SaveSetting(file);
449 g_SimulationMode->SaveSetting(file);
450 g_FileMode->SaveSetting(file);
451 g_ConfigMode->SaveSetting(file);
452 g_SkinSelectMode->SaveSetting(file);
453 g_VideoMode->SaveSetting(file);
454 g_ExitMode->SaveSetting(file);
455 }
456
457 /*
458 * [static]
459 * �j���[�g�������[�h�����s
460 */
461 void CGameMode::SetNeutral(){
462 int i, j;
463 bool sw = false;
464 for(i = 0; i<MODE_NUM; i++){
465 for(j = 1; j<=MODE_SUB[i]; j++){
466 if(ms_MenuIcon[i][j].GetCheck()){
467 sw = true;
468 ms_MenuIcon[i][j].SetCheck(true);
469 }
470 }
471 }
472 if(!sw) g_NeutralMode->Enter();
473 ms_TopPanelTime = PANEL_HIDE_FRAME*3;
474 ms_RightPanelTime = PANEL_HIDE_FRAME*3;
475 }
476
477 /*
478 * �t���[�������`�F�b�N
479 */
480 bool CGameMode::ScanInputFrame(
481 int option // 2: photomode
482 ){
483 if(g_RSPV) return false;
484 bool enmouse = option&2 ? false : true;
485 int i, j;
486 POINT pos = g_Cursor.GetPos();
487 if(!g_ConfigMode->GetHideTopPanel()
488 || ms_TopPanelTime<PANEL_HIDE_FRAME
489 && pos.y<TILE_UNIT*(ms_TopPanelTime ? 3 : 2))
490 ms_TopPanelTime = PANEL_HIDE_FRAME;
491 if(!g_ConfigMode->GetHideRightPanel()
492 || ms_RightPanelTime<PANEL_HIDE_FRAME
493 && pos.x>=g_DispWidth-TILE_UNIT*(ms_RightPanelTime ? 5 : 4))
494 ms_RightPanelTime = PANEL_HIDE_FRAME;
495 for(i = 0; i<MODE_NUM; i++){
496 int sub = MODE_SUB[i];
497 if(ms_MenuIcon[i][0].ScanInput(!CEditBox::IsActive(), enmouse)){
498 ms_RightPanelTime = PANEL_HIDE_FRAME*3;
499 return true;
500 }
501 if(ms_MenuIcon[i][0].GetCheck()){
502 for(j = 1; j<=sub; j++){
503 if(ms_MenuIcon[i][j].ScanInput(!CEditBox::IsActive(), enmouse)){
504 ms_RightPanelTime = PANEL_HIDE_FRAME*3;
505 return true;
506 }
507 }
508 }else{
509 for(j = 1; j<=sub; j++){
510 if(ms_MenuIcon[i][j].GetCheck()
511 && ms_MenuIcon[i][j].ScanInput(false, enmouse)){
512 ms_RightPanelTime = PANEL_HIDE_FRAME*3;
513 return true;
514 }
515 }
516 }
517 }
518 return false;
519 }
520
521 /*
522 * �t���[���`��
523 */
524 void CGameMode::RenderFrame(
525 int option // 1: speedinfo, 2: photomode
526 ){
527 TIMER_RAII("CGameMode::RenderFrame");
528 int i, j, top1, top2, right1, right2;
529 if(g_RSPV && g_RSPV!=RSPV_SKIN) option = 2;
530 if(option&2){
531 top1 = 0;
532 g_StrTex->RenderLeft(TILE_QUAD, FontY(TILE_UNIT),
533 0xffffffff, 0xff000000, FlashIn("%.1f FPS", GetFPS()));
534 if(!g_RSPV){
535 g_StrTex->RenderCenter(g_DispWidth/2, FontY(TILE_UNIT),
536 0xffffffff, 0xff000000, g_Scene->GetNumberedName());
537 g_StrTex->RenderRight(g_DispWidth-TILE_QUAD, FontY(TILE_UNIT),
538 0xffffffff, 0xff000000, g_SaveFile->GetTimeText());
539 }
540 }else{
541 if(g_ModalDialog || g_RSPV){
542 ms_TopPanelTime = PANEL_HIDE_FRAME;
543 ms_RightPanelTime = PANEL_HIDE_FRAME;
544 }
545 if(ms_TopPanelTime){
546 ms_TopPanelShow = PANEL_SHOW_RATIO
547 +ms_TopPanelShow*(1.0f-PANEL_SHOW_RATIO);
548 ms_TopPanelTime--;
549 }else{
550 ms_TopPanelShow = -0.1f*PANEL_HIDE_RATIO
551 +ms_TopPanelShow*(1.0f-PANEL_HIDE_RATIO);
552 }
553 top2 = Round(ms_TopPanelShow*TILE_UNIT*2);
554 top1 = top2-TILE_UNIT*2;
555 if(ms_RightPanelTime){
556 ms_RightPanelShow = PANEL_SHOW_RATIO
557 +ms_RightPanelShow*(1.0f-PANEL_SHOW_RATIO);
558 ms_RightPanelTime--;
559 }else{
560 ms_RightPanelShow = -1.1f*PANEL_HIDE_RATIO
561 +ms_RightPanelShow*(1.0f-PANEL_HIDE_RATIO);
562 }
563 right1 = g_DispWidth-Round(ms_RightPanelShow*TILE_UNIT*2);
564 right2 = right1+TILE_UNIT*2;
565 g_Skin->SetFrameTexture();
566 SetUVMap(0.0f, 0.0f, 0.375f, 0.125f);
567 TexMap2DRect(0, top1, TILE_UNIT*6, top2, 0xffffffff);
568 SetUVMap(0.375f, 0.0f, 0.5f, 0.125f);
569 TexMap2DRect(TILE_UNIT*6, top1,
570 TILE_UNIT*6+MODE_LABEL_WIDTH, top2, 0xffffffff);
571 SetUVMap(0.5f, 0.0f, 0.75f, 0.125f);
572 TexMap2DRect(TILE_UNIT*6+MODE_LABEL_WIDTH, top1,
573 TILE_UNIT*10+MODE_LABEL_WIDTH, top2, 0xffffffff);
574 SetUVMap(0.75f, 0.0f, 0.875f, 0.125f);
575 TexMap2DRect(TILE_UNIT*10+MODE_LABEL_WIDTH, top1, right1, top2, 0xffffffff);
576 if(right1<g_DispWidth){
577 SetUVMap(0.875f, 0.0f, 1.0f, 0.125f);
578 TexMap2DRect(right1, top1, right2, top2, 0xffffffff);
579 SetUVMap(0.875f, 0.375f, 1.0f, 0.5f);
580 TexMap2DRect(right1, top2, right2, TILE_UNIT*2, 0xffffffff);
581 }
582 int ty = TILE_UNIT*2;
583 bool ishow = right1<g_DispWidth+TILE_UNIT*2;
584 for(i = 0; i<MODE_NUM; i++){
585 int sub = MODE_SUB[i];
586 ms_MenuIcon[i][0].SetSlidePos(right1, ty);
587 int sy = ms_MenuIcon[i][0].GetPosY();
588 if(!ms_MenuIcon[i][0].GetCheck()){
589 if(ishow){
590 int tf = 0;
591 for(j = 1; j<=sub; j++) if(ms_MenuIcon[i][j].GetCheck()) tf = j;
592 if(tf){
593 ms_MenuIcon[i][0].Render(0.875f, 0.5f);
594 ms_MenuIcon[i][tf].SetPos(right1-TILE_UNIT*2, sy);
595 ms_MenuIcon[i][tf].Render(0.75f, 0.5f);
596 }else{
597 ms_MenuIcon[i][0].Render();
598 }
599 }
600 ty += TILE_UNIT*2;
601 continue;
602 }
603 if(ishow){
604 ms_MenuIcon[i][0].Render();
605 for(j = 1; j<=sub; j++){
606 ms_MenuIcon[i][j].SetPos(right1-TILE_UNIT*2, sy+(j-1)*TILE_UNIT*2);
607 ms_MenuIcon[i][j].Render();
608 }
609 }
610 ty += sub*TILE_UNIT*2;
611 }
612 g_Skin->SetFrameTexture();
613 for(i = 0; i<MODE_NUM; i++){
614 int y1 = (i ? ms_MenuIcon[i-1][0].GetPosY() : 0)+TILE_UNIT*2;
615 int y2 = ms_MenuIcon[i][0].GetPosY();
616 if(y2-y1<=0) continue;
617 SetUVMap(0.875f, 0.375f, 1.0f, 0.5f);
618 TexMap2DRect(right1, y1, right2, y2, 0xffffffff);
619 }
620 ty = ms_MenuIcon[MODE_NUM-1][0].GetPosY()+TILE_UNIT*2;
621 SetUVMap(0.875f, 0.375f, 1.0f, 0.5f);
622 TexMap2DRect(right1, ty, right2, g_DispHeight, 0xffffffff);
623 CToggleIcon::RenderPopupText();
624 if(top2<=0) return;
625 g_StrTex->RenderCenter(TILE_UNIT*6+MODE_LABEL_WIDTH/2, top1+TILE_UNIT/4+FontY(TILE_UNIT),
626 g_Skin->m_FrameData.m_LabelFontColor, 0, ms_ModeLabel.c_str());
627 g_StrTex->RenderLeft(TILE_UNIT*10+MODE_LABEL_WIDTH, top1+FontY(TILE_UNIT),
628 g_Skin->m_FrameData.m_InfoFontColor, 0, FlashIn("%.1f FPS", GetFPS()));
629 if(!g_RSPV){
630 g_StrTex->RenderCenter(TILE_UNIT*8+TILE_HALF+MODE_LABEL_WIDTH
631 +(g_DispWidth-TILE_UNIT*12-TILE_HALF-MODE_LABEL_WIDTH)/2, top1+FontY(TILE_UNIT),
632 g_Skin->m_FrameData.m_InfoFontColor, 0, g_Scene->GetNumberedName());
633 g_StrTex->RenderRight(g_DispWidth-TILE_UNIT*2, top1+FontY(TILE_UNIT),
634 g_Skin->m_FrameData.m_InfoFontColor, 0, g_SaveFile->GetTimeText());
635 }
636 }
637 if(option&1){
638 int speed = GetEffectSpeed();
639 if(speed!=1) g_StrTex->RenderCenter(g_DispWidth/2, top1+TILE_UNIT*2+TILE_QUAD,
640 ScaleColor(0xffffffff, g_BlinkAlpha), ScaleColor(0xff000000, g_BlinkAlpha),
641 speed ? FlashIn("%d %s", speed, lang(XSpeed)) : lang(Paused));
642 }
643 }
644
645 /*
646 * �R���p�X�`��
647 */
648 void CGameMode::RenderCompass(){
649 if(!g_ConfigMode->GetCompass()) return;
650 VEC3 dir = GetVDir(), cpos = GetVPos()+14.5f*dir-4.5f*GetVUp()*g_FovRatio;
651 VEC3 cdir(dir.x, 0.0f, dir.z);
652 g_Skin->ScaleCompass(g_FovRatio);
653 g_CompassObject[0].SetPos(cpos);
654 g_CompassObject[0].SetDir(cdir, V3UP);
655 g_CompassObject[0].Render();
656 g_CompassObject[1].SetPos(cpos);
657 g_CompassObject[1].Render();
658 if(g_RSPV || !g_ConfigMode->GetWindMeter() || !g_ConfigMode->GetWind()) return;
659 const float itv = 0.6f, range = 0.9f, windmax = SYMMETRIC_ROTATION_MAX*itv;
660 float windspeed = V3Len(&g_WindDir);
661 if(!g_ModalDialog) ms_WindDirTemp +=
662 windmax*(1.0f-expf(-0.2f*GetEffectSpeed()*windspeed/windmax));
663 ValueCircular(&ms_WindDirTemp, -0.5f*itv, 0.5f*itv);
664 float z, tz;
665 for(z = -range; z<range+0.1f; z += itv){
666 tz = z+ms_WindDirTemp;
667 float alpha = (range-fabsf(tz))/range;
668 if(alpha<=0.0f) continue;
669 g_WindDirObject.SetPos(g_CompassObject[1].GetPos()+g_FovRatio*tz*g_WindDirNorm);
670 g_WindDirObject.SetDir(g_WindDirNorm, V3UP);
671 g_WindDirObject.RenderA(alpha);
672 }
673 devResetMatrix();
674 if(ms_ActiveMode!=g_NeutralMode || !g_ConfigMode->IsWindowDiv()){
675 int vp_w = g_DispWidth, vp_h = g_DispHeight;
676 g_StrTex->RenderRight(vp_w*45/100, vp_h-TILE_UNIT,
677 0xffffffff, 0xff000000, FlashIn("%s: %.1f [m/s]", lang(WindSpeed), MAXFPS*windspeed));
678 }
679 }
680
681 /*
682 * [static]
683 * �_�C�A���O�`��
684 */
685 bool CGameMode::RenderDialog(){
686 if(!g_ModalDialog) return false;
687 devSetTexture(0, NULL);
688 Fill2DRect(0, 0, g_DispWidth, g_DispHeight, 0x80808080);
689 g_ModalDialog->Render();
690 return true;
691 }
692
693 /*
694 * �R���X�g���N�^
695 */
696 CGameMode::CGameMode(){
697 CInterface::ResetTabHead();
698 m_Interface.Init(0, 0, 0, 0, "", NULL);
699 }
700
701 /*
702 * ���[�h���L����
703 */
704 void CGameMode::Enter(){
705 SetViewport(0, 0, sv3.width, sv3.height);
706 ms_TopPanelTime = PANEL_HIDE_FRAME*3;
707 ModelPluginFreeInst();
708 CPopMenu::ResetCurrentMenu();
709 CEditBox::Disable();
710 Randomize();
711 g_SystemSwitch[SYS_SW_SHADOW].SetValue(g_ConfigMode->GetShadow());
712 g_SystemSwitch[SYS_SW_ENVMAP].SetValue(g_ConfigMode->GetEnvMap());
713 void ResetShowRailSelect();
714 ResetShowRailSelect();
715 EnterGame();
716 ms_ActiveMode = this;
717 }
718
719 /*
720 * ���[�h���[�v
721 */
722 void CGameMode::Spin(){
723 SetMasterVolume();
724 while(PeekAllMessage()){
725 if(IsActive()){
726 g_JobTimer.Start();
727 {
728 TIMER_RAII("All");
729 if(g_CursorLockable) g_Cursor.Clip();
730 //�J�[�\���`�����O��
731 //ScanInputDevice();
732 //g_Cursor.FixCursor();
733 g_BlinkCounter = (g_BlinkCounter+1)%MAXFPS;
734 g_BlinkAlpha = 0.5f*(sinf(2.0f*D3DX_PI*g_BlinkCounter/MAXFPS)+1.0f);
735 g_ConfigMode->SetSpecularLight();
736 g_ManualControl = !!g_SimulationMode->GetManualControl() || g_NetworkInitialized;
737 g_IgnoreAcceleration = !!g_SimulationMode->GetIgnoreAcceleration();
738 void CheckNetworkState();
739 CheckNetworkState();
740 SpinGame();
741 if(CheckAlt() && GetKey(DIK_F4)==S_PUSH){
742 Exit();
743 break;
744 }
745 if(GetButton(DIM_LEFT)<=S_PULL){
746 CDragContainer::EndDrag();
747 }
748 }
749 {
750 TIMER_RAII("SyncFrame");
751 SyncFrame();
752 }
753 g_JobTimer.Stop();
754 }else{
755 SetMasterVolume();
756 ClipCursor(NULL);
757 if(g_NetworkInitialized){
758 g_SaveFile->Simulate(-1);
759 SyncFrame();
760 }else{
761 WaitMessage();
762 }
763 }
764 if(ms_ActiveMode!=this) return;
765 }
766 Exit();
767 }
768
769 /*
770 * �T�E���h��������
771 */
772 void CGameMode::SpinSound(){
773 LONGLONG t = HighTimer();
774 g_FrameDelta = (float)(t-g_SoundSync);
775 g_SoundSync = t;
776 SetListenerPos(GetVPos());
777 SetListenerDir(GetVDir(), GetVUp());
778 }
779
780 /*
781 * �����V�~�����[�V�������x����
782 */
783 int CGameMode::GetEffectSpeed(){
784 return IsPaused() ? 0 : g_SimulationMode->GetSimSpeed();
785 }

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