aboutsummaryrefslogtreecommitdiff
path: root/game
diff options
context:
space:
mode:
authorheavydemon21 <nielsstunnebrink1@gmail.com>2025-01-10 12:05:16 +0100
committerheavydemon21 <nielsstunnebrink1@gmail.com>2025-01-10 12:05:16 +0100
commit15a958a7f327bb2e81e7d445f1499ec78c7f5839 (patch)
tree335754f27b42f00353be643c2f01240ec7a2bcc4 /game
parentd20b25828b53af170a6534263e8de114e7fac121 (diff)
alers scripts and quitscript with ESC key
Diffstat (limited to 'game')
-rw-r--r--game/CMakeLists.txt3
-rw-r--r--game/GameScene.cpp1
-rw-r--r--game/QuitScript.cpp23
-rw-r--r--game/QuitScript.h11
-rw-r--r--game/menus/mainmenu/MainMenuScene.cpp2
-rw-r--r--game/missile/AlertScript.cpp38
-rw-r--r--game/missile/AlertScript.h10
-rw-r--r--game/missile/AlertSubScene.cpp38
-rw-r--r--game/missile/AlertSubScene.h7
-rw-r--r--game/missile/MissilePool.cpp2
-rw-r--r--game/missile/MissileScript.cpp11
-rw-r--r--game/missile/MissileSubScene.cpp25
-rw-r--r--game/missile/SpawnEvent.cpp22
13 files changed, 168 insertions, 25 deletions
diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt
index e1168eb..70445c9 100644
--- a/game/CMakeLists.txt
+++ b/game/CMakeLists.txt
@@ -41,6 +41,8 @@ target_sources(main PUBLIC
missile/MissilePool.cpp
missile/MissileScript.cpp
missile/MissileSubScene.cpp
+ missile/AlertSubScene.cpp
+ missile/AlertScript.cpp
missile/SpawnEvent.cpp
#scheduling
@@ -57,6 +59,7 @@ target_sources(main PUBLIC
GameScene.cpp
MoveCameraManualyScript.cpp
StartGameScript.cpp
+ QuitScript.cpp
# player
player/PlayerScript.cpp
diff --git a/game/GameScene.cpp b/game/GameScene.cpp
index ea55f7b..7803c9d 100644
--- a/game/GameScene.cpp
+++ b/game/GameScene.cpp
@@ -1,6 +1,5 @@
#include "GameScene.h"
#include "Config.h"
-#include "MoveCameraManualyScript.h"
#include "StartGameScript.h"
#include "coins/CoinPoolSubScene.h"
#include "coins/CoinSystemScript.h"
diff --git a/game/QuitScript.cpp b/game/QuitScript.cpp
new file mode 100644
index 0000000..e48863f
--- /dev/null
+++ b/game/QuitScript.cpp
@@ -0,0 +1,23 @@
+
+
+#include "QuitScript.h"
+#include "api/Event.h"
+#include "api/KeyCodes.h"
+
+
+using namespace crepe;
+
+bool QuitScript::on_event(const KeyPressEvent & ev){
+ if (Keycode::ESCAPE == ev.key) {
+ trigger_event<ShutDownEvent>(ShutDownEvent{});
+ }
+ return false;
+}
+
+
+
+void QuitScript::init(){
+ subscribe<KeyPressEvent>([this](const KeyPressEvent & ev) -> bool {
+ return this->on_event(ev);
+ });
+}
diff --git a/game/QuitScript.h b/game/QuitScript.h
new file mode 100644
index 0000000..c295183
--- /dev/null
+++ b/game/QuitScript.h
@@ -0,0 +1,11 @@
+#pragma once
+
+
+#include "api/Script.h"
+class QuitScript : public crepe::Script {
+private:
+ bool on_event(const crepe::KeyPressEvent & ev);
+
+public:
+ void init();
+};
diff --git a/game/menus/mainmenu/MainMenuScene.cpp b/game/menus/mainmenu/MainMenuScene.cpp
index fba90ac..ad2c54d 100644
--- a/game/menus/mainmenu/MainMenuScene.cpp
+++ b/game/menus/mainmenu/MainMenuScene.cpp
@@ -2,6 +2,7 @@
#include "MainMenuScene.h"
#include "CreditsSubScene.h"
#include "MainMenuConfig.h"
+#include "QuitScript.h"
#include "TransitionStartSubScript.h"
#include "../ButtonSubScene.h"
@@ -33,6 +34,7 @@ void MainMenuScene::load_scene() {
}
);
camera_object.add_component<BehaviorScript>().set_script<TransitionStartSubScript>();
+ camera_object.add_component<BehaviorScript>().set_script<QuitScript>();
//Button menu
GameObject menu_button = this->new_object(MENU_BUTTON_NAME, MENU_BUTTON_NAME, MENU_OFFSET);
diff --git a/game/missile/AlertScript.cpp b/game/missile/AlertScript.cpp
new file mode 100644
index 0000000..c1124ac
--- /dev/null
+++ b/game/missile/AlertScript.cpp
@@ -0,0 +1,38 @@
+#include "AlertScript.h"
+#include "../Config.h"
+#include "api/CircleCollider.h"
+#include "api/Sprite.h"
+
+#include <crepe/api/Transform.h>
+
+using namespace crepe;
+
+void AlertScript::fixed_update(crepe::duration_t dt) {
+ const auto & cam = this->get_components_by_name<Transform>("camera").front().get();
+ //missile transform
+ const auto & this_transform = this->get_component<Transform>();
+ auto missile_transforms = this->get_components_by_name<Transform>("missile");
+ const auto & this_collider = this->get_component<CircleCollider>();
+
+ auto alert_sprites = this->get_components_by_name<Sprite>("missile_alert");
+ auto alert_transforms = this->get_components_by_name<Transform>("missile_alert");
+
+ int idx = 0;
+ for (int i = 0; i < missile_transforms.size(); i++) {
+ const auto & missile_transform = missile_transforms[i].get();
+ if (this_transform.game_object_id == missile_transform.game_object_id) {
+ idx = i;
+ break;
+ }
+ }
+
+ auto & alert_transform = alert_transforms[idx].get();
+ alert_transform.position.x = cam.position.x + (VIEWPORT_X / 2 - 100);
+ alert_transform.position.y = this_transform.position.y;
+
+ // check if transform is in camera view
+ if (this_transform.position.x > cam.position.x - (VIEWPORT_X / 2)
+ && this_transform.position.x < cam.position.x + (VIEWPORT_X / 2)) {
+ alert_sprites[idx].get().active = false;
+ }
+}
diff --git a/game/missile/AlertScript.h b/game/missile/AlertScript.h
new file mode 100644
index 0000000..ab29863
--- /dev/null
+++ b/game/missile/AlertScript.h
@@ -0,0 +1,10 @@
+#pragma once
+
+#include "api/Script.h"
+class AlertScript : public crepe::Script {
+private:
+ bool has_alert = false;
+
+public:
+ void fixed_update(crepe::duration_t dt);
+};
diff --git a/game/missile/AlertSubScene.cpp b/game/missile/AlertSubScene.cpp
new file mode 100644
index 0000000..c3379e8
--- /dev/null
+++ b/game/missile/AlertSubScene.cpp
@@ -0,0 +1,38 @@
+#include "AlertSubScene.h"
+#include "../Config.h"
+#include "api/Animator.h"
+#include "api/BehaviorScript.h"
+#include "api/Scene.h"
+#include "api/Sprite.h"
+#include "missile/AlertScript.h"
+
+using namespace crepe;
+
+MissileAlert::MissileAlert(Scene& scn){
+ GameObject alert = scn.new_object("missile_alert", "missile_alert", {0, 0}, 0, 1);
+
+ Asset missile_alert_ss {"asset/obstacles/missile/missileAlert.png"};
+
+ //alert.add_component<BehaviorScript>().set_script<AlertScript>();
+
+ auto & missile_alert_sprite = alert.add_component<Sprite>(
+ missile_alert_ss,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_OBSTACLES,
+ .size = {0, 100},
+ }
+ );
+
+ auto & missile_alert_anim = alert.add_component<Animator>(
+ missile_alert_sprite, ivec2 {64, 64}, uvec2 {4, 2},
+ Animator::Data {
+ .fps = 15,
+ .looping = true,
+ }
+ );
+
+ missile_alert_anim.set_anim(1);
+ missile_alert_sprite.active = false;
+
+
+}
diff --git a/game/missile/AlertSubScene.h b/game/missile/AlertSubScene.h
new file mode 100644
index 0000000..661b3f1
--- /dev/null
+++ b/game/missile/AlertSubScene.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#include "api/Scene.h"
+class MissileAlert {
+public:
+ MissileAlert(crepe::Scene & scn);
+};
diff --git a/game/missile/MissilePool.cpp b/game/missile/MissilePool.cpp
index e549210..23f03c9 100644
--- a/game/missile/MissilePool.cpp
+++ b/game/missile/MissilePool.cpp
@@ -1,5 +1,6 @@
#include "MissilePool.h"
#include "MissileSubScene.h"
+#include "missile/AlertSubScene.h"
#include <crepe/api/Scene.h>
@@ -10,6 +11,7 @@ MissilePool::MissilePool(Scene & scn) {
int amount = 0;
MissileSubScene missile;
while (amount < this->MAX_MISSILE_COUNT) {
+ MissileAlert alert(scn);
missile.create(scn);
amount++;
}
diff --git a/game/missile/MissileScript.cpp b/game/missile/MissileScript.cpp
index 6d0e40e..2d1052e 100644
--- a/game/missile/MissileScript.cpp
+++ b/game/missile/MissileScript.cpp
@@ -1,6 +1,9 @@
#include "MissileScript.h"
#include "../Config.h"
+#include "Collider.h"
#include "api/BehaviorScript.h"
+#include "api/CircleCollider.h"
+#include "api/Rigidbody.h"
#include <crepe/api/Animator.h>
#include <crepe/api/AudioSource.h>
@@ -25,8 +28,9 @@ void MissileScript::init() {
void MissileScript::kill_missile() {
auto animations = this->get_components<Animator>();
auto sprites = this->get_components<Sprite>();
+ auto collider = this->get_component<CircleCollider>();
auto & fly_sound = this->get_components<AudioSource>().front().get();
- auto & this_script = this->get_components<BehaviorScript>().back().get();
+ auto & this_script = this->get_components<BehaviorScript>().front().get();
animations[0].get().active = false;
animations[1].get().active = false;
@@ -34,7 +38,7 @@ void MissileScript::kill_missile() {
sprites[0].get().active = false;
sprites[1].get().active = false;
sprites[2].get().active = true;
-
+ collider.active = false;
this_script.active = false;
this->seeking_disabled = false;
@@ -47,9 +51,12 @@ void MissileScript::activate() {
anim[0].get().active = true;
anim[1].get().active = true;
anim[2].get().stop();
+ //anim[3].get().active = true;
+
sprites[0].get().active = true;
sprites[1].get().active = true;
sprites[2].get().active = false;
+ //sprites[3].get().active = true;
}
bool MissileScript::on_collision(const CollisionEvent & ev) {
diff --git a/game/missile/MissileSubScene.cpp b/game/missile/MissileSubScene.cpp
index 6719c3d..6df6c87 100644
--- a/game/missile/MissileSubScene.cpp
+++ b/game/missile/MissileSubScene.cpp
@@ -1,6 +1,8 @@
#include "MissileSubScene.h"
#include "../Config.h"
#include "../missile/MissileScript.h"
+#include "Random.h"
+#include "missile/AlertScript.h"
#include <crepe/api/AI.h>
#include <crepe/api/Animator.h>
@@ -10,14 +12,10 @@
#include <crepe/api/Scene.h>
#include <crepe/api/Sprite.h>
#include <crepe/types.h>
-#include <random>
using namespace crepe;
void MissileSubScene::create(crepe::Scene & scn) {
- std::random_device rd;
- std::mt19937 gen(rd());
-
GameObject missle = scn.new_object("missile", "missile", {0, 0}, 0, 1);
Asset missle_ss {"asset/obstacles/missile/missile.png"};
@@ -27,6 +25,7 @@ void MissileSubScene::create(crepe::Scene & scn) {
Asset missile_fire {"asset/sfx/missile_launch.ogg"};
missle.add_component<BehaviorScript>().set_script<MissileScript>().active = false;
+ missle.add_component<BehaviorScript>().set_script<AlertScript>();
auto & sound = missle.add_component<AudioSource>(missile_fire);
sound.volume = 0.5;
@@ -88,16 +87,16 @@ void MissileSubScene::create(crepe::Scene & scn) {
missile_explosion_sprite.active = false;
explosion_anim.active = false;
- std::uniform_int_distribution<> dist(200, 250);
- missle.add_component<Rigidbody>(Rigidbody::Data {
- .body_type = Rigidbody::BodyType::KINEMATIC,
- .max_linear_velocity = static_cast<float>(dist(gen)),
- .kinematic_collision = false,
- .collision_layers = {COLL_LAY_PLAYER, COLL_LAY_BOT_TOP},
- .collision_layer = COLL_LAY_MISSILE,
- });
+ missle
+ .add_component<Rigidbody>(Rigidbody::Data {
+ .body_type = Rigidbody::BodyType::KINEMATIC,
+ .max_linear_velocity = Random::f(250, 200),
+ .kinematic_collision = false,
+ .collision_layers = {COLL_LAY_PLAYER, COLL_LAY_BOT_TOP},
+ .collision_layer = COLL_LAY_MISSILE,
+ });
- missle.add_component<CircleCollider>(3);
+ missle.add_component<CircleCollider>(3).active = false;
auto & missle_ai = missle.add_component<AI>(1000);
}
diff --git a/game/missile/SpawnEvent.cpp b/game/missile/SpawnEvent.cpp
index 03a9b8c..c407832 100644
--- a/game/missile/SpawnEvent.cpp
+++ b/game/missile/SpawnEvent.cpp
@@ -1,4 +1,7 @@
#include "SpawnEvent.h"
+#include "Config.h"
+#include "Random.h"
+#include "api/CircleCollider.h"
#include <crepe/api/Animator.h>
#include <crepe/api/AudioSource.h>
@@ -8,7 +11,6 @@
#include <crepe/api/Transform.h>
#include <cstdlib>
-#include <random>
using namespace crepe;
@@ -18,28 +20,30 @@ void MissileSpawnEventHandler::init() {
});
}
-std::random_device rd;
-std::mt19937 gen(rd());
-
bool MissileSpawnEventHandler::on_event(const MissileSpawnEvent & event) {
- auto missile_sprites = this->get_components_by_name<Sprite>("missile");
auto missile_transforms = this->get_components_by_name<Transform>("missile");
+ auto alert_sprites = this->get_components_by_name<Sprite>("missile_alert");
+ auto alert_transforms = this->get_components_by_name<Transform>("missile_alert");
+ auto colliders = this->get_components_by_name<CircleCollider>("missile");
auto missile_behaviorscripts = this->get_components_by_name<BehaviorScript>("missile");
auto missile_audiosources = this->get_components_by_name<AudioSource>("missile");
auto & camera_transform = this->get_components_by_name<Transform>("camera").front().get();
for (size_t i = 0; i < missile_behaviorscripts.size(); ++i) {
- auto & script = missile_behaviorscripts[i].get();
+ auto & script = missile_behaviorscripts[i * 2].get();
if (script.active) continue;
script.active = true;
-
+ colliders[i].get().active = true;
missile_audiosources[i * 2].get().play();
auto & transform = missile_transforms[i].get();
transform.position.x = camera_transform.position.x + this->MISSILE_OFFSET;
- std::uniform_int_distribution<> dist(this->MIN_RANGE, this->MAX_RANGE);
- transform.position.y = dist(gen);
+ transform.position.y = Random::i(this->MAX_RANGE, this->MIN_RANGE);
+
+ auto & alert_transform = alert_transforms[i].get();
+ auto & alert_sprite = alert_sprites[i].get();
+ alert_sprite.active = true;
break;
}