Start.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #include <Bild.h>
  2. #include <Datei.h>
  3. #include <DateiSystem.h>
  4. #include <Globals.h>
  5. #include <GraphicsApi.h>
  6. #include <InitDatei.h>
  7. #include <iostream>
  8. #include <main.h>
  9. #include <Maus.h>
  10. #include <MausEreignis.h>
  11. #include <Punkt.h>
  12. #include <sstream>
  13. #include <TastaturEreignis.h>
  14. #include <Text.h>
  15. #include <TexturList.h>
  16. #include <vector>
  17. #include "..\Global\Initialisierung.h"
  18. #include "..\Global\Render.h"
  19. #include "..\Global\Variablen.h"
  20. void fensterVS(void* p, void* f)
  21. {
  22. PostQuitMessage(0);
  23. }
  24. bool fensterME(void* p, void* f, MausEreignis me)
  25. {
  26. return 1;
  27. }
  28. bool fensterTE(void* p, void* f, TastaturEreignis te)
  29. {
  30. return 1;
  31. }
  32. int KSGStart Framework::Start(Startparam p)
  33. {
  34. Network::Start(50);
  35. if (!DateiExistiert("data/user_options.ini"))
  36. {
  37. userOptions = new InitDatei("data/default_options.ini");
  38. userOptions->laden();
  39. userOptions->setPfad("data/user_options.ini");
  40. userOptions->speichern();
  41. }
  42. else
  43. {
  44. userOptions = new InitDatei("data/user_options.ini");
  45. userOptions->laden();
  46. }
  47. InitDatei init("data/optionen.ini");
  48. init.laden();
  49. if (init.wertExistiert("Log") && init.zWert("Log")->istGleich("1"))
  50. {
  51. Logging::LoggingChannel* channel
  52. = new Logging::FileLoggingChannel("data/log.txt");
  53. channel->setFormat(Logging::LoggingFormatBuilder()
  54. .datetime("y-m-d h:i:s")
  55. .text(" [")
  56. .level()
  57. .text("]: ")
  58. .build());
  59. Framework::Logging::zLoggingHandler()->addChannel(channel);
  60. }
  61. Framework::Logging::info() << "Anwendung wird gestartet...";
  62. WNDCLASS wc = F_Normal(p.hinst);
  63. wc.lpszClassName = "Game Client";
  64. Framework::Logging::info()
  65. << "Grafische Benutzeroberflaeche wird erstellt...";
  66. Monitor m = getMonitor(0);
  67. if (userOptions->wertExistiert("Monitor"))
  68. {
  69. Monitor tmp = getMonitor((int)*userOptions->zWert("Monitor"));
  70. if (tmp.existiert) m = tmp;
  71. }
  72. WFenster* fenster = new WFenster();
  73. fenster->erstellen(WS_POPUP, wc);
  74. fenster->setPosition(Punkt(m.x, m.y));
  75. fenster->setSize(m.breite, m.height);
  76. fenster->setMausAktion(fensterME);
  77. fenster->setTastaturAktion(fensterTE);
  78. fenster->setVSchließAktion(fensterVS);
  79. Bildschirm* bildschirm = 0;
  80. if (userOptions->wertExistiert("GraphicAPI")
  81. && userOptions->zWert("GraphicAPI")->istGleich("DX9"))
  82. bildschirm = new Bildschirm3D(
  83. dynamic_cast<WFenster*>(fenster->getThis()), DIRECTX9);
  84. else if (userOptions->wertExistiert("GraphicAPI")
  85. && userOptions->zWert("GraphicAPI")->istGleich("DX11"))
  86. bildschirm = new Bildschirm3D(
  87. dynamic_cast<WFenster*>(fenster->getThis()), DIRECTX11);
  88. else if (userOptions->wertExistiert("GraphicAPI")
  89. && userOptions->zWert("GraphicAPI")->istGleich("DX12"))
  90. bildschirm = new Bildschirm3D(
  91. dynamic_cast<WFenster*>(fenster->getThis()), DIRECTX12);
  92. else
  93. bildschirm
  94. = new Bildschirm3D(dynamic_cast<WFenster*>(fenster->getThis()));
  95. if (userOptions->wertExistiert("ScreenWidth")
  96. && userOptions->wertExistiert("ScreenHeight"))
  97. bildschirm->setBackBufferSize((int)*userOptions->zWert("ScreenWidth"),
  98. (int)*userOptions->zWert("ScreenHeight"));
  99. fenster->setBildschirm(dynamic_cast<Bildschirm*>(bildschirm->getThis()));
  100. fenster->setAnzeigeModus(1);
  101. fenster->setFokus();
  102. bildschirm->update();
  103. bildschirm->render();
  104. Logging::info() << "Schrift wird geladen...";
  105. LTDSDatei* schriftDatei = new LTDSDatei();
  106. schriftDatei->setPfad(new Text("data/schriften/normal.ltds"));
  107. schriftDatei->leseDaten();
  108. Schrift* schrift = schriftDatei->ladeSchrift();
  109. schriftDatei = (LTDSDatei*)schriftDatei->release();
  110. Logging::info() << "Globale Variablen werden initialisiert...";
  111. initVariables(schrift, bildschirm);
  112. Render* render = new Render();
  113. Logging::info() << "Zeichen Thread wird gestartet...";
  114. render->start();
  115. Logging::info() << "Nachrichtenschleife wird ausgefuehrt...";
  116. StartNachrichtenSchleife();
  117. Logging::info() << "Zeichen Thread wird beendet...";
  118. render->beenden();
  119. render = (Render*)render->release();
  120. bildschirm->removeMember(vorLogin->zFenster());
  121. bildschirm->removeMember(nachLogin);
  122. Logging::info() << "Speicher wird freigegeben...";
  123. releaseVariables();
  124. schrift = (Schrift*)schrift->release();
  125. bildschirm = (Bildschirm*)bildschirm->release();
  126. fenster->setBildschirm(0);
  127. fenster->zerstören();
  128. fenster = (WFenster*)fenster->release();
  129. Network::Exit();
  130. DateiPfadErstellen(new Text("data/tmp/keinabsturz"));
  131. Logging::info() << "Programm wurde ordnungsgemaess beendet.";
  132. return 0;
  133. }