aboutsummaryrefslogtreecommitdiff
path: root/game
diff options
context:
space:
mode:
Diffstat (limited to 'game')
-rw-r--r--game/CMakeLists.txt3
-rw-r--r--game/Config.h3
-rw-r--r--game/GameScene.cpp6
-rw-r--r--game/background/AquariumScript.cpp26
-rw-r--r--game/background/AquariumScript.h12
-rw-r--r--game/background/AquariumSubScene.cpp19
-rw-r--r--game/background/BackgroundSubScene.cpp16
-rw-r--r--game/background/ForestParallaxScript.cpp26
-rw-r--r--game/background/ForestParallaxScript.h6
-rw-r--r--game/background/ForestSubScene.cpp12
-rw-r--r--game/background/HallwayScript.cpp70
-rw-r--r--game/background/HallwayScript.h13
-rw-r--r--game/background/HallwaySubScene.cpp16
-rw-r--r--game/workers/CollisionScript.cpp68
-rw-r--r--game/workers/CollisionScript.h12
-rw-r--r--game/workers/PanicFromPlayerScript.cpp14
-rw-r--r--game/workers/WorkerScript.cpp29
-rw-r--r--game/workers/WorkersSubScene.cpp41
18 files changed, 340 insertions, 52 deletions
diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt
index c8fa989..4e31f80 100644
--- a/game/CMakeLists.txt
+++ b/game/CMakeLists.txt
@@ -9,11 +9,13 @@ project(game C CXX)
add_subdirectory(../src crepe)
add_executable(main
background/AquariumSubScene.cpp
+ background/AquariumScript.cpp
background/BackgroundSubScene.cpp
background/ForestParallaxScript.cpp
background/ForestSubScene.cpp
GameScene.cpp
background/HallwaySubScene.cpp
+ background/HallwayScript.cpp
MoveCameraManualyScript.cpp
player/PlayerScript.cpp
player/PlayerSubScene.cpp
@@ -24,6 +26,7 @@ add_executable(main
workers/WorkersSubScene.cpp
workers/WorkerScript.cpp
workers/PanicFromPlayerScript.cpp
+ workers/CollisionScript.cpp
main.cpp
menus/BannerSubScene.cpp
menus/ButtonSubScene.cpp
diff --git a/game/Config.h b/game/Config.h
index 6a5299b..f1b64b3 100644
--- a/game/Config.h
+++ b/game/Config.h
@@ -7,8 +7,9 @@ static constexpr int SORT_IN_LAY_FORE_BACKGROUND = 5; // For all scenes
static constexpr int SORT_IN_LAY_PARTICLES_BACKGROUND = 6; // For all scenes
static constexpr int SORT_IN_LAY_COINS = 7; // Only for GameScene
static constexpr int SORT_IN_LAY_OBSTACLES = 8; // Only for GameScene
+static constexpr int SORT_IN_LAY_WORKERS_BACK = 9; // Only for GameScene
static constexpr int SORT_IN_LAY_PLAYER = 10; // Only for GameScene
-static constexpr int SORT_IN_LAY_WORKERS = 12; // Only for GameScene
+static constexpr int SORT_IN_LAY_WORKERS_FRONT = 12; // Only for GameScene
static constexpr int SORT_IN_LAY_PARTICLES_FOREGROUND = 15; // Only for GameScene
static constexpr int COLL_LAY_BOT_TOP = 1; // Only for GameScene
diff --git a/game/GameScene.cpp b/game/GameScene.cpp
index ca03374..9376eab 100644
--- a/game/GameScene.cpp
+++ b/game/GameScene.cpp
@@ -96,7 +96,7 @@ void GameScene::load_scene() {
boom_audio.add_component<AudioSource>(boom_audio_asset);
// zapper, laser and missile (below) for testing purpose only!!!
- GameObject zapper = new_object("zapper", "zapper", vec2(1000, 0));
+ GameObject zapper = new_object("zapper", "zapper", vec2(1000, 200));
Asset zapper_asset {"asset/obstacles/zapper/regular_zappers/zapEffect.png"};
Sprite & zapper_sprite = zapper.add_component<Sprite>(
zapper_asset,
@@ -112,7 +112,7 @@ void GameScene::load_scene() {
.collision_layer = COLL_LAY_ZAPPER,
});
zapper.add_component<BoxCollider>(vec2(100, 100));
- GameObject laser = new_object("laser", "laser", vec2(2000, 0));
+ GameObject laser = new_object("laser", "laser", vec2(2000, 200));
Asset laser_asset {"asset/obstacles/laser/laserPower.png"};
Sprite & laser_sprite = laser.add_component<Sprite>(
laser_asset,
@@ -128,7 +128,7 @@ void GameScene::load_scene() {
.collision_layer = COLL_LAY_LASER,
});
laser.add_component<BoxCollider>(vec2(100, 100));
- GameObject missile = new_object("missile", "missile", vec2(4000, 0));
+ GameObject missile = new_object("missile", "missile", vec2(4000, 200));
Asset missile_asset {"asset/obstacles/missile/missile.png"};
Sprite & missile_sprite = missile.add_component<Sprite>(
missile_asset,
diff --git a/game/background/AquariumScript.cpp b/game/background/AquariumScript.cpp
new file mode 100644
index 0000000..e698e3a
--- /dev/null
+++ b/game/background/AquariumScript.cpp
@@ -0,0 +1,26 @@
+#include "AquariumScript.h"
+
+#include "../Config.h"
+
+#include <crepe/api/Animator.h>
+#include <crepe/api/Sprite.h>
+#include <crepe/api/Transform.h>
+#include <crepe/types.h>
+
+using namespace crepe;
+using namespace std;
+
+void AquariumScript::fixed_update(crepe::duration_t dt) {
+ Transform & trans_cam = this->get_components_by_name<Transform>("camera").front();
+
+ float cam_left_x = trans_cam.position.x - VIEWPORT_X / 2;
+
+ if (cam_left_x > this->start_x + this->lenght) {
+ //Move whole background 12000 to the right
+ RefVector<Transform> trans = this->get_components_by_tag<Transform>("background_aqua");
+ for (Transform & tran : trans) {
+ tran.position.x += 12000;
+ }
+ this->start_x += 12000;
+ }
+}
diff --git a/game/background/AquariumScript.h b/game/background/AquariumScript.h
new file mode 100644
index 0000000..b068628
--- /dev/null
+++ b/game/background/AquariumScript.h
@@ -0,0 +1,12 @@
+#pragma once
+
+#include <crepe/api/Script.h>
+
+class AquariumScript : public crepe::Script {
+public:
+ void fixed_update(crepe::duration_t dt);
+
+private:
+ float start_x = 10200;
+ const float lenght = 3000;
+};
diff --git a/game/background/AquariumSubScene.cpp b/game/background/AquariumSubScene.cpp
index 8d5202a..99466e3 100644
--- a/game/background/AquariumSubScene.cpp
+++ b/game/background/AquariumSubScene.cpp
@@ -15,7 +15,7 @@ float AquariumSubScene::create(Scene & scn, float begin_x) {
this->add_background(scn, begin_x);
GameObject aquarium_begin
- = scn.new_object("aquarium_begin", "background", vec2(begin_x, 0));
+ = scn.new_object("aquarium_begin", "background_aqua", vec2(begin_x, 0));
Asset aquarium_begin_asset {"asset/background/aquarium/glassTubeFG_1_TVOS.png"};
aquarium_begin.add_component<Sprite>(
aquarium_begin_asset,
@@ -28,7 +28,7 @@ float AquariumSubScene::create(Scene & scn, float begin_x) {
begin_x += 600;
GameObject aquarium_middle_1
- = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0));
+ = scn.new_object("aquarium_middle", "background_aqua", vec2(begin_x, 0));
Asset aquarium_middle_1_asset {"asset/background/aquarium/glassTubeFG_3_TVOS.png"};
aquarium_middle_1.add_component<Sprite>(
aquarium_middle_1_asset,
@@ -43,7 +43,7 @@ float AquariumSubScene::create(Scene & scn, float begin_x) {
this->add_background(scn, begin_x - 200);
GameObject aquarium_middle_2
- = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0));
+ = scn.new_object("aquarium_middle", "background_aqua", vec2(begin_x, 0));
Asset aquarium_middle_2_asset {"asset/background/aquarium/glassTubeFG_3_TVOS.png"};
aquarium_middle_2.add_component<Sprite>(
aquarium_middle_2_asset,
@@ -56,7 +56,7 @@ float AquariumSubScene::create(Scene & scn, float begin_x) {
begin_x += 400;
GameObject aquarium_middle_3
- = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0));
+ = scn.new_object("aquarium_middle", "background_aqua", vec2(begin_x, 0));
Asset aquarium_middle_3_asset {"asset/background/aquarium/glassTubeFG_3_TVOS.png"};
aquarium_middle_3.add_component<Sprite>(
aquarium_middle_3_asset,
@@ -71,7 +71,7 @@ float AquariumSubScene::create(Scene & scn, float begin_x) {
this->add_background(scn, begin_x - 200);
GameObject aquarium_middle_4
- = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0));
+ = scn.new_object("aquarium_middle", "background_aqua", vec2(begin_x, 0));
Asset aquarium_middle_4_asset {"asset/background/aquarium/glassTubeFG_3_TVOS.png"};
aquarium_middle_4.add_component<Sprite>(
aquarium_middle_4_asset,
@@ -85,7 +85,8 @@ float AquariumSubScene::create(Scene & scn, float begin_x) {
this->add_background(scn, begin_x);
- GameObject aquarium_end = scn.new_object("aquarium_end", "background", vec2(begin_x, 0));
+ GameObject aquarium_end
+ = scn.new_object("aquarium_end", "background_aqua", vec2(begin_x, 0));
Asset aquarium_end_asset {"asset/background/aquarium/glassTubeFG_2_TVOS.png"};
aquarium_end.add_component<Sprite>(
aquarium_end_asset,
@@ -101,7 +102,7 @@ float AquariumSubScene::create(Scene & scn, float begin_x) {
}
void AquariumSubScene::add_background(Scene & scn, float begin_x) {
- GameObject bg_1 = scn.new_object("aquarium_bg_1", "aquarium_background", vec2(begin_x, 0));
+ GameObject bg_1 = scn.new_object("aquarium_bg_1", "background_aqua", vec2(begin_x, 0));
Asset bg_1_1_asset {"asset/background/aquarium/AquariumBG1_1_TVOS.png"};
bg_1.add_component<Sprite>(
bg_1_1_asset,
@@ -122,7 +123,7 @@ void AquariumSubScene::add_background(Scene & scn, float begin_x) {
.position_offset = vec2(200, 100),
}
);
- GameObject bg_2 = scn.new_object("aquarium_bg_2", "aquarium_background", vec2(begin_x, 0));
+ GameObject bg_2 = scn.new_object("aquarium_bg_2", "background_aqua", vec2(begin_x, 0));
Asset bg_2_1_asset {"asset/background/aquarium/AquariumBG2_1_TVOS.png"};
bg_2.add_component<Sprite>(
bg_2_1_asset,
@@ -143,7 +144,7 @@ void AquariumSubScene::add_background(Scene & scn, float begin_x) {
.position_offset = vec2(-200, -50),
}
);
- GameObject bg_3 = scn.new_object("aquarium_bg_3", "aquarium_background", vec2(begin_x, 0));
+ GameObject bg_3 = scn.new_object("aquarium_bg_3", "background_aqua", vec2(begin_x, 0));
Asset bg_3_1_asset {"asset/background/aquarium/AquariumBG3_1_TVOS.png"};
bg_3.add_component<Sprite>(
bg_3_1_asset,
diff --git a/game/background/BackgroundSubScene.cpp b/game/background/BackgroundSubScene.cpp
index 6fdc598..4bbd977 100644
--- a/game/background/BackgroundSubScene.cpp
+++ b/game/background/BackgroundSubScene.cpp
@@ -1,10 +1,14 @@
#include "BackgroundSubScene.h"
+#include "AquariumScript.h"
#include "AquariumSubScene.h"
#include "ForestSubScene.h"
+#include "HallwayScript.h"
#include "HallwaySubScene.h"
#include "StartSubScene.h"
+#include <crepe/api/BehaviorScript.h>
#include <crepe/api/Color.h>
+#include <crepe/api/Scene.h>
using namespace crepe;
using namespace std;
@@ -23,15 +27,11 @@ BackgroundSubScene::BackgroundSubScene(Scene & scn) {
begin_x = forest.create(scn, begin_x, "1");
- begin_x = hallway.create(scn, begin_x, 2, Color::MAGENTA);
+ begin_x += 3000;
begin_x = aquarium.create(scn, begin_x);
- begin_x = hallway.create(scn, begin_x, 3, Color::CYAN);
-
- begin_x = forest.create(scn, begin_x, "2");
-
- begin_x = hallway.create(scn, begin_x, 4, Color::GREEN);
-
- begin_x = aquarium.create(scn, begin_x);
+ GameObject scripts = scn.new_object("scrips_background", "background");
+ scripts.add_component<BehaviorScript>().set_script<HallwayScript>();
+ scripts.add_component<BehaviorScript>().set_script<AquariumScript>();
}
diff --git a/game/background/ForestParallaxScript.cpp b/game/background/ForestParallaxScript.cpp
index c72f85d..7470da2 100644
--- a/game/background/ForestParallaxScript.cpp
+++ b/game/background/ForestParallaxScript.cpp
@@ -1,5 +1,7 @@
#include "ForestParallaxScript.h"
+#include "../Config.h"
+
using namespace crepe;
using namespace std;
@@ -26,4 +28,28 @@ void ForestParallaxScript::fixed_update(crepe::duration_t dt) {
t.position.x = begin_x - 400;
}
}
+
+ //Move whole background 12000 to the right
+ Transform & trans_cam = this->get_components_by_name<Transform>("camera").front();
+
+ float cam_left_x = trans_cam.position.x - VIEWPORT_X / 2;
+
+ if (cam_left_x > this->start_x + this->lenght) {
+ //Move whole background 12000 to the right
+ RefVector<Transform> trans
+ = this->get_components_by_tag<Transform>("background_forest");
+ for (Transform & tran : trans) {
+ tran.position.x += 12000;
+ }
+ this->start_x += 12000;
+
+ RefVector<Transform> trans_back
+ = this->get_components_by_tag<Transform>("forest_background");
+ for (Transform & tran : trans_back) {
+ tran.position.x += 12000;
+ }
+
+ begin_x += 12000;
+ end_x += 12000;
+ }
}
diff --git a/game/background/ForestParallaxScript.h b/game/background/ForestParallaxScript.h
index a65a684..d45fdd9 100644
--- a/game/background/ForestParallaxScript.h
+++ b/game/background/ForestParallaxScript.h
@@ -9,7 +9,9 @@ public:
void fixed_update(crepe::duration_t dt);
private:
- const float begin_x;
- const float end_x;
+ float begin_x;
+ float end_x;
const std::string name;
+ float start_x = 4200;
+ const float lenght = 3000;
};
diff --git a/game/background/ForestSubScene.cpp b/game/background/ForestSubScene.cpp
index a807a36..83e48dd 100644
--- a/game/background/ForestSubScene.cpp
+++ b/game/background/ForestSubScene.cpp
@@ -15,14 +15,14 @@ using namespace crepe;
using namespace std;
float ForestSubScene::create(Scene & scn, float begin_x, std::string unique_bg_name) {
- GameObject script = scn.new_object("forest_script", "background");
+ GameObject script = scn.new_object("forest_script", "background_forest");
script.add_component<BehaviorScript>().set_script<ForestParallaxScript>(
begin_x - 400, begin_x + 3000 + 400, unique_bg_name
);
this->add_background(scn, begin_x, unique_bg_name);
- GameObject begin = scn.new_object("forest_begin", "background", vec2(begin_x, 0));
+ GameObject begin = scn.new_object("forest_begin", "background_forest", vec2(begin_x, 0));
Asset begin_asset {"asset/background/forest/forestFG_1_TVOS.png"};
begin.add_component<Sprite>(
begin_asset,
@@ -36,7 +36,8 @@ float ForestSubScene::create(Scene & scn, float begin_x, std::string unique_bg_n
this->add_background(scn, begin_x, unique_bg_name);
- GameObject middle_1 = scn.new_object("forest_middle", "background", vec2(begin_x, 0));
+ GameObject middle_1
+ = scn.new_object("forest_middle", "background_forest", vec2(begin_x, 0));
Asset middle_1_asset {"asset/background/forest/forestFG_3_TVOS.png"};
middle_1.add_component<Sprite>(
middle_1_asset,
@@ -50,7 +51,8 @@ float ForestSubScene::create(Scene & scn, float begin_x, std::string unique_bg_n
this->add_background(scn, begin_x, unique_bg_name);
- GameObject middle_2 = scn.new_object("forest_middle", "background", vec2(begin_x, 0));
+ GameObject middle_2
+ = scn.new_object("forest_middle", "background_forest", vec2(begin_x, 0));
Asset middle_2_asset {"asset/background/forest/forestFG_3_TVOS.png"};
middle_2.add_component<Sprite>(
middle_2_asset,
@@ -64,7 +66,7 @@ float ForestSubScene::create(Scene & scn, float begin_x, std::string unique_bg_n
this->add_background(scn, begin_x, unique_bg_name);
- GameObject end = scn.new_object("forest_end", "background", vec2(begin_x, 0));
+ GameObject end = scn.new_object("forest_end", "background_forest", vec2(begin_x, 0));
Asset end_asset {"asset/background/forest/forestFG_2_TVOS.png"};
end.add_component<Sprite>(
end_asset,
diff --git a/game/background/HallwayScript.cpp b/game/background/HallwayScript.cpp
new file mode 100644
index 0000000..a5bb94c
--- /dev/null
+++ b/game/background/HallwayScript.cpp
@@ -0,0 +1,70 @@
+#include "HallwayScript.h"
+
+#include "../Config.h"
+
+#include <crepe/api/Animator.h>
+#include <crepe/api/Sprite.h>
+#include <crepe/api/Transform.h>
+#include <crepe/types.h>
+
+using namespace crepe;
+using namespace std;
+
+void HallwayScript::fixed_update(crepe::duration_t dt) {
+ Transform & trans_cam = this->get_components_by_name<Transform>("camera").front();
+
+ float cam_left_x = trans_cam.position.x - VIEWPORT_X / 2;
+
+ if (cam_left_x > this->start_x + this->lenght) {
+ //Move whole background 6000 to the right
+ RefVector<Transform> trans = this->get_components_by_tag<Transform>("background_hall");
+ for (Transform & tran : trans) {
+ tran.position.x += 6000;
+ }
+ this->start_x += 6000;
+
+ //Change sector number
+ Animator & anim = this->get_components_by_name<Animator>("hallway_begin").front();
+ int column = (current_sector - 1) / 4;
+ int row = (current_sector - 1) % 4;
+ anim.set_anim(column);
+ for (int i = 0; i < row; i++) {
+ anim.next_anim();
+ }
+ RefVector<Sprite> sprites = this->get_components_by_name<Sprite>("hallway_begin");
+ switch (current_sector % 7) {
+ case 0:
+ sprites[1].get().data.color = Color::YELLOW;
+ sprites[2].get().data.color = Color::YELLOW;
+ break;
+ case 1:
+ sprites[1].get().data.color = Color::MAGENTA;
+ sprites[2].get().data.color = Color::MAGENTA;
+ break;
+ case 2:
+ sprites[1].get().data.color = Color::CYAN;
+ sprites[2].get().data.color = Color::CYAN;
+ break;
+ case 3:
+ sprites[1].get().data.color = Color::GREEN;
+ sprites[2].get().data.color = Color::GREEN;
+ break;
+ case 4:
+ sprites[1].get().data.color = Color::RED;
+ sprites[2].get().data.color = Color::RED;
+ break;
+ case 5:
+ sprites[1].get().data.color = Color::BLUE;
+ sprites[2].get().data.color = Color::BLUE;
+ break;
+ case 6:
+ sprites[1].get().data.color = Color::WHITE;
+ sprites[2].get().data.color = Color::WHITE;
+ break;
+ }
+ current_sector++;
+ if (current_sector > 16) {
+ current_sector = 1;
+ }
+ }
+}
diff --git a/game/background/HallwayScript.h b/game/background/HallwayScript.h
new file mode 100644
index 0000000..04b2933
--- /dev/null
+++ b/game/background/HallwayScript.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#include <crepe/api/Script.h>
+
+class HallwayScript : public crepe::Script {
+public:
+ void fixed_update(crepe::duration_t dt);
+
+private:
+ float start_x = 1200;
+ const float lenght = 3000;
+ int current_sector = 2;
+};
diff --git a/game/background/HallwaySubScene.cpp b/game/background/HallwaySubScene.cpp
index 4d96c94..31af2d5 100644
--- a/game/background/HallwaySubScene.cpp
+++ b/game/background/HallwaySubScene.cpp
@@ -14,7 +14,7 @@ using namespace std;
float HallwaySubScene::create(
Scene & scn, float begin_x, unsigned int sector_num, Color sector_color
) {
- GameObject begin = scn.new_object("hallway_begin", "background", vec2(begin_x, 0));
+ GameObject begin = scn.new_object("hallway_begin", "background_hall", vec2(begin_x, 0));
Asset begin_asset {"asset/background/hallway/hallway1FG_1_TVOS.png"};
begin.add_component<Sprite>(
begin_asset,
@@ -30,7 +30,8 @@ float HallwaySubScene::create(
this->add_lamp(begin, vec2(330, -120), 11);
this->add_lamp(begin, vec2(430, -120), 9);
- GameObject middle_1 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0));
+ GameObject middle_1
+ = scn.new_object("hallway_middle", "background_hall", vec2(begin_x, 0));
Asset middle_asset {"asset/background/hallway/hallway1FG_2_TVOS.png"};
middle_1.add_component<Sprite>(
middle_asset,
@@ -42,7 +43,8 @@ float HallwaySubScene::create(
);
begin_x += 600;
- GameObject middle_2 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0));
+ GameObject middle_2
+ = scn.new_object("hallway_middle", "background_hall", vec2(begin_x, 0));
Asset middle_asset_2 {"asset/background/hallway/hallway1FG_2_TVOS.png"};
middle_2.add_component<Sprite>(
middle_asset_2,
@@ -54,7 +56,8 @@ float HallwaySubScene::create(
);
begin_x += 200;
- GameObject middle_3 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0));
+ GameObject middle_3
+ = scn.new_object("hallway_middle", "background_hall", vec2(begin_x, 0));
Asset middle_asset_3 {"asset/background/hallway/hallway1FG_2_TVOS.png"};
middle_3.add_component<Sprite>(
middle_asset_3,
@@ -68,7 +71,8 @@ float HallwaySubScene::create(
this->add_lamp(middle_3, vec2(0, -120));
- GameObject middle_4 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0));
+ GameObject middle_4
+ = scn.new_object("hallway_middle", "background_hall", vec2(begin_x, 0));
Asset middle_asset_4 {"asset/background/hallway/hallway1FG_2_TVOS.png"};
middle_4.add_component<Sprite>(
middle_asset_4,
@@ -80,7 +84,7 @@ float HallwaySubScene::create(
);
begin_x += 600;
- GameObject end = scn.new_object("hallway_end", "background", vec2(begin_x, 0));
+ GameObject end = scn.new_object("hallway_end", "background_hall", vec2(begin_x, 0));
Asset end_asset {"asset/background/hallway/hallway1FG_1_TVOS.png"};
end.add_component<Sprite>(
end_asset,
diff --git a/game/workers/CollisionScript.cpp b/game/workers/CollisionScript.cpp
new file mode 100644
index 0000000..deaf0ee
--- /dev/null
+++ b/game/workers/CollisionScript.cpp
@@ -0,0 +1,68 @@
+#include "CollisionScript.h"
+
+#include <crepe/api/Animator.h>
+#include <crepe/api/BehaviorScript.h>
+#include <crepe/api/Rigidbody.h>
+#include <crepe/api/Sprite.h>
+#include <crepe/api/Transform.h>
+#include <crepe/types.h>
+
+using namespace crepe;
+using namespace std;
+
+void CollisionScript::init() {
+ subscribe<CollisionEvent>([this](const CollisionEvent & ev) -> bool {
+ return this->on_collision(ev);
+ });
+}
+
+bool CollisionScript::on_collision(const CollisionEvent & ev) {
+ RefVector<Animator> animators = this->get_components<Animator>();
+ RefVector<Sprite> sprites = this->get_components<Sprite>();
+ Rigidbody & rb = this->get_component<Rigidbody>();
+ Transform & tr = this->get_component<Transform>();
+ BehaviorScript & bs_panic = this->get_components<BehaviorScript>().front();
+
+ if (ev.info.other.metadata.tag == "zapper") {
+ for (Animator & anim : animators) {
+ anim.active = false;
+ anim.set_anim(3);
+ }
+ for (Sprite & sprite : sprites) {
+ sprite.data.position_offset.x = 15;
+ }
+ rb.data.linear_velocity_coefficient = {0.5, 0.5};
+ tr.rotation = 90;
+ bs_panic.active = false;
+
+ return false;
+ } else if (ev.info.other.metadata.tag == "laser") {
+ for (Animator & anim : animators) {
+ anim.active = false;
+ anim.set_anim(3);
+ }
+ for (Sprite & sprite : sprites) {
+ sprite.data.position_offset.x = 15;
+ }
+ rb.data.linear_velocity_coefficient = {0.5, 0.5};
+ tr.rotation = 90;
+ bs_panic.active = false;
+
+ return false;
+ } else if (ev.info.other.metadata.tag == "missile") {
+ for (Animator & anim : animators) {
+ anim.active = false;
+ anim.set_anim(3);
+ }
+ for (Sprite & sprite : sprites) {
+ sprite.data.position_offset.x = 15;
+ }
+ rb.data.linear_velocity_coefficient = {0.5, 0.5};
+ tr.rotation = 90;
+ bs_panic.active = false;
+
+ return false;
+ }
+
+ return false;
+}
diff --git a/game/workers/CollisionScript.h b/game/workers/CollisionScript.h
new file mode 100644
index 0000000..70c5fe1
--- /dev/null
+++ b/game/workers/CollisionScript.h
@@ -0,0 +1,12 @@
+#pragma once
+
+#include <crepe/api/Event.h>
+#include <crepe/api/Script.h>
+
+class CollisionScript : public crepe::Script {
+public:
+ void init();
+
+private:
+ bool on_collision(const crepe::CollisionEvent & ev);
+};
diff --git a/game/workers/PanicFromPlayerScript.cpp b/game/workers/PanicFromPlayerScript.cpp
index 1e49aaa..baa48df 100644
--- a/game/workers/PanicFromPlayerScript.cpp
+++ b/game/workers/PanicFromPlayerScript.cpp
@@ -32,11 +32,21 @@ void PanicFromPlayerScript::fixed_update(duration_t dt) {
}
if (result_x < 0) {
- rb_worker.data.linear_velocity.x = 10000 * dt.count();
+ float min_value = 8000;
+ float max_value = 10000;
+ float value = min_value
+ + static_cast<float>(rand())
+ / (static_cast<float>(RAND_MAX / (max_value - min_value)));
+ rb_worker.data.linear_velocity.x = value * dt.count();
sprite_worker.front().get().data.flip.flip_x = false;
sprite_worker.back().get().data.flip.flip_x = false;
} else {
- rb_worker.data.linear_velocity.x = -5000 * dt.count();
+ float min_value = -4000;
+ float max_value = -5000;
+ float value = min_value
+ + static_cast<float>(rand())
+ / (static_cast<float>(RAND_MAX / (max_value - min_value)));
+ rb_worker.data.linear_velocity.x = value * dt.count();
sprite_worker.front().get().data.flip.flip_x = true;
sprite_worker.back().get().data.flip.flip_x = true;
}
diff --git a/game/workers/WorkerScript.cpp b/game/workers/WorkerScript.cpp
index 1bcf8d5..b0bfc4e 100644
--- a/game/workers/WorkerScript.cpp
+++ b/game/workers/WorkerScript.cpp
@@ -1,6 +1,7 @@
#include "WorkerScript.h"
#include "../Config.h"
+#include "api/BehaviorScript.h"
#include <crepe/api/Animator.h>
#include <crepe/api/Rigidbody.h>
@@ -44,6 +45,9 @@ void WorkerScript::fixed_update(duration_t dt) {
= this->get_components_by_id<Sprite>(trans_worker.game_object_id);
RefVector<Animator> animator_worker
= this->get_components_by_id<Animator>(trans_worker.game_object_id);
+ BehaviorScript & bs_panic
+ = this->get_components_by_id<BehaviorScript>(trans_worker.game_object_id)
+ .front();
if (rb_worker.data.linear_velocity.x < 0) {
sprite_worker.front().get().data.flip.flip_x = true;
@@ -55,6 +59,8 @@ void WorkerScript::fixed_update(duration_t dt) {
= -rb_worker.data.linear_velocity.x / 5;
animator_worker.front().get().set_anim(0);
animator_worker.back().get().set_anim(0);
+ animator_worker.front().get().active = true;
+ animator_worker.back().get().active = true;
} else {
sprite_worker.front().get().data.flip.flip_x = false;
sprite_worker.back().get().data.flip.flip_x = false;
@@ -65,6 +71,15 @@ void WorkerScript::fixed_update(duration_t dt) {
= rb_worker.data.linear_velocity.x / 5;
animator_worker.front().get().set_anim(0);
animator_worker.back().get().set_anim(0);
+ animator_worker.front().get().active = true;
+ animator_worker.back().get().active = true;
+ }
+
+ trans_worker.rotation = 0;
+ bs_panic.active = true;
+ rb_worker.data.linear_velocity_coefficient = {1, 1};
+ for (Sprite & sprite : sprite_worker) {
+ sprite.data.position_offset.x = 0;
}
}
} else {
@@ -84,6 +99,9 @@ void WorkerScript::fixed_update(duration_t dt) {
= this->get_components_by_id<Sprite>(trans_worker.game_object_id);
RefVector<Animator> animator_worker
= this->get_components_by_id<Animator>(trans_worker.game_object_id);
+ BehaviorScript & bs_panic
+ = this->get_components_by_id<BehaviorScript>(trans_worker.game_object_id)
+ .front();
if (rb_worker.data.linear_velocity.x < 0) {
sprite_worker.front().get().data.flip.flip_x = true;
@@ -96,6 +114,8 @@ void WorkerScript::fixed_update(duration_t dt) {
animator_worker.front().get().set_anim(0);
animator_worker.back().get().set_anim(0);
+ animator_worker.front().get().active = true;
+ animator_worker.back().get().active = true;
} else {
sprite_worker.front().get().data.flip.flip_x = false;
sprite_worker.back().get().data.flip.flip_x = false;
@@ -107,6 +127,15 @@ void WorkerScript::fixed_update(duration_t dt) {
animator_worker.front().get().set_anim(0);
animator_worker.back().get().set_anim(0);
+ animator_worker.front().get().active = true;
+ animator_worker.back().get().active = true;
+ }
+
+ trans_worker.rotation = 0;
+ bs_panic.active = true;
+ rb_worker.data.linear_velocity_coefficient = {1, 1};
+ for (Sprite & sprite : sprite_worker) {
+ sprite.data.position_offset.x = 0;
}
}
}
diff --git a/game/workers/WorkersSubScene.cpp b/game/workers/WorkersSubScene.cpp
index e5b4678..54996d1 100644
--- a/game/workers/WorkersSubScene.cpp
+++ b/game/workers/WorkersSubScene.cpp
@@ -1,4 +1,5 @@
#include "WorkersSubScene.h"
+#include "CollisionScript.h"
#include "PanicFromPlayerScript.h"
#include "WorkerScript.h"
@@ -34,7 +35,7 @@ void WorkersSubScene::worker1(crepe::Scene & scn, float start_x, float init_spee
Sprite & worker_1_body_sprite = worker_1.add_component<Sprite>(
Asset {"asset/workers/worker1Body.png"},
Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_WORKERS,
+ .sorting_in_layer = SORT_IN_LAY_WORKERS_BACK,
.order_in_layer = 0,
.size = vec2(0, 50),
}
@@ -49,7 +50,7 @@ void WorkersSubScene::worker1(crepe::Scene & scn, float start_x, float init_spee
Sprite & worker_1_head_sprite = worker_1.add_component<Sprite>(
Asset {"asset/workers/worker1Head.png"},
Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_WORKERS,
+ .sorting_in_layer = SORT_IN_LAY_WORKERS_BACK,
.order_in_layer = 1,
.size = vec2(0, 50),
.position_offset = vec2(0, -20),
@@ -70,6 +71,7 @@ void WorkersSubScene::worker1(crepe::Scene & scn, float start_x, float init_spee
.collision_layers = {COLL_LAY_BOT_TOP},
});
worker_1.add_component<BehaviorScript>().set_script<PanicFromPlayerScript>();
+ worker_1.add_component<BehaviorScript>().set_script<CollisionScript>();
if (init_speed < 0) {
worker_1_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -82,7 +84,7 @@ void WorkersSubScene::worker2(crepe::Scene & scn, float start_x, float init_spee
Sprite & worker_2_body_sprite = worker_2.add_component<Sprite>(
Asset {"asset/workers/worker2Body.png"},
Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_WORKERS,
+ .sorting_in_layer = SORT_IN_LAY_WORKERS_FRONT,
.order_in_layer = 2,
.size = vec2(0, 50),
}
@@ -97,7 +99,7 @@ void WorkersSubScene::worker2(crepe::Scene & scn, float start_x, float init_spee
Sprite & worker_2_head_sprite = worker_2.add_component<Sprite>(
Asset {"asset/workers/worker1Head.png"},
Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_WORKERS,
+ .sorting_in_layer = SORT_IN_LAY_WORKERS_FRONT,
.order_in_layer = 3,
.size = vec2(0, 50),
.position_offset = vec2(0, -20),
@@ -118,6 +120,7 @@ void WorkersSubScene::worker2(crepe::Scene & scn, float start_x, float init_spee
.collision_layers = {COLL_LAY_BOT_TOP},
});
worker_2.add_component<BehaviorScript>().set_script<PanicFromPlayerScript>();
+ worker_2.add_component<BehaviorScript>().set_script<CollisionScript>();
if (init_speed < 0) {
worker_2_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -130,7 +133,7 @@ void WorkersSubScene::worker3(crepe::Scene & scn, float start_x, float init_spee
Sprite & worker_3_body_sprite = worker_3.add_component<Sprite>(
Asset {"asset/workers/worker1Body.png"},
Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_WORKERS,
+ .sorting_in_layer = SORT_IN_LAY_WORKERS_BACK,
.order_in_layer = 4,
.size = vec2(0, 50),
}
@@ -145,7 +148,7 @@ void WorkersSubScene::worker3(crepe::Scene & scn, float start_x, float init_spee
Sprite & worker_3_head_sprite = worker_3.add_component<Sprite>(
Asset {"asset/workers/worker2Head.png"},
Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_WORKERS,
+ .sorting_in_layer = SORT_IN_LAY_WORKERS_BACK,
.order_in_layer = 5,
.size = vec2(0, 50),
.position_offset = vec2(0, -20),
@@ -166,6 +169,7 @@ void WorkersSubScene::worker3(crepe::Scene & scn, float start_x, float init_spee
.collision_layers = {COLL_LAY_BOT_TOP},
});
worker_3.add_component<BehaviorScript>().set_script<PanicFromPlayerScript>();
+ worker_3.add_component<BehaviorScript>().set_script<CollisionScript>();
if (init_speed < 0) {
worker_3_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -178,7 +182,7 @@ void WorkersSubScene::worker4(crepe::Scene & scn, float start_x, float init_spee
Sprite & worker_4_body_sprite = worker_4.add_component<Sprite>(
Asset {"asset/workers/worker2Body.png"},
Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_WORKERS,
+ .sorting_in_layer = SORT_IN_LAY_WORKERS_FRONT,
.order_in_layer = 6,
.size = vec2(0, 50),
}
@@ -193,7 +197,7 @@ void WorkersSubScene::worker4(crepe::Scene & scn, float start_x, float init_spee
Sprite & worker_4_head_sprite = worker_4.add_component<Sprite>(
Asset {"asset/workers/worker2Head.png"},
Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_WORKERS,
+ .sorting_in_layer = SORT_IN_LAY_WORKERS_FRONT,
.order_in_layer = 7,
.size = vec2(0, 50),
.position_offset = vec2(0, -20),
@@ -214,6 +218,7 @@ void WorkersSubScene::worker4(crepe::Scene & scn, float start_x, float init_spee
.collision_layers = {COLL_LAY_BOT_HIGH},
});
worker_4.add_component<BehaviorScript>().set_script<PanicFromPlayerScript>();
+ worker_4.add_component<BehaviorScript>().set_script<CollisionScript>();
if (init_speed < 0) {
worker_4_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -226,7 +231,7 @@ void WorkersSubScene::worker5(crepe::Scene & scn, float start_x, float init_spee
Sprite & worker_5_body_sprite = worker_5.add_component<Sprite>(
Asset {"asset/workers/workerFatBody.png"},
Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_WORKERS,
+ .sorting_in_layer = SORT_IN_LAY_WORKERS_BACK,
.order_in_layer = 8,
.size = vec2(0, 50),
}
@@ -241,7 +246,7 @@ void WorkersSubScene::worker5(crepe::Scene & scn, float start_x, float init_spee
Sprite & worker_5_head_sprite = worker_5.add_component<Sprite>(
Asset {"asset/workers/worker1Head.png"},
Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_WORKERS,
+ .sorting_in_layer = SORT_IN_LAY_WORKERS_BACK,
.order_in_layer = 9,
.size = vec2(0, 50),
.position_offset = vec2(0, -20),
@@ -262,6 +267,7 @@ void WorkersSubScene::worker5(crepe::Scene & scn, float start_x, float init_spee
.collision_layers = {COLL_LAY_BOT_HIGH},
});
worker_5.add_component<BehaviorScript>().set_script<PanicFromPlayerScript>();
+ worker_5.add_component<BehaviorScript>().set_script<CollisionScript>();
if (init_speed < 0) {
worker_5_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -274,7 +280,7 @@ void WorkersSubScene::worker6(crepe::Scene & scn, float start_x, float init_spee
Sprite & worker_6_body_sprite = worker_6.add_component<Sprite>(
Asset {"asset/workers/workerFatBody.png"},
Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_WORKERS,
+ .sorting_in_layer = SORT_IN_LAY_WORKERS_FRONT,
.order_in_layer = 10,
.size = vec2(0, 50),
}
@@ -289,7 +295,7 @@ void WorkersSubScene::worker6(crepe::Scene & scn, float start_x, float init_spee
Sprite & worker_6_head_sprite = worker_6.add_component<Sprite>(
Asset {"asset/workers/worker2Head.png"},
Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_WORKERS,
+ .sorting_in_layer = SORT_IN_LAY_WORKERS_FRONT,
.order_in_layer = 11,
.size = vec2(0, 50),
.position_offset = vec2(0, -20),
@@ -310,6 +316,7 @@ void WorkersSubScene::worker6(crepe::Scene & scn, float start_x, float init_spee
.collision_layers = {COLL_LAY_BOT_LOW},
});
worker_6.add_component<BehaviorScript>().set_script<PanicFromPlayerScript>();
+ worker_6.add_component<BehaviorScript>().set_script<CollisionScript>();
if (init_speed < 0) {
worker_6_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -322,7 +329,7 @@ void WorkersSubScene::worker7(crepe::Scene & scn, float start_x, float init_spee
Sprite & worker_7_body_sprite = worker_7.add_component<Sprite>(
Asset {"asset/workers/workerTallBody.png"},
Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_WORKERS,
+ .sorting_in_layer = SORT_IN_LAY_WORKERS_BACK,
.order_in_layer = 12,
.size = vec2(0, 50),
}
@@ -337,7 +344,7 @@ void WorkersSubScene::worker7(crepe::Scene & scn, float start_x, float init_spee
Sprite & worker_7_head_sprite = worker_7.add_component<Sprite>(
Asset {"asset/workers/worker1Head.png"},
Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_WORKERS,
+ .sorting_in_layer = SORT_IN_LAY_WORKERS_BACK,
.order_in_layer = 13,
.size = vec2(0, 50),
.position_offset = vec2(0, -20),
@@ -358,6 +365,7 @@ void WorkersSubScene::worker7(crepe::Scene & scn, float start_x, float init_spee
.collision_layers = {COLL_LAY_BOT_LOW},
});
worker_7.add_component<BehaviorScript>().set_script<PanicFromPlayerScript>();
+ worker_7.add_component<BehaviorScript>().set_script<CollisionScript>();
if (init_speed < 0) {
worker_7_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -370,7 +378,7 @@ void WorkersSubScene::worker8(crepe::Scene & scn, float start_x, float init_spee
Sprite & worker_8_body_sprite = worker_8.add_component<Sprite>(
Asset {"asset/workers/workerTallBody.png"},
Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_WORKERS,
+ .sorting_in_layer = SORT_IN_LAY_WORKERS_FRONT,
.order_in_layer = 14,
.size = vec2(0, 50),
}
@@ -385,7 +393,7 @@ void WorkersSubScene::worker8(crepe::Scene & scn, float start_x, float init_spee
Sprite & worker_8_head_sprite = worker_8.add_component<Sprite>(
Asset {"asset/workers/worker2Head.png"},
Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_WORKERS,
+ .sorting_in_layer = SORT_IN_LAY_WORKERS_FRONT,
.order_in_layer = 15,
.size = vec2(0, 50),
.position_offset = vec2(0, -20),
@@ -406,6 +414,7 @@ void WorkersSubScene::worker8(crepe::Scene & scn, float start_x, float init_spee
.collision_layers = {COLL_LAY_BOT_LOW},
});
worker_8.add_component<BehaviorScript>().set_script<PanicFromPlayerScript>();
+ worker_8.add_component<BehaviorScript>().set_script<CollisionScript>();
if (init_speed < 0) {
worker_8_body_sprite.data.flip = Sprite::FlipSettings {true, false};