aboutsummaryrefslogtreecommitdiff
path: root/game
diff options
context:
space:
mode:
authorJAROWMR <jarorutjes07@gmail.com>2025-01-07 11:20:58 +0100
committerJAROWMR <jarorutjes07@gmail.com>2025-01-07 11:20:58 +0100
commitfcae8934916c9f429e58c8e178ab14fcf65a2bbc (patch)
tree34cddb9fad2c8639dfed3ffbb3216be9ac5e8b52 /game
parent126c402548281f3a97e3a9e0ef60c45147c87fa0 (diff)
added end game
Diffstat (limited to 'game')
-rw-r--r--game/CMakeLists.txt2
-rw-r--r--game/Events.h5
-rw-r--r--game/GameScene.cpp6
-rw-r--r--game/menus/IFloatingWindowScript.cpp23
-rw-r--r--game/menus/IFloatingWindowScript.h15
-rw-r--r--game/menus/endgame/EndGameSubScene.cpp14
-rw-r--r--game/menus/endgame/EndGameSubScript.cpp51
-rw-r--r--game/menus/endgame/EndGameSubScript.h16
-rw-r--r--game/menus/mainmenu/MainMenuScene.cpp3
-rw-r--r--game/player/PlayerEndScript.cpp5
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;
}