#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "..\Global\Initialisierung.h" #include "..\Global\Render.h" #include "..\Global\Variablen.h" void fensterVS(void* p, void* f) { PostQuitMessage(0); } bool fensterME(void* p, void* f, MausEreignis me) { return 1; } bool fensterTE(void* p, void* f, TastaturEreignis te) { return 1; } int KSGStart Framework::Start(Startparam p) { Network::Start(50); if (!DateiExistiert("data/user_options.ini")) { userOptions = new InitDatei("data/default_options.ini"); userOptions->laden(); userOptions->setPfad("data/user_options.ini"); userOptions->speichern(); } else { userOptions = new InitDatei("data/user_options.ini"); userOptions->laden(); } InitDatei init("data/optionen.ini"); init.laden(); if (init.wertExistiert("Log") && init.zWert("Log")->istGleich("1")) { Logging::LoggingChannel* channel = new Logging::FileLoggingChannel("data/log.txt"); channel->setFormat(Logging::LoggingFormatBuilder() .datetime("y-m-d h:i:s") .text(" [") .level() .text("]: ") .build()); Framework::Logging::zLoggingHandler()->addChannel(channel); } Framework::Logging::info() << "Anwendung wird gestartet..."; WNDCLASS wc = F_Normal(p.hinst); wc.lpszClassName = "Game Client"; Framework::Logging::info() << "Grafische Benutzeroberflaeche wird erstellt..."; Monitor m = getMonitor(0); if (userOptions->wertExistiert("Monitor")) { Monitor tmp = getMonitor((int)*userOptions->zWert("Monitor")); if (tmp.existiert) m = tmp; } WFenster* fenster = new WFenster(); fenster->erstellen(WS_POPUP, wc); fenster->setPosition(Punkt(m.x, m.y)); fenster->setSize(m.breite, m.height); fenster->setMausAktion(fensterME); fenster->setTastaturAktion(fensterTE); fenster->setVSchließAktion(fensterVS); Bildschirm* bildschirm = 0; if (userOptions->wertExistiert("GraphicAPI") && userOptions->zWert("GraphicAPI")->istGleich("DX9")) bildschirm = new Bildschirm3D( dynamic_cast(fenster->getThis()), DIRECTX9); else if (userOptions->wertExistiert("GraphicAPI") && userOptions->zWert("GraphicAPI")->istGleich("DX11")) bildschirm = new Bildschirm3D( dynamic_cast(fenster->getThis()), DIRECTX11); else if (userOptions->wertExistiert("GraphicAPI") && userOptions->zWert("GraphicAPI")->istGleich("DX12")) bildschirm = new Bildschirm3D( dynamic_cast(fenster->getThis()), DIRECTX12); else bildschirm = new Bildschirm3D(dynamic_cast(fenster->getThis())); if (userOptions->wertExistiert("ScreenWidth") && userOptions->wertExistiert("ScreenHeight")) bildschirm->setBackBufferSize((int)*userOptions->zWert("ScreenWidth"), (int)*userOptions->zWert("ScreenHeight")); fenster->setBildschirm(dynamic_cast(bildschirm->getThis())); fenster->setAnzeigeModus(1); fenster->setFokus(); bildschirm->update(); bildschirm->render(); Logging::info() << "Schrift wird geladen..."; LTDSDatei* schriftDatei = new LTDSDatei(); schriftDatei->setPfad(new Text("data/schriften/normal.ltds")); schriftDatei->leseDaten(); Schrift* schrift = schriftDatei->ladeSchrift(); schriftDatei = (LTDSDatei*)schriftDatei->release(); Logging::info() << "Globale Variablen werden initialisiert..."; initVariables(schrift, bildschirm); Render* render = new Render(); Logging::info() << "Zeichen Thread wird gestartet..."; render->start(); Logging::info() << "Nachrichtenschleife wird ausgefuehrt..."; StartNachrichtenSchleife(); Logging::info() << "Zeichen Thread wird beendet..."; render->beenden(); render = (Render*)render->release(); bildschirm->removeMember(vorLogin->zFenster()); bildschirm->removeMember(nachLogin); Logging::info() << "Speicher wird freigegeben..."; releaseVariables(); schrift = (Schrift*)schrift->release(); bildschirm = (Bildschirm*)bildschirm->release(); fenster->setBildschirm(0); fenster->zerstören(); fenster = (WFenster*)fenster->release(); Network::Exit(); DateiPfadErstellen(new Text("data/tmp/keinabsturz")); Logging::info() << "Programm wurde ordnungsgemaess beendet."; return 0; }