diff options
author | Loek Le Blansch <loek@pipeframe.xyz> | 2025-01-07 14:33:07 +0100 |
---|---|---|
committer | Loek Le Blansch <loek@pipeframe.xyz> | 2025-01-07 14:33:07 +0100 |
commit | 5d798c30af7026099344a068e91e1684018b4386 (patch) | |
tree | 923b54a2745c338478246b8707c6ce8361822fc7 /game/menus/mainmenu | |
parent | 6d69c8ef6b663bd6716b441cc7d01164c7e33dfc (diff) | |
parent | 42cbef630ccaf3e841459d364edade1a3c72a525 (diff) |
merge + more WIP
Diffstat (limited to 'game/menus/mainmenu')
-rw-r--r-- | game/menus/mainmenu/ButtonTransitionPreviewScript.cpp | 21 | ||||
-rw-r--r-- | game/menus/mainmenu/ButtonTransitionPreviewScript.h | 12 | ||||
-rw-r--r-- | game/menus/mainmenu/ITransitionScript.cpp | 33 | ||||
-rw-r--r-- | game/menus/mainmenu/ITransitionScript.h | 13 | ||||
-rw-r--r-- | game/menus/mainmenu/MainMenuConfig.h | 22 | ||||
-rw-r--r-- | game/menus/mainmenu/MainMenuScene.cpp | 104 | ||||
-rw-r--r-- | game/menus/mainmenu/MainMenuScene.h | 10 | ||||
-rw-r--r-- | game/menus/mainmenu/TransitionStartScript.cpp | 15 | ||||
-rw-r--r-- | game/menus/mainmenu/TransitionStartScript.h | 9 |
9 files changed, 239 insertions, 0 deletions
diff --git a/game/menus/mainmenu/ButtonTransitionPreviewScript.cpp b/game/menus/mainmenu/ButtonTransitionPreviewScript.cpp new file mode 100644 index 0000000..084d02b --- /dev/null +++ b/game/menus/mainmenu/ButtonTransitionPreviewScript.cpp @@ -0,0 +1,21 @@ +#include "ButtonTransitionPreviewScript.h" + +#include "../MenusConfig.h" + +using namespace crepe; +using namespace std; + +void ButtonTransitionPreviewScript::init(){ + IButtonScript::init(); + this->subscribe<ButtonPressEvent>([this](const ButtonPressEvent& e) { return this->on_button_press(e); }); +} + +bool ButtonTransitionPreviewScript::on_button_press(const ButtonPressEvent& e){ + if(!this->transition) this->transition = true; + return false; +} + +const char* ButtonTransitionPreviewScript::get_scene_name() const { + // Provide the next scene defined in MainMenuConfig + return PREVIEW_SCENE; +} diff --git a/game/menus/mainmenu/ButtonTransitionPreviewScript.h b/game/menus/mainmenu/ButtonTransitionPreviewScript.h new file mode 100644 index 0000000..5973dbf --- /dev/null +++ b/game/menus/mainmenu/ButtonTransitionPreviewScript.h @@ -0,0 +1,12 @@ +#pragma once + +#include "ITransitionScript.h" + +#include "../IButtonScript.h" + +class ButtonTransitionPreviewScript : public ITransitionScript, public IButtonScript { +public: + void init() override; + bool on_button_press(const crepe::ButtonPressEvent& e); + const char* get_scene_name() const override; +}; diff --git a/game/menus/mainmenu/ITransitionScript.cpp b/game/menus/mainmenu/ITransitionScript.cpp new file mode 100644 index 0000000..e2974d4 --- /dev/null +++ b/game/menus/mainmenu/ITransitionScript.cpp @@ -0,0 +1,33 @@ +#include "ITransitionScript.h" +#include "MainMenuConfig.h" + +#include "../MenusConfig.h" +#include "../../Config.h" + +#include <crepe/types.h> +#include <crepe/api/Transform.h> +#include <crepe/api/Camera.h> + +using namespace crepe; +using namespace std; + +void ITransitionScript::frame_update(crepe::duration_t delta_time){ + if(this->transition) + { + // cout << "transition:" << velocity << std::endl; + Transform & cam = this->get_components_by_name<Transform>(CAMERA_NAME).front(); + RefVector<Transform> info_tf = this->get_components_by_tag<Transform>(MENU_INFO_TAG); + for (Transform & tf : info_tf) { + tf.position.y -= VELOCITY_INFO_UP * delta_time.count(); + } + if(velocity < VELOCITY_MAX && cam.position.x < SLOW_DOWN) velocity += VELOCITY_STEP * delta_time.count(); + else if(velocity > 20) velocity -= VELOCITY_STEP * delta_time.count(); + if(cam.position.x < END) cam.position.x += (velocity * delta_time.count()); + if(cam.position.x >= END) + { + this->set_next_scene(this->get_scene_name()); + } + + } +} + diff --git a/game/menus/mainmenu/ITransitionScript.h b/game/menus/mainmenu/ITransitionScript.h new file mode 100644 index 0000000..78f1016 --- /dev/null +++ b/game/menus/mainmenu/ITransitionScript.h @@ -0,0 +1,13 @@ +#pragma once + +#include <crepe/api/Script.h> + +class ITransitionScript : public virtual crepe::Script { +public: + void frame_update(crepe::duration_t delta_time) override; + virtual const char* get_scene_name() const = 0; +private: + float velocity = 20; +protected: + bool transition = false; +}; diff --git a/game/menus/mainmenu/MainMenuConfig.h b/game/menus/mainmenu/MainMenuConfig.h new file mode 100644 index 0000000..01995f0 --- /dev/null +++ b/game/menus/mainmenu/MainMenuConfig.h @@ -0,0 +1,22 @@ +#pragma once +#include <crepe/types.h> + +//main menu config +static constexpr float STARTMAP_OFFSET = 50; +static constexpr crepe::vec2 MENU_OFFSET = {0,0}; +static constexpr float MENU_BUTTON_SPACING = 10; +static constexpr const char* MENU_BUTTON_NAME = "menu_button_background"; +static constexpr crepe::vec2 MENU_OFFSET_BUTTON = {-400,-200}; +static constexpr crepe::vec2 MENU_OFFSET_BUTTON_BACKGROUND = {-400,0}; +static constexpr const char* MENU_INFO_TAG = "menu_info"; +static constexpr crepe::vec2 MENU_OFFSET_INFO = {350,-365}; +static constexpr crepe::vec2 MENU_OFFSET_INFO_BACKGROUND = {350,-365}; //375 +//Moving to new scene (Start and Preview) +static constexpr float SLOW_DOWN = 200; +static constexpr float END = 300; +static constexpr float VELOCITY_MAX = 200; +static constexpr float VELOCITY_STEP = 200; +static constexpr float VELOCITY_INFO_UP = 40; + + + diff --git a/game/menus/mainmenu/MainMenuScene.cpp b/game/menus/mainmenu/MainMenuScene.cpp new file mode 100644 index 0000000..15cf6d5 --- /dev/null +++ b/game/menus/mainmenu/MainMenuScene.cpp @@ -0,0 +1,104 @@ + +#include "MainMenuScene.h" +#include "TransitionStartScript.h" +#include "MainMenuConfig.h" + +#include "../ButtonSubScene.h" +#include "../MenusConfig.h" + +#include "../../background/StartSubScene.h" +#include "../../background/HallwaySubScene.h" +#include "../../Config.h" + +#include "../endgame/EndGameSubScene.h" + +#include <crepe/api/BehaviorScript.h> +#include <crepe/api/GameObject.h> +#include <crepe/api/Sprite.h> +#include <crepe/api/Camera.h> +#include <crepe/manager/SaveManager.h> + +using namespace crepe; +using namespace std; + +void MainMenuScene::load_scene(){ + ButtonSubScene button; + + GameObject camera_object = this->new_object(CAMERA_NAME); + camera_object.add_component<Camera>(ivec2(990, 720), vec2(1100, 800), + Camera::Data{ + .bg_color = Color::RED, + }); + camera_object.add_component<BehaviorScript>().set_script<TransitionStartScript>(); + + + //Button menu + GameObject menu_button = this->new_object(MENU_BUTTON_NAME,MENU_BUTTON_NAME,MENU_OFFSET); + menu_button.add_component<Sprite>( + Asset("asset/ui/background.png"), + Sprite::Data{ + .sorting_in_layer = STARTING_SORTING_IN_LAYER+0, + .size = {300,860}, + .position_offset = MENU_OFFSET_BUTTON_BACKGROUND, + }); + + vec2 pos_btn = MENU_OFFSET_BUTTON; + + //Preview btn + button.create(*this,ButtonSubScene::Data{ + .text = "PREVIEW", + .text_width = 200, + .position = pos_btn, + .script_type = ButtonSubScene::ScriptSelect::PREVIEW, + }); + + //Shop btn + pos_btn.y += MENU_BUTTON_SPACING + LARGE_OVERLAY_SIZE.y; + button.create(*this,ButtonSubScene::Data{ + .text = "SHOP", + .text_offset = {-20,0}, + .text_width = 115, + .icon_offset = {60,0}, + .icon_type = ButtonSubScene::IconSelect::SHOP, + .position = pos_btn, + .script_type = ButtonSubScene::ScriptSelect::SHOP, + }); + + //Start of map + StartSubScene start; + HallwaySubScene hallway; + float begin_x = start.create(*this, STARTMAP_OFFSET); + begin_x = hallway.create(*this, begin_x, 1, Color::YELLOW); + + + //INFO menu + GameObject menu_info = this->new_object("MENU_INFO_BACKGROUND",MENU_INFO_TAG,MENU_OFFSET); + menu_info.add_component<Sprite>( + Asset("asset/ui/itemsButtonBlankDark.png"), + Sprite::Data{ + .sorting_in_layer = STARTING_SORTING_IN_LAYER+0, + .size = {250,80}, + .position_offset = MENU_OFFSET_INFO, + .world_space = false, + }); + SaveManager & savemgr = this->get_save_manager(); + string number = std::to_string(savemgr.get<int>(TOTAL_COINS_GAME,0).get()); + float amount_number = static_cast<float>(number.size()); + // savemgr.set(COIN_GAME_AMOUNT, amount); + button.create(*this,ButtonSubScene::Data{ + .text = number, + .text_offset = {-10-(amount_number-1)*10,0}, + .text_width = amount_number*20, + .icon_offset = {60,0}, + .icon_type = ButtonSubScene::IconSelect::COINS, + .position = MENU_OFFSET_INFO, + .script_type = ButtonSubScene::ScriptSelect::SHOP, + .scale = 0.6, + .worldspace = false, + .color_side = false, + .tag = MENU_INFO_TAG, + }); + +} + +string MainMenuScene::get_name() const { return MAINMENU_SCENE; } diff --git a/game/menus/mainmenu/MainMenuScene.h b/game/menus/mainmenu/MainMenuScene.h new file mode 100644 index 0000000..1eea90e --- /dev/null +++ b/game/menus/mainmenu/MainMenuScene.h @@ -0,0 +1,10 @@ +#pragma once + +#include <crepe/api/Scene.h> +#include <string> + +class MainMenuScene : public crepe::Scene { +public: + void load_scene(); + std::string get_name() const; +}; diff --git a/game/menus/mainmenu/TransitionStartScript.cpp b/game/menus/mainmenu/TransitionStartScript.cpp new file mode 100644 index 0000000..9b395de --- /dev/null +++ b/game/menus/mainmenu/TransitionStartScript.cpp @@ -0,0 +1,15 @@ +#include "TransitionStartScript.h" + +#include "../MenusConfig.h" + +using namespace crepe; +using namespace std; + +void TransitionStartScript::fixed_update(crepe::duration_t dt){ + if(this->get_key_state(Keycode::ENTER) && this->transition == false) this->transition = true; +} + +const char* TransitionStartScript::get_scene_name() const { + // Provide the next scene defined in MainMenuConfig + return START_SCENE; +} diff --git a/game/menus/mainmenu/TransitionStartScript.h b/game/menus/mainmenu/TransitionStartScript.h new file mode 100644 index 0000000..c6df1b9 --- /dev/null +++ b/game/menus/mainmenu/TransitionStartScript.h @@ -0,0 +1,9 @@ +#pragma once + +#include "ITransitionScript.h" + +class TransitionStartScript : public ITransitionScript { +public: + void fixed_update(crepe::duration_t dt) override; + const char* get_scene_name() const override; +}; |