HexagonGame::HexagonGame(HGAssets& mAssets, GameWindow& mGameWindow) : assets(mAssets), window(mGameWindow), fpsWatcher(window) { game.onUpdate += [this](float mFT) { update(mFT); }; game.onDraw += [this]{ draw(); }; window.onRecreation += [this]{ initFlashEffect(); }; add3StateInput(game, Config::getTriggerRotateCCW(), Config::getTriggerRotateCW(), inputMovement); add2StateInput(game, Config::getTriggerFocus(), inputFocused); add2StateInput(game, Config::getTriggerSwap(), inputSwap); game.addInput(Config::getTriggerExit(), [this](float){ goToMenu(); }); game.addInput(Config::getTriggerForceRestart(), [this](float){ status.mustRestart = true; }); game.addInput(Config::getTriggerRestart(), [this](float){ if(status.hasDied) status.mustRestart = true; }); game.addInput(Config::getTriggerScreenshot(), [this](float){ mustTakeScreenshot = true; }, Input::Trigger::Type::Once); }
HexagonGame::HexagonGame(GameWindow& mGameWindow) : window(mGameWindow), fpsWatcher(window) { initFlashEffect(); game.onUpdate += [&](float mFrameTime) { update(mFrameTime); }; game.onDraw += [&]{ draw(); }; add3StateInput(game, getTriggerRotateCCW(), getTriggerRotateCW(), inputMovement); add2StateInput(game, getTriggerFocus(), inputFocused); game.addInput(getTriggerExit(), [&](float){ goToMenu(); }); game.addInput(getTriggerForceRestart(), [&](float){ status.mustRestart = true; }); game.addInput(getTriggerRestart(), [&](float){ if(status.hasDied) status.mustRestart = true; }); game.addInput(getTriggerScreenshot(), [&](float){ mustTakeScreenshot = true; }, Input::Trigger::Type::Single); }
void HexagonGame::executeEvents(Json::Value& mRoot, float mTime) { for (Json::Value& eventRoot : mRoot) { if(eventRoot["time"].asFloat() > mTime) continue; if(eventRoot["executed"].asBool()) continue; eventRoot["executed"] = true; string type{eventRoot["type"].asString()}; float duration{eventRoot["duration"].asFloat()}; string valueName{eventRoot["value_name"].asString()}; float value{eventRoot["value"].asFloat()}; string message{eventRoot["message"].asString()}; string id{eventRoot["id"].asString()}; if (type == "level_change") changeLevel(id); else if (type == "menu") goToMenu(); else if (type == "message_add") { if(getShowMessages()) addMessage(message, duration); } else if (type == "message_clear") clearMessages(); else if (type == "time_stop") timeStop = duration; else if (type == "timeline_wait") timeline.add(new Wait(duration)); else if (type == "timeline_clear") clearAndResetTimeline(timeline); else if (type == "value_float_set") levelData.setValueFloat(valueName, value); else if (type == "value_float_add") levelData.setValueFloat(valueName, levelData.getValueFloat(valueName) + value); else if (type == "value_float_subtract") levelData.setValueFloat(valueName, levelData.getValueFloat(valueName) - value); else if (type == "value_float_multiply") levelData.setValueFloat(valueName, levelData.getValueFloat(valueName) * value); else if (type == "value_float_divide") levelData.setValueFloat(valueName, levelData.getValueFloat(valueName) / value); else if (type == "value_int_set") levelData.setValueInt(valueName, value); else if (type == "value_int_add") levelData.setValueInt(valueName, levelData.getValueFloat(valueName) + value); else if (type == "value_int_subtract") levelData.setValueInt(valueName, levelData.getValueFloat(valueName) - value); else if (type == "value_int_multiply") levelData.setValueInt(valueName, levelData.getValueFloat(valueName) * value); else if (type == "value_int_divide") levelData.setValueInt(valueName, levelData.getValueFloat(valueName) / value); else if (type == "music_set") { if(getChangeMusic()) { stopLevelMusic(); musicData = getMusicData(id); musicData.playRandomSegment(musicPtr); } } else if (type == "music_set_segment") { if(getChangeMusic()) { stopLevelMusic(); musicData = getMusicData(id); musicData.playSegment(musicPtr, eventRoot["segment_index"].asInt()); } } else if (type == "music_set_seconds") { if(getChangeMusic()) { stopLevelMusic(); musicData = getMusicData(id); musicData.playSeconds(musicPtr, eventRoot["seconds"].asInt()); } } else if (type == "style_set") { if(getChangeStyles()) styleData = getStyleData(id); } else if (type == "side_changing_stop") randomSideChangesEnabled = false; else if (type == "side_changing_start") randomSideChangesEnabled = true; else if (type == "increment_stop") incrementEnabled = false; else if (type == "increment_start") incrementEnabled = true; else if (type == "pulse_max_set") maxPulse = value; else if (type == "pulse_min_set") minPulse = value; else if (type == "pulse_speed_set") pulseSpeed = value; else if (type == "pulse_speed_b_set") pulseSpeedBackwards = value; else if (type == "script_exec") scripts.push_back(getScriptData(id, this)); else if (type == "script_queue") queueScript(getScriptData(id, this)); else log("unknown script command: " + type); } }
inline void HexagonGame::updateKeys() { if(isKeyPressed(Keyboard::R)) mustRestart = true; else if(isKeyPressed(Keyboard::Escape)) goToMenu(); }