Starshatter_Open
Open source Starshatter engine
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
GameScreen.cpp
Go to the documentation of this file.
1 /* Project Starshatter 4.5
2  Destroyer Studios LLC
3  Copyright © 1997-2004. All Rights Reserved.
4 
5  SUBSYSTEM: Stars
6  FILE: GameScreen.cpp
7  AUTHOR: John DiCamillo
8 
9 */
10 
11 #include "MemDebug.h"
12 #include "GameScreen.h"
13 
14 #include "Sim.h"
15 #include "Ship.h"
16 #include "DisplayView.h"
17 #include "HUDView.h"
18 #include "HUDSounds.h"
19 #include "WepView.h"
20 #include "QuantumView.h"
21 #include "QuitView.h"
22 #include "RadioView.h"
23 #include "TacticalView.h"
24 #include "NavDlg.h"
25 #include "EngDlg.h"
26 #include "FltDlg.h"
27 #include "AudDlg.h"
28 #include "VidDlg.h"
29 #include "OptDlg.h"
30 #include "CtlDlg.h"
31 #include "KeyDlg.h"
32 #include "JoyDlg.h"
33 #include "ModDlg.h"
34 #include "ModInfoDlg.h"
35 #include "FormDef.h"
36 #include "Starshatter.h"
37 #include "CameraDirector.h"
38 
39 #include "Game.h"
40 #include "Video.h"
41 #include "Screen.h"
42 #include "Window.h"
43 #include "ActiveWindow.h"
44 #include "Keyboard.h"
45 #include "Mouse.h"
46 #include "MouseController.h"
47 #include "CameraView.h"
48 #include "FadeView.h"
49 #include "Color.h"
50 #include "Bitmap.h"
51 #include "Font.h"
52 #include "FontMgr.h"
53 #include "EventDispatch.h"
54 #include "DataLoader.h"
55 #include "Resource.h"
56 
57 // +--------------------------------------------------------------------+
58 
59 GameScreen* GameScreen::game_screen = 0;
60 
61 static MouseController* mouse_con = 0;
62 static bool mouse_active = false;
63 
64 // +--------------------------------------------------------------------+
65 
67 : screen(0), gamewin(0),
68 navdlg(0), wep_view(0), engdlg(0), fltdlg(0),
69 HUDfont(0), GUIfont(0), GUI_small_font(0), title_font(0), cam_view(0),
70 isShown(false), disp_view(0), hud_view(0), tac_view(0), radio_view(0),
71 quantum_view(0), quit_view(0), ctldlg(0), joydlg(0), keydlg(0), auddlg(0),
72 viddlg(0), moddlg(0), modInfoDlg(0),
73 flare1(0), flare2(0), flare3(0), flare4(0),
74 optdlg(0), cam_dir(0), sim(0)
75 {
76  cam_dir = new(__FILE__,__LINE__) CameraDirector;
77  sim = Sim::GetSim();
78  loader = DataLoader::GetLoader();
79 
80  // find the fonts:
81  HUDfont = FontMgr::Find("HUD");
82  GUIfont = FontMgr::Find("GUI");
83  GUI_small_font = FontMgr::Find("GUIsmall");
84  title_font = FontMgr::Find("Title");
85 
86  loader->LoadTexture("flare0+.pcx", flare1, Bitmap::BMP_TRANSLUCENT);
87  loader->LoadTexture("flare2.pcx", flare2, Bitmap::BMP_TRANSLUCENT);
88  loader->LoadTexture("flare3.pcx", flare3, Bitmap::BMP_TRANSLUCENT);
89  loader->LoadTexture("flare4.pcx", flare4, Bitmap::BMP_TRANSLUCENT);
90 
91  mouse_con = MouseController::GetInstance();
92  game_screen = this;
93 }
94 
96 {
97  TearDown();
98  game_screen = 0;
99 }
100 
101 // +--------------------------------------------------------------------+
102 
103 void
105 {
106  if (!s)
107  return;
108 
109  screen = s;
110 
111  loader->UseFileSystem(true);
112 
113  // create windows
114  gamewin = new(__FILE__,__LINE__) Window(screen, 0, 0, screen->Width(), screen->Height());
115 
116  // attach views to windows (back to front)
117  // fade in:
118  gamewin->AddView(new(__FILE__,__LINE__) FadeView(gamewin, 1, 0, 0));
119 
120  // camera:
121  cam_dir = CameraDirector::GetInstance();
122  cam_view = new(__FILE__,__LINE__) CameraView(gamewin, cam_dir->GetCamera(), 0);
123 
124  if (cam_view)
125  gamewin->AddView(cam_view);
126 
127  // HUD:
128  hud_view = new(__FILE__,__LINE__) HUDView(gamewin);
129  gamewin->AddView(hud_view);
130 
131  wep_view = new(__FILE__,__LINE__) WepView(gamewin);
132  gamewin->AddView(wep_view);
133 
134  quantum_view = new(__FILE__,__LINE__) QuantumView(gamewin);
135  gamewin->AddView(quantum_view);
136 
137  radio_view = new(__FILE__,__LINE__) RadioView(gamewin);
138  gamewin->AddView(radio_view);
139 
140  tac_view = new(__FILE__,__LINE__) TacticalView(gamewin, this);
141  gamewin->AddView(tac_view);
142 
143  disp_view = DisplayView::GetInstance();
144 
145  // note: quit view must be last in chain
146  // so it can release window surface
147  quit_view = new(__FILE__,__LINE__) QuitView(gamewin);
148  gamewin->AddView(quit_view);
149 
151 
152  // initialize lens flare bitmaps:
153  if (stars->LensFlare()) {
154  cam_view->LensFlareElements(flare1, flare4, flare2, flare3);
155  cam_view->LensFlare(true);
156  }
157 
158  // if lens flare disabled, just create the corona:
159  else if (stars->Corona()) {
160  cam_view->LensFlareElements(flare1, 0, 0, 0);
161  cam_view->LensFlare(true);
162  }
163 
164  screen->AddWindow(gamewin);
165 
166  FormDef aud_def("AudDlg", 0);
167  aud_def.Load("AudDlg");
168  auddlg = new(__FILE__,__LINE__) AudDlg(screen, aud_def, this);
169 
170  FormDef ctl_def("CtlDlg", 0);
171  ctl_def.Load("CtlDlg");
172  ctldlg = new(__FILE__,__LINE__) CtlDlg(screen, ctl_def, this);
173 
174  FormDef opt_def("OptDlg", 0);
175  opt_def.Load("OptDlg");
176  optdlg = new(__FILE__,__LINE__) OptDlg(screen, opt_def, this);
177 
178  FormDef vid_def("VidDlg", 0);
179  vid_def.Load("VidDlg");
180  viddlg = new(__FILE__,__LINE__) VidDlg(screen, vid_def, this);
181 
182  FormDef mod_def("ModDlg", 0);
183  mod_def.Load("ModDlg");
184  moddlg = new(__FILE__,__LINE__) ModDlg(screen, mod_def, this);
185 
186  FormDef joy_def("JoyDlg", 0);
187  joy_def.Load("JoyDlg");
188  joydlg = new(__FILE__,__LINE__) JoyDlg(screen, joy_def, this);
189 
190  FormDef key_def("KeyDlg", 0);
191  key_def.Load("KeyDlg");
192  keydlg = new(__FILE__,__LINE__) KeyDlg(screen, key_def, this);
193 
194  FormDef mod_info_def("ModInfoDlg", 0);
195  mod_info_def.Load("ModInfoDlg");
196  modInfoDlg = new(__FILE__,__LINE__) ModInfoDlg(screen, mod_info_def, this);
197 
198  FormDef nav_def("NavDlg", 0);
199  nav_def.Load("NavDlg");
200  navdlg = new(__FILE__,__LINE__) NavDlg(screen, nav_def, this);
201 
202  FormDef eng_def("EngDlg", 0);
203  eng_def.Load("EngDlg");
204  engdlg = new(__FILE__,__LINE__) EngDlg(screen, eng_def, this);
205 
206  FormDef flt_def("FltDlg", 0);
207  flt_def.Load("FltDlg");
208  fltdlg = new(__FILE__,__LINE__) FltDlg(screen, flt_def, this);
209 
210  if (engdlg) engdlg->Hide();
211  if (fltdlg) fltdlg->Hide();
212  if (navdlg) navdlg->Hide();
213  if (auddlg) auddlg->Hide();
214  if (viddlg) viddlg->Hide();
215  if (optdlg) optdlg->Hide();
216  if (ctldlg) ctldlg->Hide();
217  if (keydlg) keydlg->Hide();
218  if (joydlg) joydlg->Hide();
219  if (moddlg) moddlg->Hide();
220  if (modInfoDlg) modInfoDlg->Hide();
221 
223 
224  frame_rate = 0;
225 
227 }
228 
229 // +--------------------------------------------------------------------+
230 
231 void
233 {
234  if (gamewin && disp_view)
235  gamewin->DelView(disp_view);
236 
237  if (screen) {
238  screen->DelWindow(engdlg);
239  screen->DelWindow(fltdlg);
240  screen->DelWindow(navdlg);
241  screen->DelWindow(modInfoDlg);
242  screen->DelWindow(auddlg);
243  screen->DelWindow(viddlg);
244  screen->DelWindow(optdlg);
245  screen->DelWindow(moddlg);
246  screen->DelWindow(ctldlg);
247  screen->DelWindow(keydlg);
248  screen->DelWindow(joydlg);
249  screen->DelWindow(gamewin);
250  }
251 
252  delete engdlg;
253  delete fltdlg;
254  delete navdlg;
255  delete modInfoDlg;
256  delete auddlg;
257  delete viddlg;
258  delete optdlg;
259  delete moddlg;
260  delete ctldlg;
261  delete keydlg;
262  delete joydlg;
263  delete gamewin;
264  delete cam_dir;
265 
266  engdlg = 0;
267  fltdlg = 0;
268  navdlg = 0;
269  modInfoDlg = 0;
270  auddlg = 0;
271  viddlg = 0;
272  optdlg = 0;
273  moddlg = 0;
274  ctldlg = 0;
275  keydlg = 0;
276  joydlg = 0;
277  gamewin = 0;
278  screen = 0;
279  cam_dir = 0;
280  cam_view = 0;
281  disp_view = 0;
282 }
283 
284 // +--------------------------------------------------------------------+
285 
286 void
288 {
289  frame_rate = f;
290 }
291 
292 // +--------------------------------------------------------------------+
293 
294 void
296 {
297  cam_view->SetFieldOfView(fov);
298 }
299 
300 // +--------------------------------------------------------------------+
301 
302 double
304 {
305  return cam_view->GetFieldOfView();
306 }
307 
308 // +--------------------------------------------------------------------+
309 
310 Bitmap*
312 {
313  switch (index) {
314  case 0: return flare1;
315  case 1: return flare2;
316  case 2: return flare3;
317  case 3: return flare4;
318  }
319 
320  return 0;
321 }
322 
323 // +--------------------------------------------------------------------+
324 
325 void
327 {
328  sim = Sim::GetSim();
329 
330  if (sim) {
331  cam_view->UseCamera(CameraDirector::GetInstance()->GetCamera());
332  cam_view->UseScene(sim->GetScene());
333 
334  Ship* player = sim->GetPlayerShip();
335 
336  if (player) {
337  bool dialog_showing = false;
338 
339  if (hud_view) {
340  hud_view->UseCameraView(cam_view);
341  hud_view->ExecFrame();
342  }
343 
344  if (quit_view && quit_view->IsMenuShown()) {
345  quit_view->ExecFrame();
346  dialog_showing = true;
347  }
348 
349  if (navdlg && navdlg->IsShown()) {
350  navdlg->SetShip(player);
351  navdlg->ExecFrame();
352  dialog_showing = true;
353  }
354 
355  if (engdlg && engdlg->IsShown()) {
356  engdlg->SetShip(player);
357  engdlg->ExecFrame();
358  dialog_showing = true;
359  }
360 
361  if (fltdlg && fltdlg->IsShown()) {
362  fltdlg->SetShip(player);
363  fltdlg->ExecFrame();
364  dialog_showing = true;
365  }
366 
367  if (auddlg && auddlg->IsShown()) {
368  auddlg->ExecFrame();
369  dialog_showing = true;
370  }
371 
372  if (viddlg && viddlg->IsShown()) {
373  viddlg->ExecFrame();
374  dialog_showing = true;
375  }
376 
377  if (optdlg && optdlg->IsShown()) {
378  optdlg->ExecFrame();
379  dialog_showing = true;
380  }
381 
382  if (ctldlg && ctldlg->IsShown()) {
383  ctldlg->ExecFrame();
384  dialog_showing = true;
385  }
386 
387  if (keydlg && keydlg->IsShown()) {
388  keydlg->ExecFrame();
389  dialog_showing = true;
390  }
391 
392  if (joydlg && joydlg->IsShown()) {
393  joydlg->ExecFrame();
394  dialog_showing = true;
395  }
396 
397  if (moddlg && moddlg->IsShown()) {
398  moddlg->ExecFrame();
399  dialog_showing = true;
400  }
401 
402  if (quantum_view && !dialog_showing) {
403  quantum_view->ExecFrame();
404  }
405 
406  if (radio_view && !dialog_showing) {
407  radio_view->ExecFrame();
408  }
409 
410  if (wep_view && !dialog_showing) {
411  wep_view->ExecFrame();
412  }
413 
414  if (tac_view && !dialog_showing) {
415  if (cam_view)
416  tac_view->UseProjector(cam_view->GetProjector());
417  tac_view->ExecFrame();
418  }
419  }
420 
421  if (disp_view) {
422  disp_view->ExecFrame();
423  }
424  }
425 
427 
428  if (stars) {
429  if (stars->LensFlare()) {
430  cam_view->LensFlareElements(flare1, flare4, flare2, flare3);
431  cam_view->LensFlare(true);
432  }
433 
434  else if (stars->Corona()) {
435  cam_view->LensFlareElements(flare1, 0, 0, 0);
436  cam_view->LensFlare(true);
437  }
438 
439  else {
440  cam_view->LensFlare(false);
441  }
442  }
443 }
444 
445 // +--------------------------------------------------------------------+
446 
447 void
449 {
450  if (hud_view)
451  hud_view->CycleMFDMode(mfd);
452 }
453 
454 void
456 {
457  if (hud_view)
458  hud_view->CycleHUDMode();
459 }
460 
461 void
463 {
464  if (hud_view)
465  hud_view->CycleHUDColor();
466 }
467 
468 void
470 {
471  if (hud_view)
472  hud_view->CycleHUDWarn();
473 }
474 
475 // +--------------------------------------------------------------------+
476 
477 bool
479 {
480  bool processed = false;
481 
482  if (!gamewin) return processed;
483 
484  if (navdlg && navdlg->IsShown()) {
485  HideNavDlg();
486  processed = true;
487  }
488 
489  else if (engdlg && engdlg->IsShown()) {
490  HideEngDlg();
491  processed = true;
492  }
493 
494  else if (fltdlg && fltdlg->IsShown()) {
495  HideFltDlg();
496  processed = true;
497  }
498 
499  else if (modInfoDlg && modInfoDlg->IsShown()) {
500  HideModInfoDlg();
501  processed = true;
502  }
503 
504  else if (keydlg && keydlg->IsShown()) {
505  ShowCtlDlg();
506  processed = true;
507  }
508 
509  else if (joydlg && joydlg->IsShown()) {
510  ShowCtlDlg();
511  processed = true;
512  }
513 
514  else if (auddlg && auddlg->IsShown()) {
515  CancelOptions();
516  processed = true;
517  }
518 
519  else if (viddlg && viddlg->IsShown()) {
520  CancelOptions();
521  processed = true;
522  }
523 
524  else if (optdlg && optdlg->IsShown()) {
525  CancelOptions();
526  processed = true;
527  }
528 
529  else if (moddlg && moddlg->IsShown()) {
530  CancelOptions();
531  processed = true;
532  }
533 
534  else if (ctldlg && ctldlg->IsShown()) {
535  CancelOptions();
536  processed = true;
537  }
538 
539  else if (quantum_view && quantum_view->IsMenuShown()) {
540  quantum_view->CloseMenu();
541  processed = true;
542  }
543 
544  else if (quit_view && quit_view->IsMenuShown()) {
545  quit_view->CloseMenu();
546  processed = true;
547  }
548 
549  else if (radio_view && radio_view->IsMenuShown()) {
550  radio_view->CloseMenu();
551  processed = true;
552  }
553 
554  return processed;
555 }
556 
557 static Window* old_disp_win = 0;
558 
559 void
561 {
562  if (!isShown) {
563  screen->AddWindow(gamewin);
564  isShown = true;
565 
566  if (disp_view) {
567  old_disp_win = disp_view->GetWindow();
568 
569  disp_view->SetWindow(gamewin);
570  gamewin->AddView(disp_view);
571  }
572  }
573 }
574 
575 void
577 {
578  if (isShown) {
579  HideAll();
580 
581  if (disp_view && gamewin) {
582  gamewin->DelView(disp_view);
583  disp_view->SetWindow(old_disp_win);
584  }
585 
586  if (engdlg) engdlg->SetShip(0);
587  if (fltdlg) fltdlg->SetShip(0);
588  if (navdlg) navdlg->SetShip(0);
589 
591 
592  screen->DelWindow(gamewin);
593  isShown = false;
594  }
595 }
596 
597 // +--------------------------------------------------------------------+
598 
599 bool
601 {
602  bool form_shown = false;
603 
604  if (navdlg && navdlg->IsShown())
605  form_shown = true;
606 
607  else if (engdlg && engdlg->IsShown())
608  form_shown = true;
609 
610  else if (fltdlg && fltdlg->IsShown())
611  form_shown = true;
612 
613  else if (auddlg && auddlg->IsShown())
614  form_shown = true;
615 
616  else if (viddlg && viddlg->IsShown())
617  form_shown = true;
618 
619  else if (optdlg && optdlg->IsShown())
620  form_shown = true;
621 
622  else if (moddlg && moddlg->IsShown())
623  form_shown = true;
624 
625  else if (ctldlg && ctldlg->IsShown())
626  form_shown = true;
627 
628  else if (keydlg && keydlg->IsShown())
629  form_shown = true;
630 
631  else if (joydlg && joydlg->IsShown())
632  form_shown = true;
633 
634  return form_shown;
635 }
636 
637 // +--------------------------------------------------------------------+
638 
639 void
641 {
642  if (!gamewin) return;
643 
644  if ((navdlg && navdlg->IsShown()) ||
645  (engdlg && engdlg->IsShown()) ||
646  (fltdlg && fltdlg->IsShown()) ||
647  (auddlg && auddlg->IsShown()) ||
648  (viddlg && viddlg->IsShown()) ||
649  (optdlg && optdlg->IsShown()) ||
650  (moddlg && moddlg->IsShown()) ||
651  (ctldlg && ctldlg->IsShown()) ||
652  (keydlg && keydlg->IsShown()) ||
653  (joydlg && joydlg->IsShown()))
654  return;
655 
656  gamewin->MoveTo(Rect(0, 0, screen->Width(), screen->Height()));
657  screen->AddWindow(gamewin);
658 }
659 
660 // +--------------------------------------------------------------------+
661 
662 void
664 {
665  if (!gamewin) return;
666 
667  if (navdlg && !navdlg->IsShown()) {
668  HideAll();
669 
670  navdlg->SetSystem(sim->GetStarSystem());
671  navdlg->SetShip(sim->GetPlayerShip());
672  navdlg->Show();
673 
674  if (mouse_con) {
675  mouse_active = mouse_con->Active();
676  mouse_con->SetActive(false);
677  }
678 
679  Mouse::Show(true);
680  }
681  else {
682  HideNavDlg();
683  }
684 }
685 
686 // +--------------------------------------------------------------------+
687 
688 void
690 {
691  if (!gamewin) return;
692 
693  if (navdlg && navdlg->IsShown()) {
694  navdlg->Hide();
695 
696  if (mouse_con)
697  mouse_con->SetActive(mouse_active);
698 
699  Mouse::Show(false);
700  screen->AddWindow(gamewin);
701  }
702 }
703 
704 // +--------------------------------------------------------------------+
705 
706 bool
708 {
709  return gamewin && navdlg && navdlg->IsShown();
710 }
711 
712 // +--------------------------------------------------------------------+
713 
714 void
716 {
717  if (!gamewin) return;
718 
719  if (engdlg && !engdlg->IsShown()) {
720  HideAll();
721 
722  engdlg->SetShip(sim->GetPlayerShip());
723  engdlg->Show();
724 
725  if (mouse_con) {
726  mouse_active = mouse_con->Active();
727  mouse_con->SetActive(false);
728  }
729 
730  Mouse::Show(true);
731  }
732  else {
733  HideEngDlg();
734  }
735 }
736 
737 // +--------------------------------------------------------------------+
738 
739 void
741 {
742  if (!gamewin) return;
743 
744  if (engdlg && engdlg->IsShown()) {
745  engdlg->Hide();
746 
747  if (mouse_con)
748  mouse_con->SetActive(mouse_active);
749 
750  Mouse::Show(false);
751  screen->AddWindow(gamewin);
752  }
753 }
754 
755 // +--------------------------------------------------------------------+
756 
757 bool
759 {
760  return gamewin && engdlg && engdlg->IsShown();
761 }
762 
763 // +--------------------------------------------------------------------+
764 
765 void
767 {
768  if (!gamewin) return;
769 
770  if (fltdlg && !fltdlg->IsShown()) {
771  HideAll();
772 
773  fltdlg->SetShip(sim->GetPlayerShip());
774  fltdlg->Show();
775 
776  if (mouse_con) {
777  mouse_active = mouse_con->Active();
778  mouse_con->SetActive(false);
779  }
780 
781  Mouse::Show(true);
782  }
783  else {
784  HideFltDlg();
785  }
786 }
787 
788 // +--------------------------------------------------------------------+
789 
790 void
792 {
793  if (!gamewin) return;
794 
795  if (fltdlg && fltdlg->IsShown()) {
796  fltdlg->Hide();
797 
798  if (mouse_con)
799  mouse_con->SetActive(mouse_active);
800 
801  Mouse::Show(false);
802  screen->AddWindow(gamewin);
803  }
804 }
805 
806 // +--------------------------------------------------------------------+
807 
808 bool
810 {
811  return gamewin && fltdlg && fltdlg->IsShown();
812 }
813 
814 // +--------------------------------------------------------------------+
815 
816 void
818 {
819  if (auddlg) {
820  if (quit_view) {
821  quit_view->CloseMenu();
822  Starshatter::GetInstance()->Pause(true);
823  }
824 
825  HideAll();
826 
827  auddlg->Show();
828  auddlg->SetTopMost(true);
829 
830  if (mouse_con) {
831  mouse_active = mouse_con->Active();
832  mouse_con->SetActive(false);
833  }
834 
835  Mouse::Show(true);
836  }
837 }
838 
839 // +--------------------------------------------------------------------+
840 
841 void
843 {
844  if (auddlg && auddlg->IsShown()) {
845  auddlg->Hide();
846  Mouse::Show(false);
847  screen->AddWindow(gamewin);
848 
849  if (quit_view)
850  quit_view->ShowMenu();
851  }
852 }
853 
854 // +--------------------------------------------------------------------+
855 
856 bool
858 {
859  return auddlg && auddlg->IsShown();
860 }
861 
862 // +--------------------------------------------------------------------+
863 
864 void
866 {
867  if (viddlg) {
868  if (quit_view) {
869  quit_view->CloseMenu();
870  Starshatter::GetInstance()->Pause(true);
871  }
872 
873  HideAll();
874 
875  viddlg->Show();
876  viddlg->SetTopMost(true);
877 
878  if (mouse_con) {
879  mouse_active = mouse_con->Active();
880  mouse_con->SetActive(false);
881  }
882 
883  Mouse::Show(true);
884  }
885 }
886 
887 // +--------------------------------------------------------------------+
888 
889 void
891 {
892  if (viddlg && viddlg->IsShown()) {
893  viddlg->Hide();
894  Mouse::Show(false);
895  screen->AddWindow(gamewin);
896 
897  if (quit_view)
898  quit_view->ShowMenu();
899  }
900 }
901 
902 // +--------------------------------------------------------------------+
903 
904 bool
906 {
907  return viddlg && viddlg->IsShown();
908 }
909 
910 // +--------------------------------------------------------------------+
911 
912 void
914 {
915  if (optdlg) {
916  if (quit_view) {
917  quit_view->CloseMenu();
918  Starshatter::GetInstance()->Pause(true);
919  }
920 
921  HideAll();
922 
923  optdlg->Show();
924  optdlg->SetTopMost(true);
925 
926  if (mouse_con) {
927  mouse_active = mouse_con->Active();
928  mouse_con->SetActive(false);
929  }
930 
931  Mouse::Show(true);
932  }
933 }
934 
935 // +--------------------------------------------------------------------+
936 
937 void
939 {
940  if (optdlg && optdlg->IsShown()) {
941  optdlg->Hide();
942  Mouse::Show(false);
943  screen->AddWindow(gamewin);
944 
945  if (quit_view)
946  quit_view->ShowMenu();
947  }
948 }
949 
950 // +--------------------------------------------------------------------+
951 
952 bool
954 {
955  return optdlg && optdlg->IsShown();
956 }
957 
958 // +--------------------------------------------------------------------+
959 
960 void
962 {
963  if (moddlg) {
964  if (quit_view) {
965  quit_view->CloseMenu();
966  Starshatter::GetInstance()->Pause(true);
967  }
968 
969  HideAll();
970 
971  moddlg->Show();
972  moddlg->SetTopMost(true);
973 
974  if (mouse_con) {
975  mouse_active = mouse_con->Active();
976  mouse_con->SetActive(false);
977  }
978 
979  Mouse::Show(true);
980  }
981 }
982 
983 // +--------------------------------------------------------------------+
984 
985 void
987 {
988  if (moddlg && moddlg->IsShown()) {
989  moddlg->Hide();
990  Mouse::Show(false);
991  screen->AddWindow(gamewin);
992 
993  if (quit_view)
994  quit_view->ShowMenu();
995  }
996 }
997 
998 // +--------------------------------------------------------------------+
999 
1000 bool
1002 {
1003  return moddlg && moddlg->IsShown();
1004 }
1005 
1006 // +--------------------------------------------------------------------+
1007 
1008 void
1010 {
1011  if (moddlg && modInfoDlg) {
1012  if (quit_view) {
1013  quit_view->CloseMenu();
1014  Starshatter::GetInstance()->Pause(true);
1015  }
1016 
1017  HideAll();
1018 
1019  moddlg->Show();
1020  moddlg->SetTopMost(false);
1021 
1022  modInfoDlg->Show();
1023  modInfoDlg->SetTopMost(true);
1024 
1025  if (mouse_con) {
1026  mouse_active = mouse_con->Active();
1027  mouse_con->SetActive(false);
1028  }
1029 
1030  Mouse::Show(true);
1031  }
1032 }
1033 
1034 // +--------------------------------------------------------------------+
1035 
1036 void
1038 {
1039  ShowModDlg();
1040 }
1041 
1042 // +--------------------------------------------------------------------+
1043 
1044 bool
1046 {
1047  return modInfoDlg && modInfoDlg->IsShown();
1048 }
1049 
1050 // +--------------------------------------------------------------------+
1051 
1052 void
1054 {
1055  if (ctldlg) {
1056  if (quit_view) {
1057  quit_view->CloseMenu();
1058  Starshatter::GetInstance()->Pause(true);
1059  }
1060 
1061  HideAll();
1062 
1063  ctldlg->Show();
1064  ctldlg->SetTopMost(true);
1065 
1066  if (mouse_con) {
1067  mouse_active = mouse_con->Active();
1068  mouse_con->SetActive(false);
1069  }
1070 
1071  Mouse::Show(true);
1072  }
1073 }
1074 
1075 // +--------------------------------------------------------------------+
1076 
1077 void
1079 {
1080  if (ctldlg && ctldlg->IsShown()) {
1081  ctldlg->Hide();
1082  Mouse::Show(false);
1083  screen->AddWindow(gamewin);
1084 
1085  if (quit_view)
1086  quit_view->ShowMenu();
1087  }
1088 }
1089 
1090 // +--------------------------------------------------------------------+
1091 
1092 bool
1094 {
1095  return ctldlg && ctldlg->IsShown();
1096 }
1097 
1098 // +--------------------------------------------------------------------+
1099 
1100 void
1102 {
1103  if (keydlg) {
1104  if (quit_view) {
1105  quit_view->CloseMenu();
1106  Starshatter::GetInstance()->Pause(true);
1107  }
1108 
1109  HideAll();
1110 
1111  if (ctldlg) {
1112  ctldlg->Show();
1113  ctldlg->SetTopMost(false);
1114  }
1115 
1116  if (keydlg) keydlg->Show();
1117 
1118  if (mouse_con) {
1119  mouse_con->SetActive(false);
1120  }
1121 
1122  Mouse::Show(true);
1123  }
1124 }
1125 
1126 // +--------------------------------------------------------------------+
1127 
1128 bool
1130 {
1131  return keydlg && keydlg->IsShown();
1132 }
1133 
1134 // +--------------------------------------------------------------------+
1135 
1136 void
1138 {
1139  if (joydlg) {
1140  if (quit_view) {
1141  quit_view->CloseMenu();
1142  Starshatter::GetInstance()->Pause(true);
1143  }
1144 
1145  HideAll();
1146 
1147  if (ctldlg) {
1148  ctldlg->Show();
1149  ctldlg->SetTopMost(false);
1150  }
1151 
1152  if (joydlg) joydlg->Show();
1153 
1154  if (mouse_con) {
1155  mouse_con->SetActive(false);
1156  }
1157 
1158  Mouse::Show(true);
1159  }
1160 }
1161 
1162 // +--------------------------------------------------------------------+
1163 
1164 bool
1166 {
1167  return joydlg && joydlg->IsShown();
1168 }
1169 
1170 // +--------------------------------------------------------------------+
1171 
1172 void
1174 {
1175  if (wep_view)
1176  wep_view->CycleOverlayMode();
1177 }
1178 
1179 void
1181 {
1182  if (wep_view)
1183  wep_view->SetOverlayMode(0);
1184 }
1185 
1186 // +--------------------------------------------------------------------+
1187 
1188 void
1189 GameScreen::HideAll()
1190 {
1191  screen->DelWindow(gamewin);
1192 
1193  if (engdlg) engdlg->Hide();
1194  if (fltdlg) fltdlg->Hide();
1195  if (navdlg) navdlg->Hide();
1196  if (auddlg) auddlg->Hide();
1197  if (viddlg) viddlg->Hide();
1198  if (optdlg) optdlg->Hide();
1199  if (moddlg) moddlg->Hide();
1200  if (modInfoDlg) modInfoDlg->Hide();
1201  if (ctldlg) ctldlg->Hide();
1202  if (keydlg) keydlg->Hide();
1203  if (joydlg) joydlg->Hide();
1204 }
1205 
1206 // +--------------------------------------------------------------------+
1207 
1208 void
1210 {
1211  if (ctldlg) ctldlg->Apply();
1212  if (optdlg) optdlg->Apply();
1213  if (auddlg) auddlg->Apply();
1214  if (viddlg) viddlg->Apply();
1215 
1216  if (engdlg) engdlg->Hide();
1217  if (fltdlg) fltdlg->Hide();
1218  if (navdlg) navdlg->Hide();
1219  if (ctldlg) ctldlg->Hide();
1220  if (auddlg) auddlg->Hide();
1221  if (viddlg) viddlg->Hide();
1222  if (optdlg) optdlg->Hide();
1223  if (moddlg) moddlg->Hide();
1224  if (keydlg) keydlg->Hide();
1225  if (joydlg) joydlg->Hide();
1226 
1227  Mouse::Show(false);
1228  screen->AddWindow(gamewin);
1229  Starshatter::GetInstance()->Pause(false);
1230 }
1231 
1232 void
1234 {
1235  if (ctldlg) ctldlg->Cancel();
1236  if (optdlg) optdlg->Cancel();
1237  if (auddlg) auddlg->Cancel();
1238  if (viddlg) viddlg->Cancel();
1239 
1240  if (engdlg) engdlg->Hide();
1241  if (fltdlg) fltdlg->Hide();
1242  if (navdlg) navdlg->Hide();
1243  if (ctldlg) ctldlg->Hide();
1244  if (auddlg) auddlg->Hide();
1245  if (viddlg) viddlg->Hide();
1246  if (optdlg) optdlg->Hide();
1247  if (moddlg) moddlg->Hide();
1248  if (keydlg) keydlg->Hide();
1249  if (joydlg) joydlg->Hide();
1250 
1251  Mouse::Show(false);
1252  screen->AddWindow(gamewin);
1253  Starshatter::GetInstance()->Pause(false);
1254 }