diff options
| author | JAROWMR <jarorutjes07@gmail.com> | 2024-12-29 15:05:21 +0100 | 
|---|---|---|
| committer | JAROWMR <jarorutjes07@gmail.com> | 2024-12-29 15:05:21 +0100 | 
| commit | b758b2b20da8e3ab002dacc663237e1681ae973c (patch) | |
| tree | 60c41aa58570eaebbc589b07ff13f045fe46a93a | |
| parent | e007e8f467349eeddaf503e31897d4135ba6fed4 (diff) | |
back button
| -rw-r--r-- | game/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | game/mainmenu/ButtonSetMainMenuScript.cpp | 19 | ||||
| -rw-r--r-- | game/mainmenu/ButtonSetMainMenuScript.h | 14 | ||||
| -rw-r--r-- | game/mainmenu/ButtonSubScene.cpp | 96 | ||||
| -rw-r--r-- | game/mainmenu/ButtonSubScene.h | 26 | ||||
| -rw-r--r-- | game/mainmenu/IButtonScript.cpp | 13 | ||||
| -rw-r--r-- | game/mainmenu/MainMenuConfig.h | 4 | ||||
| -rw-r--r-- | game/mainmenu/MainMenuScene.cpp | 13 | ||||
| -rw-r--r-- | game/mainmenu/ShopMenuScene.cpp | 11 | 
9 files changed, 165 insertions, 33 deletions
| 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<ButtonPressEvent>([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 <crepe/api/Script.h> + +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 <crepe/api/BehaviorScript.h> @@ -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<Text>(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<BehaviorScript>().set_script<ButtonTransitionPreviewScript>(); +			break; +		case ScriptSelect::SHOP: +			button_object.add_component<BehaviorScript>().set_script<ButtonSetShopScript>(); +			break; +		case ScriptSelect::MAINMENU: +			button_object.add_component<BehaviorScript>().set_script<ButtonSetMainMenuScript>(); +			break; +		case ScriptSelect::NONE: +			button_object.add_component<BehaviorScript>().set_script<IButtonScript>(); +			break; +	} +} + +void ButtonSubScene::set_icon(crepe::GameObject & button_object,const Data & data){ +	switch (data.icon_type) { +		case IconSelect::SHOP: +			button_object.add_component<Sprite>(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<Sprite>(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<Sprite>(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<Sprite>(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<Button>(vec2{MainMenuConfig::SMALL_OVERLAY_SIZE_LEFT.x+MainMenuConfig::SMALL_OVERLAY_SIZE_RIGHT.x,MainMenuConfig::SMALL_OVERLAY_SIZE_LEFT.y},vec2{0,0}); +} +  void ButtonSubScene::btn_color_side(crepe::GameObject & button_object,const vec2 & offset){  	button_object.add_component<Sprite>(Asset("asset/ui/buttonSmallBlue.png"),Sprite::Data{  		.sorting_in_layer = MainMenuConfig::STARTING_SORTING_IN_LAYER+2, @@ -40,22 +109,3 @@ void ButtonSubScene::btn_color_side(crepe::GameObject & button_object,const vec2  		.position_offset = {-offset.x,offset.y},  	});  } - -//fc-match arial -void ButtonSubScene::btn_text_middle(crepe::GameObject & button_object,const std::string & text,const crepe::vec2 & text_offset,const crepe::vec2 & text_size){ -	button_object.add_component<Text>(text_size,text_offset+MainMenuConfig::FONTOFFSET, MainMenuConfig::FONT, Text::Data{ -		.text_color = Color::WHITE, -		}, text); -} - -void ButtonSubScene::set_script(crepe::GameObject & button_object,ScriptSelect script){ -	switch (script) { -		case ScriptSelect::PREVIEW: -			button_object.add_component<BehaviorScript>().set_script<ButtonTransitionPreviewScript>(); -			break; -		case ScriptSelect::SHOP: -			button_object.add_component<BehaviorScript>().set_script<ButtonSetShopScript>(); -		case ScriptSelect::NONE: -			break; -	} -} diff --git a/game/mainmenu/ButtonSubScene.h b/game/mainmenu/ButtonSubScene.h index 9905a8b..6f183ed 100644 --- a/game/mainmenu/ButtonSubScene.h +++ b/game/mainmenu/ButtonSubScene.h @@ -13,23 +13,41 @@ public:  	enum class ScriptSelect {  		PREVIEW,  		SHOP, +		MAINMENU,  		NONE,  	}; +	//icon enum +	enum class IconSelect { +		SHOP, +		NONE, +	}; +	//icon enum +	enum class ButtonSelect { +		SMALL, +		LARGE, +	};  	//data struct  	struct Data{  		const std::string & text = "NODATA";  		const crepe::vec2 & text_offset = {0,0}; -		const crepe::vec2 & text_size = {200,200}; +		const float text_width = 200; +		const crepe::vec2 & icon_offset = {0,0}; +		const IconSelect icon_type = IconSelect::NONE;  		const crepe::vec2 & position = {0,0}; -		const ScriptSelect script = ScriptSelect::NONE; +		const ScriptSelect script_type = ScriptSelect::NONE; +		const ButtonSelect button_type = ButtonSelect::LARGE; +		const float scale = 1;  	};  public:  	void create(crepe::Scene & scn,const Data & data);  private:  	void large_btn_overlay(crepe::GameObject & button_object); +	void small_btn_overlay(crepe::GameObject & button_object);  	void btn_color_side(crepe::GameObject & button_object,const crepe::vec2 & offset); -	void btn_text_middle(crepe::GameObject & button_object,const std::string & text,const crepe::vec2 & text_offset,const crepe::vec2 & text_size); -	void set_script(crepe::GameObject & button_object,ScriptSelect script); +	void btn_text(crepe::GameObject & button_object,const Data & data); +	void set_script(crepe::GameObject & button_object,const Data & data); +	void set_icon(crepe::GameObject & button_object,const Data & data); +	void set_button_overlay(crepe::GameObject & button_object,const Data & data);  private:  	static constexpr crepe::vec2 SIDE_PANEL_OFFSET = {113,0};  }; diff --git a/game/mainmenu/IButtonScript.cpp b/game/mainmenu/IButtonScript.cpp index 6cd42fb..ab907c4 100644 --- a/game/mainmenu/IButtonScript.cpp +++ b/game/mainmenu/IButtonScript.cpp @@ -1,6 +1,8 @@  #include "IButtonScript.h" +#include "api/Sprite.h"  #include "iostream"  #include "system/InputSystem.h" +#include "types.h"  using namespace crepe;  using namespace std; @@ -10,12 +12,21 @@ void IButtonScript::init(){  	this->subscribe<ButtonEnterEvent>([this](const ButtonEnterEvent& e) { return this->on_button_enter(e); });  }  bool IButtonScript::on_button_exit(const ButtonExitEvent& e){ +	RefVector<Sprite> sprites = this->get_components<Sprite>(); +	for(Sprite & sprite : sprites) +	{ +		sprite.data.color = Color{255,255,255,255}; +	}  	cout << "button triggered:" << e.metadata.game_object_id << std::endl;  	return false;  }  bool IButtonScript::on_button_enter(const ButtonEnterEvent& e){ - +	RefVector<Sprite> sprites = this->get_components<Sprite>(); +	for(Sprite & sprite : sprites) +	{ +		sprite.data.color = Color{200,200,200,255}; +	}  	cout << "button Enter:" << e.metadata.game_object_id << std::endl;  	return false;  } diff --git a/game/mainmenu/MainMenuConfig.h b/game/mainmenu/MainMenuConfig.h index fd7e922..9dbb838 100644 --- a/game/mainmenu/MainMenuConfig.h +++ b/game/mainmenu/MainMenuConfig.h @@ -16,6 +16,7 @@ struct MainMenuConfig {  	static constexpr const char* START_SCENE = "scene1";  	static constexpr const char* PREVIEW_SCENE = "scene1";  	static constexpr const char* SHOP_SCENE = "shopmenu"; +	static constexpr const char* MAINMENU_SCENE = "mainmenu";  	//Moving to new scene (Start and Preview)  	static constexpr float SLOW_DOWN = 200;  	static constexpr float END = 300; @@ -25,6 +26,9 @@ struct MainMenuConfig {  	static constexpr const char* FONT = "Jetpackia";  	static constexpr crepe::vec2 FONTOFFSET = {0,0};  	static constexpr crepe::vec2 LARGE_OVERLAY_SIZE = {250,100}; +	static constexpr crepe::vec2 SMALL_OVERLAY_SIZE_RIGHT = {150,100}; +	static constexpr crepe::vec2 SMALL_OVERLAY_SIZE_LEFT = {50,100};  	static constexpr crepe::vec2 SIDE_PANEL_SIZE = {50,150}; +	static constexpr crepe::vec2 ICON_SIZE = {50,50};  }; diff --git a/game/mainmenu/MainMenuScene.cpp b/game/mainmenu/MainMenuScene.cpp index 80c945b..e514ee5 100644 --- a/game/mainmenu/MainMenuScene.cpp +++ b/game/mainmenu/MainMenuScene.cpp @@ -34,19 +34,22 @@ void MainMenuScene::load_scene(){  	//Preview btn  	button.create(*this,ButtonSubScene::Data{  		.text = "PREVIEW", -		.text_size = vec2{200,80}, +		.text_width = 200,  		.position = pos, -		.script = ButtonSubScene::ScriptSelect::PREVIEW, +		.script_type = ButtonSubScene::ScriptSelect::PREVIEW,  	}); -	//Shop btn  	pos.y += MainMenuConfig::MENU_BUTTON_SPACING + MainMenuConfig::LARGE_OVERLAY_SIZE.y;  	button.create(*this,ButtonSubScene::Data{  		.text = "SHOP", -		.text_size = vec2{200,80}, +		.text_offset = {-20,0}, +		.text_width = 115, +		.icon_offset = {60,0}, +		.icon_type = ButtonSubScene::IconSelect::SHOP,  		.position = pos, -		.script = ButtonSubScene::ScriptSelect::SHOP, +		.script_type = ButtonSubScene::ScriptSelect::SHOP,  	}); +	  	//Start of map  	StartSubScene start; diff --git a/game/mainmenu/ShopMenuScene.cpp b/game/mainmenu/ShopMenuScene.cpp index b18ae47..be2039f 100644 --- a/game/mainmenu/ShopMenuScene.cpp +++ b/game/mainmenu/ShopMenuScene.cpp @@ -1,5 +1,6 @@  #include "ShopMenuScene.h" +#include "ButtonSubScene.h"  #include "api/Camera.h"  #include "MainMenuConfig.h"  #include "api/Sprite.h" @@ -24,6 +25,16 @@ void ShopMenuScene::load_scene(){  		.size = {1100,860},  		.position_offset {0},  		}); +		 +	ButtonSubScene button; +	button.create(*this,ButtonSubScene::Data{ +		.text = "BACK", +		.text_width = 115, +		.position = {-400,-350}, +		.script_type = ButtonSubScene::ScriptSelect::MAINMENU, +		.button_type = ButtonSubScene::ButtonSelect::SMALL, +		.scale = 0.8 +	});  }  string ShopMenuScene::get_name() const { return "shopmenu"; } |