diff options
author | Max-001 <maxsmits21@kpnmail.nl> | 2025-01-08 09:52:00 +0100 |
---|---|---|
committer | Max-001 <maxsmits21@kpnmail.nl> | 2025-01-08 09:52:00 +0100 |
commit | b1824253875901b4fb6f4c5fee72aea6d807d370 (patch) | |
tree | 8acc156e68d48022f453dcf06b541f77a5803484 /game/menus/mainmenu | |
parent | e9082de7d114ce024a884cac38c545c99de4026a (diff) | |
parent | e75ca1c947f3cde19bebf15049732bc069c6e913 (diff) |
Merge remote-tracking branch 'origin/master' into max/game2
Diffstat (limited to 'game/menus/mainmenu')
-rw-r--r-- | game/menus/mainmenu/ButtonTransitionPreviewSubScript.cpp | 23 | ||||
-rw-r--r-- | game/menus/mainmenu/ButtonTransitionPreviewSubScript.h | 12 | ||||
-rw-r--r-- | game/menus/mainmenu/ITransitionScript.cpp | 29 | ||||
-rw-r--r-- | game/menus/mainmenu/ITransitionScript.h | 15 | ||||
-rw-r--r-- | game/menus/mainmenu/MainMenuConfig.h | 19 | ||||
-rw-r--r-- | game/menus/mainmenu/MainMenuScene.cpp | 115 | ||||
-rw-r--r-- | game/menus/mainmenu/MainMenuScene.h | 10 | ||||
-rw-r--r-- | game/menus/mainmenu/TransitionStartSubScript.cpp | 16 | ||||
-rw-r--r-- | game/menus/mainmenu/TransitionStartSubScript.h | 9 |
9 files changed, 248 insertions, 0 deletions
diff --git a/game/menus/mainmenu/ButtonTransitionPreviewSubScript.cpp b/game/menus/mainmenu/ButtonTransitionPreviewSubScript.cpp new file mode 100644 index 0000000..4c4dfc1 --- /dev/null +++ b/game/menus/mainmenu/ButtonTransitionPreviewSubScript.cpp @@ -0,0 +1,23 @@ +#include "ButtonTransitionPreviewSubScript.h" + +#include "../MenusConfig.h" + +using namespace crepe; +using namespace std; + +void ButtonTransitionPreviewSubScript::init() { + IButtonScript::init(); + this->subscribe<ButtonPressEvent>([this](const ButtonPressEvent & e) { + return this->on_button_press(e); + }); +} + +bool ButtonTransitionPreviewSubScript::on_button_press(const ButtonPressEvent & e) { + if (!this->transition) this->transition = true; + return false; +} + +const char * ButtonTransitionPreviewSubScript::get_scene_name() const { + // Provide the next scene defined in MainMenuConfig + return PREVIEW_SCENE; +} diff --git a/game/menus/mainmenu/ButtonTransitionPreviewSubScript.h b/game/menus/mainmenu/ButtonTransitionPreviewSubScript.h new file mode 100644 index 0000000..d6d8149 --- /dev/null +++ b/game/menus/mainmenu/ButtonTransitionPreviewSubScript.h @@ -0,0 +1,12 @@ +#pragma once + +#include "ITransitionScript.h" + +#include "../IButtonScript.h" + +class ButtonTransitionPreviewSubScript : 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..cd929a0 --- /dev/null +++ b/game/menus/mainmenu/ITransitionScript.cpp @@ -0,0 +1,29 @@ +#include "ITransitionScript.h" +#include "MainMenuConfig.h" + +#include "../MenusConfig.h" + +#include <crepe/api/Camera.h> +#include <crepe/api/Transform.h> +#include <crepe/types.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..9a2ef90 --- /dev/null +++ b/game/menus/mainmenu/ITransitionScript.h @@ -0,0 +1,15 @@ +#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..f4ca5a6 --- /dev/null +++ b/game/menus/mainmenu/MainMenuConfig.h @@ -0,0 +1,19 @@ +#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..43418e3 --- /dev/null +++ b/game/menus/mainmenu/MainMenuScene.cpp @@ -0,0 +1,115 @@ + +#include "MainMenuScene.h" +#include "MainMenuConfig.h" +#include "TransitionStartSubScript.h" + +#include "../ButtonSubScene.h" +#include "../MenusConfig.h" + +#include "../../Config.h" +#include "../../background/HallwaySubScene.h" +#include "../../background/StartSubScene.h" + +#include "../endgame/EndGameSubScene.h" + +#include <crepe/api/BehaviorScript.h> +#include <crepe/api/Camera.h> +#include <crepe/api/GameObject.h> +#include <crepe/api/Sprite.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<TransitionStartSubScript>(); + + //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/TransitionStartSubScript.cpp b/game/menus/mainmenu/TransitionStartSubScript.cpp new file mode 100644 index 0000000..63723cf --- /dev/null +++ b/game/menus/mainmenu/TransitionStartSubScript.cpp @@ -0,0 +1,16 @@ +#include "TransitionStartSubScript.h" + +#include "../MenusConfig.h" + +using namespace crepe; +using namespace std; + +void TransitionStartSubScript::fixed_update(crepe::duration_t dt) { + if (this->get_key_state(Keycode::ENTER) && this->transition == false) + this->transition = true; +} + +const char * TransitionStartSubScript::get_scene_name() const { + // Provide the next scene defined in MainMenuConfig + return START_SCENE; +} diff --git a/game/menus/mainmenu/TransitionStartSubScript.h b/game/menus/mainmenu/TransitionStartSubScript.h new file mode 100644 index 0000000..f9862ea --- /dev/null +++ b/game/menus/mainmenu/TransitionStartSubScript.h @@ -0,0 +1,9 @@ +#pragma once + +#include "ITransitionScript.h" + +class TransitionStartSubScript : public ITransitionScript { +public: + void fixed_update(crepe::duration_t dt) override; + const char * get_scene_name() const override; +}; |