diff options
Diffstat (limited to 'game/menus/endgame')
-rw-r--r-- | game/menus/endgame/EndGameSubScene.cpp | 70 | ||||
-rw-r--r-- | game/menus/endgame/EndGameSubScene.h | 9 | ||||
-rw-r--r-- | game/menus/endgame/EndGameSubScript.cpp | 51 | ||||
-rw-r--r-- | game/menus/endgame/EndGameSubScript.h | 16 |
4 files changed, 146 insertions, 0 deletions
diff --git a/game/menus/endgame/EndGameSubScene.cpp b/game/menus/endgame/EndGameSubScene.cpp new file mode 100644 index 0000000..41556af --- /dev/null +++ b/game/menus/endgame/EndGameSubScene.cpp @@ -0,0 +1,70 @@ + +#include "EndGameSubScene.h" +#include "../FloatingWindowSubScene.h" +#include "../ButtonSubScene.h" +#include <crepe/api/Text.h> +#include <string> +#include <crepe/api/GameObject.h> +#include <crepe/api/BehaviorScript.h> +#include "EndGameSubScript.h" +#include "types.h" +#include "../../Config.h" + +using namespace crepe; +using namespace std; + +void EndGameSubScene::create(Scene & scn){ + + const std::string TAG = "end_game_tag"; + GameObject script = scn.new_object("script"); + script.add_component<BehaviorScript>().set_script<EndGameSubScript>(TAG); + + // Window + FloatingWindowSubScene window; + window.create(scn, FloatingWindowSubScene::Data{ + .group_tag = TAG, + .width = 500, + .offset = {0,-50}, + .width_middle_offset = -2, + }); + + // Titel + const string TITEL_STRING = "GAME OVER"; + GameObject titel = scn.new_object("titel",TAG); + crepe::vec2 size = {200,(200.0f/TITEL_STRING.size())*2}; + titel.add_component<Text>(size, FONT,Text::Data{ + .world_space = false, + .text_color = Color::WHITE, + }, vec2{0,-207}+FONTOFFSET, TITEL_STRING); + + + // Buttons + vec2 button_position = {190,190}; + ButtonSubScene button; + button.create(scn,ButtonSubScene::Data{ + .text = "NEXT", + .text_width = 100, + .position = button_position, + .script_type = ButtonSubScene::ScriptSelect::MAINMENU, + .button_type = ButtonSubScene::ButtonSelect::NEXT, + .scale = 0.6, + .worldspace = false, + .tag = TAG, + .sorting_layer_offset = 20, + }); + + button.create(scn,ButtonSubScene::Data{ + .text = "REPLAY", + .text_width = 150, + .position = {-button_position.x,button_position.y}, + // .script_type = ButtonSubScene::ScriptSelect::MAINMENU, + .button_type = ButtonSubScene::ButtonSelect::BACK, + .scale = 0.6, + .worldspace = false, + .tag = TAG, + .sorting_layer_offset = 20, + }); + +} + + diff --git a/game/menus/endgame/EndGameSubScene.h b/game/menus/endgame/EndGameSubScene.h new file mode 100644 index 0000000..aa60a49 --- /dev/null +++ b/game/menus/endgame/EndGameSubScene.h @@ -0,0 +1,9 @@ +#pragma once + +#include <crepe/api/Scene.h> + +class EndGameSubScene { + +public: + void create(crepe::Scene & scn); +}; diff --git a/game/menus/endgame/EndGameSubScript.cpp b/game/menus/endgame/EndGameSubScript.cpp new file mode 100644 index 0000000..2be6931 --- /dev/null +++ b/game/menus/endgame/EndGameSubScript.cpp @@ -0,0 +1,51 @@ +#include "EndGameSubScript.h" +#include "../IFloatingWindowScript.h" +#include "api/Button.h" +#include "api/Sprite.h" +#include "api/Text.h" +#include "types.h" +#include "../../Events.h" +#include <string> + +using namespace crepe; + +EndGameSubScript::EndGameSubScript(const std::string & tag){ + this->tag = tag; +} + +void EndGameSubScript::init(){ + this->disable_all(); + this->subscribe<EndGameEvent>([this](const EndGameEvent e) { return this->enable_all(); }); + this->subscribe<EndGameEvent>([this](const EndGameEvent e) { return this->reset_timescale(); }); +} + +bool EndGameSubScript::disable_all(){ + IFloatingWindowScript::disable_all_sprites(); + RefVector<Button> buttons = this->get_components_by_tag<Button>(this->tag); + for(Button & button : buttons){ + button.active = false; + } + RefVector<Text> texts = this->get_components_by_tag<Text>(this->tag); + for(Text & text : texts){ + text.active = false; + } + return false; +} + +bool EndGameSubScript::enable_all(){ + IFloatingWindowScript::enable_all_sprites(); + RefVector<Button> buttons = this->get_components_by_tag<Button>(this->tag); + for(Button & button : buttons){ + button.active = true; + } + RefVector<Text> texts = this->get_components_by_tag<Text>(this->tag); + for(Text & text : texts){ + text.active = true; + } + return false; +} + +bool EndGameSubScript::reset_timescale(){ + this->get_loop_timer().set_time_scale(1); + return false; +} diff --git a/game/menus/endgame/EndGameSubScript.h b/game/menus/endgame/EndGameSubScript.h new file mode 100644 index 0000000..2ce3ec7 --- /dev/null +++ b/game/menus/endgame/EndGameSubScript.h @@ -0,0 +1,16 @@ +#pragma once + +#include "../IFloatingWindowScript.h" +#include "api/Event.h" +#include <crepe/api/Script.h> + +class EndGameSubScript : public IFloatingWindowScript { +public: + EndGameSubScript(const std::string & tag); + void init() override; + bool disable_all(); + bool enable_all(); + bool reset_timescale(); +}; + + |