diff options
Diffstat (limited to 'game')
| -rw-r--r-- | game/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | game/Events.h | 5 | ||||
| -rw-r--r-- | game/GameScene.cpp | 6 | ||||
| -rw-r--r-- | game/menus/IFloatingWindowScript.cpp | 23 | ||||
| -rw-r--r-- | game/menus/IFloatingWindowScript.h | 15 | ||||
| -rw-r--r-- | game/menus/endgame/EndGameSubScene.cpp | 14 | ||||
| -rw-r--r-- | game/menus/endgame/EndGameSubScript.cpp | 51 | ||||
| -rw-r--r-- | game/menus/endgame/EndGameSubScript.h | 16 | ||||
| -rw-r--r-- | game/menus/mainmenu/MainMenuScene.cpp | 3 | ||||
| -rw-r--r-- | game/player/PlayerEndScript.cpp | 5 | 
10 files changed, 131 insertions, 9 deletions
| diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt index 9886973..fffe6d3 100644 --- a/game/CMakeLists.txt +++ b/game/CMakeLists.txt @@ -28,12 +28,14 @@ add_executable(main  	menus/ButtonSetShopScript.cpp  	menus/ButtonSetMainMenuScript.cpp  	menus/FloatingWindowSubScene.cpp +	menus/IFloatingWindowScript.cpp  	menus/shop/ShopMenuScene.cpp  	menus/mainmenu/ButtonTransitionPreviewScript.cpp  	menus/mainmenu/ITransitionScript.cpp  	menus/mainmenu/MainMenuScene.cpp  	menus/mainmenu/TransitionStartScript.cpp  	menus/endgame/EndGameSubScene.cpp +	menus/endgame/EndGameSubScript.cpp  	coins/CoinSubScene.cpp  	coins/CoinPool.cpp  	coins/CoinSystemScript.cpp diff --git a/game/Events.h b/game/Events.h new file mode 100644 index 0000000..cf0be68 --- /dev/null +++ b/game/Events.h @@ -0,0 +1,5 @@ +#pragma once + +#include "api/Event.h" + +struct EndGameEvent : public crepe::Event {}; diff --git a/game/GameScene.cpp b/game/GameScene.cpp index 24b4287..a1f3fa6 100644 --- a/game/GameScene.cpp +++ b/game/GameScene.cpp @@ -11,6 +11,7 @@  #include "hud/HudSubScene.h"  #include "hud/SpeedScript.h"  #include "menus/endgame/EndGameSubScene.h" +#include "menus/endgame/EndGameSubScript.h"  #include "player/PlayerSubScene.h"  #include <cmath> @@ -135,9 +136,8 @@ void GameScene::load_scene() {  	});  	missile.add_component<BoxCollider>(vec2(100, 100)); - -	EndGameSubScene test; -	test.create(*this); +	EndGameSubScene endgamewindow; +	endgamewindow.create(*this);  }  string GameScene::get_name() const { return "scene1"; } diff --git a/game/menus/IFloatingWindowScript.cpp b/game/menus/IFloatingWindowScript.cpp new file mode 100644 index 0000000..ce84de7 --- /dev/null +++ b/game/menus/IFloatingWindowScript.cpp @@ -0,0 +1,23 @@ +#include "IFloatingWindowScript.h" +#include "api/Sprite.h" +#include "types.h" + +using namespace crepe; + +void IFloatingWindowScript::init(){ + this->disable_all_sprites(); +} + +void IFloatingWindowScript::disable_all_sprites(){ +	RefVector<Sprite> sprites = this->get_components_by_tag<Sprite>(this->tag); +	for(Sprite & sprite : sprites){ +		sprite.active = false; +	} +} + +void IFloatingWindowScript::enable_all_sprites(){ +	RefVector<Sprite> sprites = this->get_components_by_tag<Sprite>(this->tag); +	for(Sprite & sprite : sprites){ +		sprite.active = true; +	} +} diff --git a/game/menus/IFloatingWindowScript.h b/game/menus/IFloatingWindowScript.h new file mode 100644 index 0000000..9775726 --- /dev/null +++ b/game/menus/IFloatingWindowScript.h @@ -0,0 +1,15 @@ +#pragma once + +#include <crepe/api/Script.h> +#include <string> + +class IFloatingWindowScript : public virtual crepe::Script { +public: +	virtual void init(); +	void disable_all_sprites(); +	void enable_all_sprites(); +protected: +	std::string tag = ""; +}; + + diff --git a/game/menus/endgame/EndGameSubScene.cpp b/game/menus/endgame/EndGameSubScene.cpp index 8d785ed..41556af 100644 --- a/game/menus/endgame/EndGameSubScene.cpp +++ b/game/menus/endgame/EndGameSubScene.cpp @@ -5,6 +5,8 @@  #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" @@ -13,10 +15,14 @@ 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 = "end_game_window", +		.group_tag = TAG,  		.width = 500,  		.offset = {0,-50},  		.width_middle_offset = -2, @@ -24,7 +30,7 @@ void EndGameSubScene::create(Scene & scn){  	// Titel  	const string TITEL_STRING = "GAME OVER"; -	GameObject titel = scn.new_object("titel"); +	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, @@ -43,6 +49,7 @@ void EndGameSubScene::create(Scene & scn){  		.button_type = ButtonSubScene::ButtonSelect::NEXT,  		.scale = 0.6,  		.worldspace = false, +		.tag = TAG,  		.sorting_layer_offset = 20,  	}); @@ -50,10 +57,11 @@ void EndGameSubScene::create(Scene & scn){  		.text = "REPLAY",  		.text_width = 150,  		.position = {-button_position.x,button_position.y}, -		.script_type = ButtonSubScene::ScriptSelect::MAINMENU, +		// .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/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(); +}; + + diff --git a/game/menus/mainmenu/MainMenuScene.cpp b/game/menus/mainmenu/MainMenuScene.cpp index a515b45..15cf6d5 100644 --- a/game/menus/mainmenu/MainMenuScene.cpp +++ b/game/menus/mainmenu/MainMenuScene.cpp @@ -98,9 +98,6 @@ void MainMenuScene::load_scene(){  		.color_side = false,  		.tag = MENU_INFO_TAG,  	}); -	 -	EndGameSubScene test; -	test.create(*this);  } diff --git a/game/player/PlayerEndScript.cpp b/game/player/PlayerEndScript.cpp index e04fb9d..1554c84 100644 --- a/game/player/PlayerEndScript.cpp +++ b/game/player/PlayerEndScript.cpp @@ -1,6 +1,7 @@  #include "PlayerEndScript.h"  #include "../Config.h" +#include "../Events.h"  #include "manager/LoopTimerManager.h"  #include <crepe/api/Animator.h> @@ -89,6 +90,10 @@ bool PlayerEndScript::on_collision(const crepe::CollisionEvent & ev) {  			jump++;  		} +		if(rb_player.data.linear_velocity.x < 5){ +			this->trigger_event<EndGameEvent>(); +		} +  		return true;  	} |