#include "Game.h" #include "Initialisierung.h" #include "Globals.h" #include #include Game::Game(Bildschirm* zScreen) : Menu(zScreen) { logout = initKnopf(10, 10, 200, 20, Knopf::Style::Normal, "Verlassen"); logout->setMausEreignis([this, zScreen](void* p, void* o, MausEreignis me) { if (me.id == ME_RLinks) { logout->removeStyle(Knopf::Style::Erlaubt); new AsynchronCall([this, zScreen]() { if (network->leaveGame()) { currentGame->release(); currentGame = 0; zScreen->lock(); hide(); menuRegister->get("directConnect")->show(); zScreen->unlock(); } logout->addStyle(Knopf::Style::Erlaubt); }); } return 1; }); elements.add(logout); debug = initTextFeld(10, 40, 500, 40, TextFeld::Style::Text | TextFeld::Style::Mehrzeilig, ""); elements.add(debug); } Game::~Game() {} void Game::updatePosition(Vec3 position, bool target, Vec3 targetPos) { Text txt = "Position: ("; txt.setPrecision(2); txt += position.x; txt += ", "; txt += position.y; txt += ", "; txt += position.z; txt += ")"; if (target) { txt += "\nTarget: ("; txt += targetPos.x; txt += ", "; txt += targetPos.y; txt += ", "; txt += targetPos.z; txt += ")"; } debug->setText(txt); } void Game::api(char* data) { switch (data[0]) { case 0: // open dialog { bool exists = 0; short len = *(short*)(data + 1); char* dialogName = new char[len + 1]; memcpy(dialogName, data + 3, len); dialogName[len] = 0; for (UIMLDialog* dialog : dialogs) { if (dialog->getName().istGleich(dialogName)) { exists = 1; break; } } delete[] dialogName; if (!exists) { int uimlLen = *(int*)(data + 4 + len); char* uiml = new char[uimlLen + 1]; memcpy(uiml, data + 8 + len, uimlLen); uiml[uimlLen] = 0; UIMLDialog* dialog = new UIMLDialog(uiml, [this](UIMLDialog* dialog) { logout->postAction([this, dialog]() { int index = 0; for (UIMLDialog* d : dialogs) { if (d == dialog) { dialogs.remove(index); window->zBildschirm()->removeMember(d); break; } index++; } }); }); dialogs.add(dialog); window->zBildschirm()->addMember(dialog); delete[]uiml; } break; } case 1: { // element message for (UIMLDialog* dialog : dialogs) { dialog->api(data + 1); } break; } } }