From b758b2b20da8e3ab002dacc663237e1681ae973c Mon Sep 17 00:00:00 2001 From: JAROWMR Date: Sun, 29 Dec 2024 15:05:21 +0100 Subject: back button --- game/CMakeLists.txt | 2 + game/mainmenu/ButtonSetMainMenuScript.cpp | 19 ++++++ game/mainmenu/ButtonSetMainMenuScript.h | 14 +++++ game/mainmenu/ButtonSubScene.cpp | 96 +++++++++++++++++++++++-------- game/mainmenu/ButtonSubScene.h | 26 +++++++-- game/mainmenu/IButtonScript.cpp | 13 ++++- game/mainmenu/MainMenuConfig.h | 4 ++ game/mainmenu/MainMenuScene.cpp | 13 +++-- game/mainmenu/ShopMenuScene.cpp | 11 ++++ 9 files changed, 165 insertions(+), 33 deletions(-) create mode 100644 game/mainmenu/ButtonSetMainMenuScript.cpp create mode 100644 game/mainmenu/ButtonSetMainMenuScript.h diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt index d3608d1..c27dcc1 100644 --- a/game/CMakeLists.txt +++ b/game/CMakeLists.txt @@ -31,6 +31,7 @@ set(SOURCES mainmenu/ShopMenuScene.cpp mainmenu/BannerSubScene.cpp mainmenu/ButtonSetShopScript.cpp + mainmenu/ButtonSetMainMenuScript.cpp coins/CoinSubScene.cpp coins/CoinPool.cpp coins/CoinSystemScript.cpp @@ -58,6 +59,7 @@ set(HEADERS mainmenu/ShopMenuScene.h mainmenu/BannerSubScene.h mainmenu/ButtonSetShopScript.h + mainmenu/ButtonSetMainMenuScript.h coins/CoinData.h coins/CoinSubScene.h coins/CoinPool.h diff --git a/game/mainmenu/ButtonSetMainMenuScript.cpp b/game/mainmenu/ButtonSetMainMenuScript.cpp new file mode 100644 index 0000000..808d8a2 --- /dev/null +++ b/game/mainmenu/ButtonSetMainMenuScript.cpp @@ -0,0 +1,19 @@ +#include "ButtonSetMainMenuScript.h" +#include "MainMenuConfig.h" +#include "iostream" + +using namespace crepe; +using namespace std; + +void ButtonSetMainMenuScript::init(){ + cout << "script init" << endl; + IButtonScript::init(); + this->subscribe([this](const ButtonPressEvent& e) { return this->on_button_press(e); }); +} + +bool ButtonSetMainMenuScript::on_button_press(const ButtonPressEvent& e){ + this->set_next_scene(MainMenuConfig::MAINMENU_SCENE); + cout << "Start triggered:" << e.metadata.game_object_id << std::endl; + return false; +} + diff --git a/game/mainmenu/ButtonSetMainMenuScript.h b/game/mainmenu/ButtonSetMainMenuScript.h new file mode 100644 index 0000000..44c21aa --- /dev/null +++ b/game/mainmenu/ButtonSetMainMenuScript.h @@ -0,0 +1,14 @@ +#pragma once + +#include "IButtonScript.h" +#include + +class ButtonSetMainMenuScript : public IButtonScript { +public: + void init() override; + bool on_button_press(const crepe::ButtonPressEvent& e); +private: + float velocity = 20; +protected: + bool transition = false; +}; diff --git a/game/mainmenu/ButtonSubScene.cpp b/game/mainmenu/ButtonSubScene.cpp index b4abe21..7562128 100644 --- a/game/mainmenu/ButtonSubScene.cpp +++ b/game/mainmenu/ButtonSubScene.cpp @@ -1,6 +1,8 @@ #include "ButtonSubScene.h" +#include "ButtonSetMainMenuScript.h" #include "ButtonSetShopScript.h" #include "ButtonTransitionPreviewScript.h" +#include "IButtonScript.h" #include "MainMenuConfig.h" #include @@ -13,11 +15,64 @@ using namespace crepe; using namespace std; void ButtonSubScene::create(Scene & scn,const Data & data){ - GameObject button_object = scn.new_object("button","",data.position,0,1); - this->large_btn_overlay(button_object); - this->btn_text_middle(button_object,data.text,data.text_offset,data.text_size); - this->set_script(button_object,data.script); + GameObject button_object = scn.new_object("button","",data.position,0,data.scale); + this->set_button_overlay(button_object,data); + this->btn_text(button_object,data); + this->set_script(button_object,data); + this->set_icon(button_object,data); } + +void ButtonSubScene::btn_text(crepe::GameObject & button_object,const Data & data){ + + crepe::vec2 size = {data.text_width,(data.text_width/data.text.size())*2}; + + button_object.add_component(size,data.text_offset+MainMenuConfig::FONTOFFSET, MainMenuConfig::FONT, Text::Data{ + .text_color = Color::WHITE, + }, data.text); +} + +void ButtonSubScene::set_script(crepe::GameObject & button_object,const Data & data){ + switch (data.script_type) { + case ScriptSelect::PREVIEW: + button_object.add_component().set_script(); + break; + case ScriptSelect::SHOP: + button_object.add_component().set_script(); + break; + case ScriptSelect::MAINMENU: + button_object.add_component().set_script(); + break; + case ScriptSelect::NONE: + button_object.add_component().set_script(); + break; + } +} + +void ButtonSubScene::set_icon(crepe::GameObject & button_object,const Data & data){ + switch (data.icon_type) { + case IconSelect::SHOP: + button_object.add_component(Asset("asset/ui/buttonCoinsSmall.png"),Sprite::Data{ + .sorting_in_layer = MainMenuConfig::STARTING_SORTING_IN_LAYER+3, + .size = MainMenuConfig::ICON_SIZE, + .position_offset = data.icon_offset, + }); + break; + case IconSelect::NONE: + break; + } +} + +void ButtonSubScene::set_button_overlay(crepe::GameObject & button_object,const Data & data){ + switch (data.button_type) { + case ButtonSelect::LARGE: + this->large_btn_overlay(button_object); + break; + case ButtonSelect::SMALL: + this->small_btn_overlay(button_object); + break; + } +} + void ButtonSubScene::large_btn_overlay(crepe::GameObject & button_object){ button_object.add_component(Asset("asset/ui/buttonBacking.png"),Sprite::Data{ .sorting_in_layer = MainMenuConfig::STARTING_SORTING_IN_LAYER+1, @@ -27,6 +82,20 @@ void ButtonSubScene::large_btn_overlay(crepe::GameObject & button_object){ this->btn_color_side(button_object,SIDE_PANEL_OFFSET); } +void ButtonSubScene::small_btn_overlay(crepe::GameObject & button_object){ + button_object.add_component(Asset("asset/ui/backbuttonright.png"),Sprite::Data{ + .sorting_in_layer = MainMenuConfig::STARTING_SORTING_IN_LAYER+1, + .size = MainMenuConfig::SMALL_OVERLAY_SIZE_RIGHT, + .position_offset = {20,0}, + }); + button_object.add_component(Asset("asset/ui/backbuttonleft.png"),Sprite::Data{ + .sorting_in_layer = MainMenuConfig::STARTING_SORTING_IN_LAYER+1, + .size = MainMenuConfig::SMALL_OVERLAY_SIZE_LEFT, + .position_offset = {-80,0}, + }); + button_object.add_component