From 80fc064c77bb61d9b329b58532c9cacd99038e0a Mon Sep 17 00:00:00 2001
From: Max-001 <maxsmits21@kpnmail.nl>
Date: Tue, 7 Jan 2025 13:21:09 +0100
Subject: First setup for NPCs

---
 game/workers/WorkerScript.cpp    | 106 ++++++++++
 game/workers/WorkerScript.h      |   8 +
 game/workers/WorkersSubScene.cpp | 405 +++++++++++++++++++++++++++++++++++++++
 game/workers/WorkersSubScene.h   |  20 ++
 4 files changed, 539 insertions(+)
 create mode 100644 game/workers/WorkerScript.cpp
 create mode 100644 game/workers/WorkerScript.h
 create mode 100644 game/workers/WorkersSubScene.cpp
 create mode 100644 game/workers/WorkersSubScene.h

(limited to 'game/workers')

diff --git a/game/workers/WorkerScript.cpp b/game/workers/WorkerScript.cpp
new file mode 100644
index 0000000..d641c6a
--- /dev/null
+++ b/game/workers/WorkerScript.cpp
@@ -0,0 +1,106 @@
+#include "WorkerScript.h"
+
+#include "../Config.h"
+
+#include <crepe/api/Animator.h>
+#include <crepe/api/Rigidbody.h>
+#include <crepe/api/Sprite.h>
+#include <crepe/api/Transform.h>
+#include <crepe/types.h>
+#include <cstdlib>
+
+using namespace crepe;
+using namespace std;
+
+void WorkerScript::fixed_update(duration_t dt) {
+	RefVector<Rigidbody> rb_workers = this->get_components_by_tag<Rigidbody>("worker");
+	RefVector<Transform> trans_workers = this->get_components_by_tag<Transform>("worker");
+
+	Rigidbody & rb_cam = this->get_components_by_name<Rigidbody>("camera").back();
+	Transform & trans_cam = this->get_components_by_name<Transform>("camera").back();
+
+	int counter = 0;
+	for (Rigidbody & rb_worker : rb_workers) {
+		Transform & trans_worker = trans_workers.at(counter);
+
+		float result_x = rb_cam.data.linear_velocity.x - rb_worker.data.linear_velocity.x;
+
+		if (result_x > 0) {
+			float left_cam_pos_x = trans_cam.position.x - VIEWPORT_X / 2;
+			if (trans_worker.position.x < left_cam_pos_x - 1000) {
+				trans_worker.position.x = left_cam_pos_x + VIEWPORT_X + 1000;
+
+				do {
+					float min_value = -2500 * dt.count();
+					float max_value = 2500 * dt.count();
+					rb_worker.data.linear_velocity.x
+						= min_value
+						  + static_cast<float>(rand())
+								/ (static_cast<float>(RAND_MAX / (max_value - min_value)));
+				} while (rb_worker.data.linear_velocity.x < 500 * dt.count()
+						 && rb_worker.data.linear_velocity.x > -500 * dt.count());
+
+				RefVector<Sprite> sprite_worker
+					= 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);
+
+				if (rb_worker.data.linear_velocity.x < 0) {
+					sprite_worker.front().get().data.flip.flip_x = true;
+					sprite_worker.back().get().data.flip.flip_x = true;
+
+					animator_worker.front().get().data.fps
+						= -rb_worker.data.linear_velocity.x / 5;
+					animator_worker.back().get().data.fps
+						= -rb_worker.data.linear_velocity.x / 5;
+				} else {
+					sprite_worker.front().get().data.flip.flip_x = false;
+					sprite_worker.back().get().data.flip.flip_x = false;
+
+					animator_worker.front().get().data.fps
+						= rb_worker.data.linear_velocity.x / 5;
+					animator_worker.back().get().data.fps
+						= rb_worker.data.linear_velocity.x / 5;
+				}
+			}
+		} else {
+			float right_cam_pos_x = trans_cam.position.x + VIEWPORT_X / 2;
+			if (trans_worker.position.x > right_cam_pos_x + 1000) {
+				do {
+					float min_value = -2500 * dt.count();
+					float max_value = 2500 * dt.count();
+					rb_worker.data.linear_velocity.x
+						= min_value
+						  + static_cast<float>(rand())
+								/ (static_cast<float>(RAND_MAX / (max_value - min_value)));
+				} while (rb_worker.data.linear_velocity.x < 500 * dt.count()
+						 && rb_worker.data.linear_velocity.x > -500 * dt.count());
+
+				RefVector<Sprite> sprite_worker
+					= 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);
+
+				if (rb_worker.data.linear_velocity.x < 0) {
+					sprite_worker.front().get().data.flip.flip_x = true;
+					sprite_worker.back().get().data.flip.flip_x = true;
+
+					animator_worker.front().get().data.fps
+						= -rb_worker.data.linear_velocity.x / 5;
+					animator_worker.back().get().data.fps
+						= -rb_worker.data.linear_velocity.x / 5;
+				} else {
+					sprite_worker.front().get().data.flip.flip_x = false;
+					sprite_worker.back().get().data.flip.flip_x = false;
+
+					animator_worker.front().get().data.fps
+						= rb_worker.data.linear_velocity.x / 5;
+					animator_worker.back().get().data.fps
+						= rb_worker.data.linear_velocity.x / 5;
+				}
+			}
+		}
+
+		counter++;
+	}
+}
diff --git a/game/workers/WorkerScript.h b/game/workers/WorkerScript.h
new file mode 100644
index 0000000..ae4a6c7
--- /dev/null
+++ b/game/workers/WorkerScript.h
@@ -0,0 +1,8 @@
+#pragma once
+
+#include <crepe/api/Script.h>
+
+class WorkerScript : public crepe::Script {
+public:
+	void fixed_update(crepe::duration_t dt);
+};
diff --git a/game/workers/WorkersSubScene.cpp b/game/workers/WorkersSubScene.cpp
new file mode 100644
index 0000000..94d9848
--- /dev/null
+++ b/game/workers/WorkersSubScene.cpp
@@ -0,0 +1,405 @@
+#include "WorkersSubScene.h"
+#include "WorkerScript.h"
+
+#include "../Config.h"
+#include "api/GameObject.h"
+
+#include <crepe/api/Animator.h>
+#include <crepe/api/BehaviorScript.h>
+#include <crepe/api/BoxCollider.h>
+#include <crepe/api/Rigidbody.h>
+#include <crepe/api/Scene.h>
+#include <crepe/api/Sprite.h>
+
+using namespace crepe;
+using namespace std;
+
+WorkersSubScene::WorkersSubScene(Scene & scn) {
+	this->worker1(scn, 1200, -50);
+	this->worker2(scn, 1300, 20);
+	this->worker3(scn, 1400, -40);
+	this->worker4(scn, 7250, 50);
+	this->worker5(scn, 3400, -20);
+	this->worker6(scn, 2000, 30);
+	this->worker7(scn, 3725, 35);
+	this->worker8(scn, 2200, -15);
+
+	GameObject script = scn.new_object("workers_script");
+	script.add_component<BehaviorScript>().set_script<WorkerScript>();
+}
+
+void WorkersSubScene::worker1(crepe::Scene & scn, float start_x, float init_speed) {
+	GameObject worker_1 = scn.new_object("worker_1", "worker", vec2(start_x, 200));
+	Sprite & worker_1_body_sprite = worker_1.add_component<Sprite>(
+		Asset {"asset/workers/worker1Body.png"},
+		Sprite::Data {
+			.sorting_in_layer = SORT_IN_LAY_WORKERS,
+			.order_in_layer = 0,
+			.size = vec2(0, 50),
+		}
+	);
+	worker_1.add_component<Animator>(
+		worker_1_body_sprite, ivec2(32, 32), uvec2(4, 8),
+		Animator::Data {
+			.fps = static_cast<unsigned int>(abs(init_speed) / 5),
+			.looping = true,
+		}
+	);
+	Sprite & worker_1_head_sprite = worker_1.add_component<Sprite>(
+		Asset {"asset/workers/worker1Head.png"},
+		Sprite::Data {
+			.sorting_in_layer = SORT_IN_LAY_WORKERS,
+			.order_in_layer = 1,
+			.size = vec2(0, 50),
+			.position_offset = vec2(0, -20),
+		}
+	);
+	worker_1.add_component<Animator>(
+		worker_1_head_sprite, ivec2(32, 32), uvec2(4, 8),
+		Animator::Data {
+			.fps = static_cast<unsigned int>(abs(init_speed) / 5),
+			.looping = true,
+		}
+	);
+	worker_1.add_component<BoxCollider>(vec2(50, 50));
+	worker_1.add_component<Rigidbody>(Rigidbody::Data {
+		.gravity_scale = 20,
+		.body_type = Rigidbody::BodyType::DYNAMIC,
+		.linear_velocity = vec2(init_speed, 0),
+		.collision_layers = {COLL_LAY_BOT_TOP},
+	});
+
+	if (init_speed < 0) {
+		worker_1_body_sprite.data.flip = Sprite::FlipSettings {true, false};
+		worker_1_head_sprite.data.flip = Sprite::FlipSettings {true, false};
+	}
+}
+
+void WorkersSubScene::worker2(crepe::Scene & scn, float start_x, float init_speed) {
+	GameObject worker_2 = scn.new_object("worker_2", "worker", vec2(start_x, 200));
+	Sprite & worker_2_body_sprite = worker_2.add_component<Sprite>(
+		Asset {"asset/workers/worker2Body.png"},
+		Sprite::Data {
+			.sorting_in_layer = SORT_IN_LAY_WORKERS,
+			.order_in_layer = 2,
+			.size = vec2(0, 50),
+		}
+	);
+	worker_2.add_component<Animator>(
+		worker_2_body_sprite, ivec2(32, 32), uvec2(4, 8),
+		Animator::Data {
+			.fps = static_cast<unsigned int>(abs(init_speed) / 5),
+			.looping = true,
+		}
+	);
+	Sprite & worker_2_head_sprite = worker_2.add_component<Sprite>(
+		Asset {"asset/workers/worker1Head.png"},
+		Sprite::Data {
+			.sorting_in_layer = SORT_IN_LAY_WORKERS,
+			.order_in_layer = 3,
+			.size = vec2(0, 50),
+			.position_offset = vec2(0, -20),
+		}
+	);
+	worker_2.add_component<Animator>(
+		worker_2_head_sprite, ivec2(32, 32), uvec2(4, 8),
+		Animator::Data {
+			.fps = static_cast<unsigned int>(abs(init_speed) / 5),
+			.looping = true,
+		}
+	);
+	worker_2.add_component<BoxCollider>(vec2(50, 50));
+	worker_2.add_component<Rigidbody>(Rigidbody::Data {
+		.gravity_scale = 20,
+		.body_type = Rigidbody::BodyType::DYNAMIC,
+		.linear_velocity = vec2(init_speed, 0),
+		.collision_layers = {COLL_LAY_BOT_TOP},
+	});
+
+	if (init_speed < 0) {
+		worker_2_body_sprite.data.flip = Sprite::FlipSettings {true, false};
+		worker_2_head_sprite.data.flip = Sprite::FlipSettings {true, false};
+	}
+}
+
+void WorkersSubScene::worker3(crepe::Scene & scn, float start_x, float init_speed) {
+	GameObject worker_3 = scn.new_object("worker_3", "worker", vec2(start_x, 200));
+	Sprite & worker_3_body_sprite = worker_3.add_component<Sprite>(
+		Asset {"asset/workers/worker1Body.png"},
+		Sprite::Data {
+			.sorting_in_layer = SORT_IN_LAY_WORKERS,
+			.order_in_layer = 4,
+			.size = vec2(0, 50),
+		}
+	);
+	worker_3.add_component<Animator>(
+		worker_3_body_sprite, ivec2(32, 32), uvec2(4, 8),
+		Animator::Data {
+			.fps = static_cast<unsigned int>(abs(init_speed) / 5),
+			.looping = true,
+		}
+	);
+	Sprite & worker_3_head_sprite = worker_3.add_component<Sprite>(
+		Asset {"asset/workers/worker2Head.png"},
+		Sprite::Data {
+			.sorting_in_layer = SORT_IN_LAY_WORKERS,
+			.order_in_layer = 5,
+			.size = vec2(0, 50),
+			.position_offset = vec2(0, -20),
+		}
+	);
+	worker_3.add_component<Animator>(
+		worker_3_head_sprite, ivec2(32, 32), uvec2(4, 8),
+		Animator::Data {
+			.fps = static_cast<unsigned int>(abs(init_speed) / 5),
+			.looping = true,
+		}
+	);
+	worker_3.add_component<BoxCollider>(vec2(50, 50));
+	worker_3.add_component<Rigidbody>(Rigidbody::Data {
+		.gravity_scale = 20,
+		.body_type = Rigidbody::BodyType::DYNAMIC,
+		.linear_velocity = vec2(init_speed, 0),
+		.collision_layers = {COLL_LAY_BOT_TOP},
+	});
+
+	if (init_speed < 0) {
+		worker_3_body_sprite.data.flip = Sprite::FlipSettings {true, false};
+		worker_3_head_sprite.data.flip = Sprite::FlipSettings {true, false};
+	}
+}
+
+void WorkersSubScene::worker4(crepe::Scene & scn, float start_x, float init_speed) {
+	GameObject worker_4 = scn.new_object("worker_4", "worker", vec2(start_x, 200));
+	Sprite & worker_4_body_sprite = worker_4.add_component<Sprite>(
+		Asset {"asset/workers/worker2Body.png"},
+		Sprite::Data {
+			.sorting_in_layer = SORT_IN_LAY_WORKERS,
+			.order_in_layer = 6,
+			.size = vec2(0, 50),
+		}
+	);
+	worker_4.add_component<Animator>(
+		worker_4_body_sprite, ivec2(32, 32), uvec2(4, 8),
+		Animator::Data {
+			.fps = static_cast<unsigned int>(abs(init_speed) / 5),
+			.looping = true,
+		}
+	);
+	Sprite & worker_4_head_sprite = worker_4.add_component<Sprite>(
+		Asset {"asset/workers/worker2Head.png"},
+		Sprite::Data {
+			.sorting_in_layer = SORT_IN_LAY_WORKERS,
+			.order_in_layer = 7,
+			.size = vec2(0, 50),
+			.position_offset = vec2(0, -20),
+		}
+	);
+	worker_4.add_component<Animator>(
+		worker_4_head_sprite, ivec2(32, 32), uvec2(4, 8),
+		Animator::Data {
+			.fps = static_cast<unsigned int>(abs(init_speed) / 5),
+			.looping = true,
+		}
+	);
+	worker_4.add_component<BoxCollider>(vec2(50, 50));
+	worker_4.add_component<Rigidbody>(Rigidbody::Data {
+		.gravity_scale = 20,
+		.body_type = Rigidbody::BodyType::DYNAMIC,
+		.linear_velocity = vec2(init_speed, 0),
+		.collision_layers = {COLL_LAY_BOT_HIGH},
+	});
+
+	if (init_speed < 0) {
+		worker_4_body_sprite.data.flip = Sprite::FlipSettings {true, false};
+		worker_4_head_sprite.data.flip = Sprite::FlipSettings {true, false};
+	}
+}
+
+void WorkersSubScene::worker5(crepe::Scene & scn, float start_x, float init_speed) {
+	GameObject worker_5 = scn.new_object("worker_5", "worker", vec2(start_x, 200));
+	Sprite & worker_5_body_sprite = worker_5.add_component<Sprite>(
+		Asset {"asset/workers/workerFatBody.png"},
+		Sprite::Data {
+			.sorting_in_layer = SORT_IN_LAY_WORKERS,
+			.order_in_layer = 8,
+			.size = vec2(0, 50),
+		}
+	);
+	worker_5.add_component<Animator>(
+		worker_5_body_sprite, ivec2(32, 32), uvec2(4, 8),
+		Animator::Data {
+			.fps = static_cast<unsigned int>(abs(init_speed) / 5),
+			.looping = true,
+		}
+	);
+	Sprite & worker_5_head_sprite = worker_5.add_component<Sprite>(
+		Asset {"asset/workers/worker1Head.png"},
+		Sprite::Data {
+			.sorting_in_layer = SORT_IN_LAY_WORKERS,
+			.order_in_layer = 9,
+			.size = vec2(0, 50),
+			.position_offset = vec2(0, -20),
+		}
+	);
+	worker_5.add_component<Animator>(
+		worker_5_head_sprite, ivec2(32, 32), uvec2(4, 8),
+		Animator::Data {
+			.fps = static_cast<unsigned int>(abs(init_speed) / 5),
+			.looping = true,
+		}
+	);
+	worker_5.add_component<BoxCollider>(vec2(50, 50));
+	worker_5.add_component<Rigidbody>(Rigidbody::Data {
+		.gravity_scale = 20,
+		.body_type = Rigidbody::BodyType::DYNAMIC,
+		.linear_velocity = vec2(init_speed, 0),
+		.collision_layers = {COLL_LAY_BOT_HIGH},
+	});
+
+	if (init_speed < 0) {
+		worker_5_body_sprite.data.flip = Sprite::FlipSettings {true, false};
+		worker_5_head_sprite.data.flip = Sprite::FlipSettings {true, false};
+	}
+}
+
+void WorkersSubScene::worker6(crepe::Scene & scn, float start_x, float init_speed) {
+	GameObject worker_6 = scn.new_object("worker_6", "worker", vec2(start_x, 200));
+	Sprite & worker_6_body_sprite = worker_6.add_component<Sprite>(
+		Asset {"asset/workers/workerFatBody.png"},
+		Sprite::Data {
+			.sorting_in_layer = SORT_IN_LAY_WORKERS,
+			.order_in_layer = 10,
+			.size = vec2(0, 50),
+		}
+	);
+	worker_6.add_component<Animator>(
+		worker_6_body_sprite, ivec2(32, 32), uvec2(4, 8),
+		Animator::Data {
+			.fps = static_cast<unsigned int>(abs(init_speed) / 5),
+			.looping = true,
+		}
+	);
+	Sprite & worker_6_head_sprite = worker_6.add_component<Sprite>(
+		Asset {"asset/workers/worker2Head.png"},
+		Sprite::Data {
+			.sorting_in_layer = SORT_IN_LAY_WORKERS,
+			.order_in_layer = 11,
+			.size = vec2(0, 50),
+			.position_offset = vec2(0, -20),
+		}
+	);
+	worker_6.add_component<Animator>(
+		worker_6_head_sprite, ivec2(32, 32), uvec2(4, 8),
+		Animator::Data {
+			.fps = static_cast<unsigned int>(abs(init_speed) / 5),
+			.looping = true,
+		}
+	);
+	worker_6.add_component<BoxCollider>(vec2(50, 50));
+	worker_6.add_component<Rigidbody>(Rigidbody::Data {
+		.gravity_scale = 20,
+		.body_type = Rigidbody::BodyType::DYNAMIC,
+		.linear_velocity = vec2(init_speed, 0),
+		.collision_layers = {COLL_LAY_BOT_LOW},
+	});
+
+	if (init_speed < 0) {
+		worker_6_body_sprite.data.flip = Sprite::FlipSettings {true, false};
+		worker_6_head_sprite.data.flip = Sprite::FlipSettings {true, false};
+	}
+}
+
+void WorkersSubScene::worker7(crepe::Scene & scn, float start_x, float init_speed) {
+	GameObject worker_7 = scn.new_object("worker_7", "worker", vec2(start_x, 200));
+	Sprite & worker_7_body_sprite = worker_7.add_component<Sprite>(
+		Asset {"asset/workers/workerTallBody.png"},
+		Sprite::Data {
+			.sorting_in_layer = SORT_IN_LAY_WORKERS,
+			.order_in_layer = 12,
+			.size = vec2(0, 50),
+		}
+	);
+	worker_7.add_component<Animator>(
+		worker_7_body_sprite, ivec2(32, 32), uvec2(4, 8),
+		Animator::Data {
+			.fps = static_cast<unsigned int>(abs(init_speed) / 5),
+			.looping = true,
+		}
+	);
+	Sprite & worker_7_head_sprite = worker_7.add_component<Sprite>(
+		Asset {"asset/workers/worker1Head.png"},
+		Sprite::Data {
+			.sorting_in_layer = SORT_IN_LAY_WORKERS,
+			.order_in_layer = 13,
+			.size = vec2(0, 50),
+			.position_offset = vec2(0, -20),
+		}
+	);
+	worker_7.add_component<Animator>(
+		worker_7_head_sprite, ivec2(32, 32), uvec2(4, 8),
+		Animator::Data {
+			.fps = static_cast<unsigned int>(abs(init_speed) / 5),
+			.looping = true,
+		}
+	);
+	worker_7.add_component<BoxCollider>(vec2(50, 50));
+	worker_7.add_component<Rigidbody>(Rigidbody::Data {
+		.gravity_scale = 20,
+		.body_type = Rigidbody::BodyType::DYNAMIC,
+		.linear_velocity = vec2(init_speed, 0),
+		.collision_layers = {COLL_LAY_BOT_LOW},
+	});
+
+	if (init_speed < 0) {
+		worker_7_body_sprite.data.flip = Sprite::FlipSettings {true, false};
+		worker_7_head_sprite.data.flip = Sprite::FlipSettings {true, false};
+	}
+}
+
+void WorkersSubScene::worker8(crepe::Scene & scn, float start_x, float init_speed) {
+	GameObject worker_8 = scn.new_object("worker_8", "worker", vec2(start_x, 200));
+	Sprite & worker_8_body_sprite = worker_8.add_component<Sprite>(
+		Asset {"asset/workers/workerTallBody.png"},
+		Sprite::Data {
+			.sorting_in_layer = SORT_IN_LAY_WORKERS,
+			.order_in_layer = 14,
+			.size = vec2(0, 50),
+		}
+	);
+	worker_8.add_component<Animator>(
+		worker_8_body_sprite, ivec2(32, 32), uvec2(4, 8),
+		Animator::Data {
+			.fps = static_cast<unsigned int>(abs(init_speed) / 5),
+			.looping = true,
+		}
+	);
+	Sprite & worker_8_head_sprite = worker_8.add_component<Sprite>(
+		Asset {"asset/workers/worker2Head.png"},
+		Sprite::Data {
+			.sorting_in_layer = SORT_IN_LAY_WORKERS,
+			.order_in_layer = 15,
+			.size = vec2(0, 50),
+			.position_offset = vec2(0, -20),
+		}
+	);
+	worker_8.add_component<Animator>(
+		worker_8_head_sprite, ivec2(32, 32), uvec2(4, 8),
+		Animator::Data {
+			.fps = static_cast<unsigned int>(abs(init_speed) / 5),
+			.looping = true,
+		}
+	);
+	worker_8.add_component<BoxCollider>(vec2(50, 50));
+	worker_8.add_component<Rigidbody>(Rigidbody::Data {
+		.gravity_scale = 20,
+		.body_type = Rigidbody::BodyType::DYNAMIC,
+		.linear_velocity = vec2(init_speed, 0),
+		.collision_layers = {COLL_LAY_BOT_LOW},
+	});
+
+	if (init_speed < 0) {
+		worker_8_body_sprite.data.flip = Sprite::FlipSettings {true, false};
+		worker_8_head_sprite.data.flip = Sprite::FlipSettings {true, false};
+	}
+}
diff --git a/game/workers/WorkersSubScene.h b/game/workers/WorkersSubScene.h
new file mode 100644
index 0000000..6692d87
--- /dev/null
+++ b/game/workers/WorkersSubScene.h
@@ -0,0 +1,20 @@
+#pragma once
+
+namespace crepe {
+class Scene;
+}
+
+class WorkersSubScene {
+public:
+	WorkersSubScene(crepe::Scene & scn);
+
+private:
+	void worker1(crepe::Scene & scn, float start_x, float init_speed);
+	void worker2(crepe::Scene & scn, float start_x, float init_speed);
+	void worker3(crepe::Scene & scn, float start_x, float init_speed);
+	void worker4(crepe::Scene & scn, float start_x, float init_speed);
+	void worker5(crepe::Scene & scn, float start_x, float init_speed);
+	void worker6(crepe::Scene & scn, float start_x, float init_speed);
+	void worker7(crepe::Scene & scn, float start_x, float init_speed);
+	void worker8(crepe::Scene & scn, float start_x, float init_speed);
+};
-- 
cgit v1.2.3


From 1f0edff951e7580163d8c987d4a021b24d45e9f1 Mon Sep 17 00:00:00 2001
From: Max-001 <maxsmits21@kpnmail.nl>
Date: Tue, 7 Jan 2025 14:34:12 +0100
Subject: Added panic from player

---
 game/CMakeLists.txt              |  1 +
 game/workers/PanicFromPlayer.cpp | 45 ++++++++++++++++++++++++++++++++++++++++
 game/workers/PanicFromPlayer.h   |  8 +++++++
 game/workers/WorkerScript.cpp    | 10 +++++++++
 game/workers/WorkersSubScene.cpp |  9 ++++++++
 5 files changed, 73 insertions(+)
 create mode 100644 game/workers/PanicFromPlayer.cpp
 create mode 100644 game/workers/PanicFromPlayer.h

(limited to 'game/workers')

diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt
index 8a63bd0..dc6a3fd 100644
--- a/game/CMakeLists.txt
+++ b/game/CMakeLists.txt
@@ -24,6 +24,7 @@ add_executable(main
 	background/StartSubScene.cpp
 	workers/WorkersSubScene.cpp
 	workers/WorkerScript.cpp
+	workers/PanicFromPlayer.cpp
 	main.cpp
 )
 
diff --git a/game/workers/PanicFromPlayer.cpp b/game/workers/PanicFromPlayer.cpp
new file mode 100644
index 0000000..fbf4611
--- /dev/null
+++ b/game/workers/PanicFromPlayer.cpp
@@ -0,0 +1,45 @@
+#include "PanicFromPlayer.h"
+
+#include <crepe/api/Animator.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 PanicFromPlayer::fixed_update(duration_t dt) {
+	Animator & anim_player = this->get_components_by_name<Animator>("player").front();
+
+	if (anim_player.data.col == 1) {
+		Transform & trans_player = this->get_components_by_name<Transform>("player").back();
+		Transform & trans_worker = this->get_components<Transform>().back();
+
+		float result_x = trans_player.position.x - trans_worker.position.x;
+
+		if (result_x < 100 && result_x > -20) {
+			RefVector<Animator> anim_worker = this->get_components<Animator>();
+			RefVector<Sprite> sprite_worker = this->get_components<Sprite>();
+			Rigidbody & rb_worker = this->get_components<Rigidbody>().back();
+
+			if (anim_worker.front().get().data.col != 1) {
+				anim_worker.front().get().set_anim(1);
+				anim_worker.back().get().set_anim(1);
+
+				anim_worker.front().get().data.fps = 10;
+				anim_worker.back().get().data.fps = 10;
+			}
+
+			if (result_x < 0) {
+				rb_worker.data.linear_velocity.x = 10000 * 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();
+				sprite_worker.front().get().data.flip.flip_x = true;
+				sprite_worker.back().get().data.flip.flip_x = true;
+			}
+		}
+	}
+};
diff --git a/game/workers/PanicFromPlayer.h b/game/workers/PanicFromPlayer.h
new file mode 100644
index 0000000..804df5c
--- /dev/null
+++ b/game/workers/PanicFromPlayer.h
@@ -0,0 +1,8 @@
+#pragma once
+
+#include <crepe/api/Script.h>
+
+class PanicFromPlayer : public crepe::Script {
+public:
+	void fixed_update(crepe::duration_t dt);
+};
diff --git a/game/workers/WorkerScript.cpp b/game/workers/WorkerScript.cpp
index d641c6a..1bcf8d5 100644
--- a/game/workers/WorkerScript.cpp
+++ b/game/workers/WorkerScript.cpp
@@ -53,6 +53,8 @@ void WorkerScript::fixed_update(duration_t dt) {
 						= -rb_worker.data.linear_velocity.x / 5;
 					animator_worker.back().get().data.fps
 						= -rb_worker.data.linear_velocity.x / 5;
+					animator_worker.front().get().set_anim(0);
+					animator_worker.back().get().set_anim(0);
 				} else {
 					sprite_worker.front().get().data.flip.flip_x = false;
 					sprite_worker.back().get().data.flip.flip_x = false;
@@ -61,6 +63,8 @@ void WorkerScript::fixed_update(duration_t dt) {
 						= rb_worker.data.linear_velocity.x / 5;
 					animator_worker.back().get().data.fps
 						= rb_worker.data.linear_velocity.x / 5;
+					animator_worker.front().get().set_anim(0);
+					animator_worker.back().get().set_anim(0);
 				}
 			}
 		} else {
@@ -89,6 +93,9 @@ void WorkerScript::fixed_update(duration_t dt) {
 						= -rb_worker.data.linear_velocity.x / 5;
 					animator_worker.back().get().data.fps
 						= -rb_worker.data.linear_velocity.x / 5;
+
+					animator_worker.front().get().set_anim(0);
+					animator_worker.back().get().set_anim(0);
 				} else {
 					sprite_worker.front().get().data.flip.flip_x = false;
 					sprite_worker.back().get().data.flip.flip_x = false;
@@ -97,6 +104,9 @@ void WorkerScript::fixed_update(duration_t dt) {
 						= rb_worker.data.linear_velocity.x / 5;
 					animator_worker.back().get().data.fps
 						= rb_worker.data.linear_velocity.x / 5;
+
+					animator_worker.front().get().set_anim(0);
+					animator_worker.back().get().set_anim(0);
 				}
 			}
 		}
diff --git a/game/workers/WorkersSubScene.cpp b/game/workers/WorkersSubScene.cpp
index 94d9848..5b070f8 100644
--- a/game/workers/WorkersSubScene.cpp
+++ b/game/workers/WorkersSubScene.cpp
@@ -1,4 +1,5 @@
 #include "WorkersSubScene.h"
+#include "PanicFromPlayer.h"
 #include "WorkerScript.h"
 
 #include "../Config.h"
@@ -68,6 +69,7 @@ void WorkersSubScene::worker1(crepe::Scene & scn, float start_x, float init_spee
 		.linear_velocity = vec2(init_speed, 0),
 		.collision_layers = {COLL_LAY_BOT_TOP},
 	});
+	worker_1.add_component<BehaviorScript>().set_script<PanicFromPlayer>();
 
 	if (init_speed < 0) {
 		worker_1_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -115,6 +117,7 @@ void WorkersSubScene::worker2(crepe::Scene & scn, float start_x, float init_spee
 		.linear_velocity = vec2(init_speed, 0),
 		.collision_layers = {COLL_LAY_BOT_TOP},
 	});
+	worker_2.add_component<BehaviorScript>().set_script<PanicFromPlayer>();
 
 	if (init_speed < 0) {
 		worker_2_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -162,6 +165,7 @@ void WorkersSubScene::worker3(crepe::Scene & scn, float start_x, float init_spee
 		.linear_velocity = vec2(init_speed, 0),
 		.collision_layers = {COLL_LAY_BOT_TOP},
 	});
+	worker_3.add_component<BehaviorScript>().set_script<PanicFromPlayer>();
 
 	if (init_speed < 0) {
 		worker_3_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -209,6 +213,7 @@ void WorkersSubScene::worker4(crepe::Scene & scn, float start_x, float init_spee
 		.linear_velocity = vec2(init_speed, 0),
 		.collision_layers = {COLL_LAY_BOT_HIGH},
 	});
+	worker_4.add_component<BehaviorScript>().set_script<PanicFromPlayer>();
 
 	if (init_speed < 0) {
 		worker_4_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -256,6 +261,7 @@ void WorkersSubScene::worker5(crepe::Scene & scn, float start_x, float init_spee
 		.linear_velocity = vec2(init_speed, 0),
 		.collision_layers = {COLL_LAY_BOT_HIGH},
 	});
+	worker_5.add_component<BehaviorScript>().set_script<PanicFromPlayer>();
 
 	if (init_speed < 0) {
 		worker_5_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -303,6 +309,7 @@ void WorkersSubScene::worker6(crepe::Scene & scn, float start_x, float init_spee
 		.linear_velocity = vec2(init_speed, 0),
 		.collision_layers = {COLL_LAY_BOT_LOW},
 	});
+	worker_6.add_component<BehaviorScript>().set_script<PanicFromPlayer>();
 
 	if (init_speed < 0) {
 		worker_6_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -350,6 +357,7 @@ void WorkersSubScene::worker7(crepe::Scene & scn, float start_x, float init_spee
 		.linear_velocity = vec2(init_speed, 0),
 		.collision_layers = {COLL_LAY_BOT_LOW},
 	});
+	worker_7.add_component<BehaviorScript>().set_script<PanicFromPlayer>();
 
 	if (init_speed < 0) {
 		worker_7_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -397,6 +405,7 @@ void WorkersSubScene::worker8(crepe::Scene & scn, float start_x, float init_spee
 		.linear_velocity = vec2(init_speed, 0),
 		.collision_layers = {COLL_LAY_BOT_LOW},
 	});
+	worker_8.add_component<BehaviorScript>().set_script<PanicFromPlayer>();
 
 	if (init_speed < 0) {
 		worker_8_body_sprite.data.flip = Sprite::FlipSettings {true, false};
-- 
cgit v1.2.3


From f31bd86ae5d7df21b788a273d4f2e530136ec184 Mon Sep 17 00:00:00 2001
From: Max-001 <maxsmits21@kpnmail.nl>
Date: Tue, 7 Jan 2025 14:42:11 +0100
Subject: Added Script suffix

---
 game/CMakeLists.txt                    |  2 +-
 game/workers/PanicFromPlayer.cpp       | 45 ----------------------------------
 game/workers/PanicFromPlayer.h         |  8 ------
 game/workers/PanicFromPlayerScript.cpp | 45 ++++++++++++++++++++++++++++++++++
 game/workers/PanicFromPlayerScript.h   |  8 ++++++
 game/workers/WorkersSubScene.cpp       | 18 +++++++-------
 6 files changed, 63 insertions(+), 63 deletions(-)
 delete mode 100644 game/workers/PanicFromPlayer.cpp
 delete mode 100644 game/workers/PanicFromPlayer.h
 create mode 100644 game/workers/PanicFromPlayerScript.cpp
 create mode 100644 game/workers/PanicFromPlayerScript.h

(limited to 'game/workers')

diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt
index dc6a3fd..0fb2424 100644
--- a/game/CMakeLists.txt
+++ b/game/CMakeLists.txt
@@ -24,7 +24,7 @@ add_executable(main
 	background/StartSubScene.cpp
 	workers/WorkersSubScene.cpp
 	workers/WorkerScript.cpp
-	workers/PanicFromPlayer.cpp
+	workers/PanicFromPlayerScript.cpp
 	main.cpp
 )
 
diff --git a/game/workers/PanicFromPlayer.cpp b/game/workers/PanicFromPlayer.cpp
deleted file mode 100644
index fbf4611..0000000
--- a/game/workers/PanicFromPlayer.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-#include "PanicFromPlayer.h"
-
-#include <crepe/api/Animator.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 PanicFromPlayer::fixed_update(duration_t dt) {
-	Animator & anim_player = this->get_components_by_name<Animator>("player").front();
-
-	if (anim_player.data.col == 1) {
-		Transform & trans_player = this->get_components_by_name<Transform>("player").back();
-		Transform & trans_worker = this->get_components<Transform>().back();
-
-		float result_x = trans_player.position.x - trans_worker.position.x;
-
-		if (result_x < 100 && result_x > -20) {
-			RefVector<Animator> anim_worker = this->get_components<Animator>();
-			RefVector<Sprite> sprite_worker = this->get_components<Sprite>();
-			Rigidbody & rb_worker = this->get_components<Rigidbody>().back();
-
-			if (anim_worker.front().get().data.col != 1) {
-				anim_worker.front().get().set_anim(1);
-				anim_worker.back().get().set_anim(1);
-
-				anim_worker.front().get().data.fps = 10;
-				anim_worker.back().get().data.fps = 10;
-			}
-
-			if (result_x < 0) {
-				rb_worker.data.linear_velocity.x = 10000 * 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();
-				sprite_worker.front().get().data.flip.flip_x = true;
-				sprite_worker.back().get().data.flip.flip_x = true;
-			}
-		}
-	}
-};
diff --git a/game/workers/PanicFromPlayer.h b/game/workers/PanicFromPlayer.h
deleted file mode 100644
index 804df5c..0000000
--- a/game/workers/PanicFromPlayer.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#pragma once
-
-#include <crepe/api/Script.h>
-
-class PanicFromPlayer : public crepe::Script {
-public:
-	void fixed_update(crepe::duration_t dt);
-};
diff --git a/game/workers/PanicFromPlayerScript.cpp b/game/workers/PanicFromPlayerScript.cpp
new file mode 100644
index 0000000..1e49aaa
--- /dev/null
+++ b/game/workers/PanicFromPlayerScript.cpp
@@ -0,0 +1,45 @@
+#include "PanicFromPlayerScript.h"
+
+#include <crepe/api/Animator.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 PanicFromPlayerScript::fixed_update(duration_t dt) {
+	Animator & anim_player = this->get_components_by_name<Animator>("player").front();
+
+	if (anim_player.data.col == 1) {
+		Transform & trans_player = this->get_components_by_name<Transform>("player").back();
+		Transform & trans_worker = this->get_components<Transform>().back();
+
+		float result_x = trans_player.position.x - trans_worker.position.x;
+
+		if (result_x < 100 && result_x > -20) {
+			RefVector<Animator> anim_worker = this->get_components<Animator>();
+			RefVector<Sprite> sprite_worker = this->get_components<Sprite>();
+			Rigidbody & rb_worker = this->get_components<Rigidbody>().back();
+
+			if (anim_worker.front().get().data.col != 1) {
+				anim_worker.front().get().set_anim(1);
+				anim_worker.back().get().set_anim(1);
+
+				anim_worker.front().get().data.fps = 10;
+				anim_worker.back().get().data.fps = 10;
+			}
+
+			if (result_x < 0) {
+				rb_worker.data.linear_velocity.x = 10000 * 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();
+				sprite_worker.front().get().data.flip.flip_x = true;
+				sprite_worker.back().get().data.flip.flip_x = true;
+			}
+		}
+	}
+};
diff --git a/game/workers/PanicFromPlayerScript.h b/game/workers/PanicFromPlayerScript.h
new file mode 100644
index 0000000..d173e89
--- /dev/null
+++ b/game/workers/PanicFromPlayerScript.h
@@ -0,0 +1,8 @@
+#pragma once
+
+#include <crepe/api/Script.h>
+
+class PanicFromPlayerScript : public crepe::Script {
+public:
+	void fixed_update(crepe::duration_t dt);
+};
diff --git a/game/workers/WorkersSubScene.cpp b/game/workers/WorkersSubScene.cpp
index 5b070f8..e5b4678 100644
--- a/game/workers/WorkersSubScene.cpp
+++ b/game/workers/WorkersSubScene.cpp
@@ -1,5 +1,5 @@
 #include "WorkersSubScene.h"
-#include "PanicFromPlayer.h"
+#include "PanicFromPlayerScript.h"
 #include "WorkerScript.h"
 
 #include "../Config.h"
@@ -69,7 +69,7 @@ void WorkersSubScene::worker1(crepe::Scene & scn, float start_x, float init_spee
 		.linear_velocity = vec2(init_speed, 0),
 		.collision_layers = {COLL_LAY_BOT_TOP},
 	});
-	worker_1.add_component<BehaviorScript>().set_script<PanicFromPlayer>();
+	worker_1.add_component<BehaviorScript>().set_script<PanicFromPlayerScript>();
 
 	if (init_speed < 0) {
 		worker_1_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -117,7 +117,7 @@ void WorkersSubScene::worker2(crepe::Scene & scn, float start_x, float init_spee
 		.linear_velocity = vec2(init_speed, 0),
 		.collision_layers = {COLL_LAY_BOT_TOP},
 	});
-	worker_2.add_component<BehaviorScript>().set_script<PanicFromPlayer>();
+	worker_2.add_component<BehaviorScript>().set_script<PanicFromPlayerScript>();
 
 	if (init_speed < 0) {
 		worker_2_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -165,7 +165,7 @@ void WorkersSubScene::worker3(crepe::Scene & scn, float start_x, float init_spee
 		.linear_velocity = vec2(init_speed, 0),
 		.collision_layers = {COLL_LAY_BOT_TOP},
 	});
-	worker_3.add_component<BehaviorScript>().set_script<PanicFromPlayer>();
+	worker_3.add_component<BehaviorScript>().set_script<PanicFromPlayerScript>();
 
 	if (init_speed < 0) {
 		worker_3_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -213,7 +213,7 @@ void WorkersSubScene::worker4(crepe::Scene & scn, float start_x, float init_spee
 		.linear_velocity = vec2(init_speed, 0),
 		.collision_layers = {COLL_LAY_BOT_HIGH},
 	});
-	worker_4.add_component<BehaviorScript>().set_script<PanicFromPlayer>();
+	worker_4.add_component<BehaviorScript>().set_script<PanicFromPlayerScript>();
 
 	if (init_speed < 0) {
 		worker_4_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -261,7 +261,7 @@ void WorkersSubScene::worker5(crepe::Scene & scn, float start_x, float init_spee
 		.linear_velocity = vec2(init_speed, 0),
 		.collision_layers = {COLL_LAY_BOT_HIGH},
 	});
-	worker_5.add_component<BehaviorScript>().set_script<PanicFromPlayer>();
+	worker_5.add_component<BehaviorScript>().set_script<PanicFromPlayerScript>();
 
 	if (init_speed < 0) {
 		worker_5_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -309,7 +309,7 @@ void WorkersSubScene::worker6(crepe::Scene & scn, float start_x, float init_spee
 		.linear_velocity = vec2(init_speed, 0),
 		.collision_layers = {COLL_LAY_BOT_LOW},
 	});
-	worker_6.add_component<BehaviorScript>().set_script<PanicFromPlayer>();
+	worker_6.add_component<BehaviorScript>().set_script<PanicFromPlayerScript>();
 
 	if (init_speed < 0) {
 		worker_6_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -357,7 +357,7 @@ void WorkersSubScene::worker7(crepe::Scene & scn, float start_x, float init_spee
 		.linear_velocity = vec2(init_speed, 0),
 		.collision_layers = {COLL_LAY_BOT_LOW},
 	});
-	worker_7.add_component<BehaviorScript>().set_script<PanicFromPlayer>();
+	worker_7.add_component<BehaviorScript>().set_script<PanicFromPlayerScript>();
 
 	if (init_speed < 0) {
 		worker_7_body_sprite.data.flip = Sprite::FlipSettings {true, false};
@@ -405,7 +405,7 @@ void WorkersSubScene::worker8(crepe::Scene & scn, float start_x, float init_spee
 		.linear_velocity = vec2(init_speed, 0),
 		.collision_layers = {COLL_LAY_BOT_LOW},
 	});
-	worker_8.add_component<BehaviorScript>().set_script<PanicFromPlayer>();
+	worker_8.add_component<BehaviorScript>().set_script<PanicFromPlayerScript>();
 
 	if (init_speed < 0) {
 		worker_8_body_sprite.data.flip = Sprite::FlipSettings {true, false};
-- 
cgit v1.2.3


From 1a4dcd898138e6f1de5a8fbb6f0388f39b338189 Mon Sep 17 00:00:00 2001
From: Max-001 <maxsmits21@kpnmail.nl>
Date: Tue, 7 Jan 2025 16:22:18 +0100
Subject: Added extra sorting layer for workers

---
 game/Config.h                    |  3 ++-
 game/workers/WorkersSubScene.cpp | 32 ++++++++++++++++----------------
 2 files changed, 18 insertions(+), 17 deletions(-)

(limited to 'game/workers')

diff --git a/game/Config.h b/game/Config.h
index ea95a90..d5208d8 100644
--- a/game/Config.h
+++ b/game/Config.h
@@ -5,8 +5,9 @@ static constexpr int SORT_IN_LAY_BACKGROUND = 4; // For all scenes
 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_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/workers/WorkersSubScene.cpp b/game/workers/WorkersSubScene.cpp
index e5b4678..215e3f2 100644
--- a/game/workers/WorkersSubScene.cpp
+++ b/game/workers/WorkersSubScene.cpp
@@ -34,7 +34,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 +49,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),
@@ -82,7 +82,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 +97,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),
@@ -130,7 +130,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 +145,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),
@@ -178,7 +178,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 +193,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),
@@ -226,7 +226,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 +241,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),
@@ -274,7 +274,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 +289,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),
@@ -322,7 +322,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 +337,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),
@@ -370,7 +370,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 +385,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),
-- 
cgit v1.2.3


From 231d33954dab62e2452eb88e509d2741a8437498 Mon Sep 17 00:00:00 2001
From: Max-001 <maxsmits21@kpnmail.nl>
Date: Wed, 8 Jan 2025 08:57:19 +0100
Subject: Init

---
 game/workers/CollisionScript.cpp | 62 ++++++++++++++++++++++++++++++++++++++++
 game/workers/CollisionScript.h   | 12 ++++++++
 2 files changed, 74 insertions(+)
 create mode 100644 game/workers/CollisionScript.cpp
 create mode 100644 game/workers/CollisionScript.h

(limited to 'game/workers')

diff --git a/game/workers/CollisionScript.cpp b/game/workers/CollisionScript.cpp
new file mode 100644
index 0000000..9e9b981
--- /dev/null
+++ b/game/workers/CollisionScript.cpp
@@ -0,0 +1,62 @@
+#include "CollisionScript.h"
+
+#include <crepe/api/Animator.h>
+#include <crepe/api/AudioSource.h>
+#include <crepe/api/ParticleEmitter.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_by_name<Animator>("player");
+	RefVector<ParticleEmitter> emitters
+		= this->get_components_by_name<ParticleEmitter>("player");
+
+	if (ev.info.other.metadata.tag == "zapper") {
+		for (Animator & anim : animators) {
+			anim.active = true;
+			anim.set_anim(4);
+			anim.data.looping = true;
+		}
+		for (ParticleEmitter & emitter : emitters) {
+			emitter.data.emission_rate = 0;
+		}
+
+		return true;
+	} else if (ev.info.other.metadata.tag == "laser") {
+		for (Animator & anim : animators) {
+			anim.active = true;
+			anim.set_anim(4);
+			anim.data.looping = true;
+		}
+		for (ParticleEmitter & emitter : emitters) {
+			emitter.data.emission_rate = 0;
+		}
+		play_scr.active = false;
+		end_scr.active = true;
+
+		return true;
+	} else if (ev.info.other.metadata.tag == "missile") {
+		for (Animator & anim : animators) {
+			anim.active = true;
+			anim.set_anim(5);
+			anim.data.looping = true;
+		}
+		for (ParticleEmitter & emitter : emitters) {
+			emitter.data.emission_rate = 0;
+		}
+		play_scr.active = false;
+		end_scr.active = true;
+
+		return true;
+	}
+
+	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);
+};
-- 
cgit v1.2.3


From b8ff1dcd4e531c3c858ee09f705cf553e86ed7ff Mon Sep 17 00:00:00 2001
From: Max-001 <maxsmits21@kpnmail.nl>
Date: Wed, 8 Jan 2025 09:07:46 +0100
Subject: Adjusted script

---
 game/workers/CollisionScript.cpp | 20 +-------------------
 1 file changed, 1 insertion(+), 19 deletions(-)

(limited to 'game/workers')

diff --git a/game/workers/CollisionScript.cpp b/game/workers/CollisionScript.cpp
index 9e9b981..baa058b 100644
--- a/game/workers/CollisionScript.cpp
+++ b/game/workers/CollisionScript.cpp
@@ -1,9 +1,6 @@
 #include "CollisionScript.h"
 
 #include <crepe/api/Animator.h>
-#include <crepe/api/AudioSource.h>
-#include <crepe/api/ParticleEmitter.h>
-
 
 using namespace crepe;
 using namespace std;
@@ -15,9 +12,7 @@ void CollisionScript::init() {
 }
 
 bool CollisionScript::on_collision(const CollisionEvent & ev) {
-	RefVector<Animator> animators = this->get_components_by_name<Animator>("player");
-	RefVector<ParticleEmitter> emitters
-		= this->get_components_by_name<ParticleEmitter>("player");
+	RefVector<Animator> animators = this->get_components<Animator>();
 
 	if (ev.info.other.metadata.tag == "zapper") {
 		for (Animator & anim : animators) {
@@ -25,9 +20,6 @@ bool CollisionScript::on_collision(const CollisionEvent & ev) {
 			anim.set_anim(4);
 			anim.data.looping = true;
 		}
-		for (ParticleEmitter & emitter : emitters) {
-			emitter.data.emission_rate = 0;
-		}
 
 		return true;
 	} else if (ev.info.other.metadata.tag == "laser") {
@@ -36,11 +28,6 @@ bool CollisionScript::on_collision(const CollisionEvent & ev) {
 			anim.set_anim(4);
 			anim.data.looping = true;
 		}
-		for (ParticleEmitter & emitter : emitters) {
-			emitter.data.emission_rate = 0;
-		}
-		play_scr.active = false;
-		end_scr.active = true;
 
 		return true;
 	} else if (ev.info.other.metadata.tag == "missile") {
@@ -49,11 +36,6 @@ bool CollisionScript::on_collision(const CollisionEvent & ev) {
 			anim.set_anim(5);
 			anim.data.looping = true;
 		}
-		for (ParticleEmitter & emitter : emitters) {
-			emitter.data.emission_rate = 0;
-		}
-		play_scr.active = false;
-		end_scr.active = true;
 
 		return true;
 	}
-- 
cgit v1.2.3


From e9082de7d114ce024a884cac38c545c99de4026a Mon Sep 17 00:00:00 2001
From: Max-001 <maxsmits21@kpnmail.nl>
Date: Wed, 8 Jan 2025 09:51:06 +0100
Subject: Finnished collision

---
 game/CMakeLists.txt                    |  1 +
 game/GameScene.cpp                     |  6 ++---
 game/workers/CollisionScript.cpp       | 48 +++++++++++++++++++++++++---------
 game/workers/PanicFromPlayerScript.cpp | 14 ++++++++--
 game/workers/WorkerScript.cpp          | 29 ++++++++++++++++++++
 game/workers/WorkersSubScene.cpp       |  9 +++++++
 6 files changed, 90 insertions(+), 17 deletions(-)

(limited to 'game/workers')

diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt
index 0fb2424..ab770eb 100644
--- a/game/CMakeLists.txt
+++ b/game/CMakeLists.txt
@@ -25,6 +25,7 @@ add_executable(main
 	workers/WorkersSubScene.cpp
 	workers/WorkerScript.cpp
 	workers/PanicFromPlayerScript.cpp
+	workers/CollisionScript.cpp
 	main.cpp
 )
 
diff --git a/game/GameScene.cpp b/game/GameScene.cpp
index 02af8db..97f62e2 100644
--- a/game/GameScene.cpp
+++ b/game/GameScene.cpp
@@ -80,7 +80,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,
@@ -96,7 +96,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,
@@ -112,7 +112,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/workers/CollisionScript.cpp b/game/workers/CollisionScript.cpp
index baa058b..deaf0ee 100644
--- a/game/workers/CollisionScript.cpp
+++ b/game/workers/CollisionScript.cpp
@@ -1,6 +1,11 @@
 #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;
@@ -13,31 +18,50 @@ void CollisionScript::init() {
 
 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 = true;
-			anim.set_anim(4);
-			anim.data.looping = true;
+			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 true;
+		return false;
 	} else if (ev.info.other.metadata.tag == "laser") {
 		for (Animator & anim : animators) {
-			anim.active = true;
-			anim.set_anim(4);
-			anim.data.looping = true;
+			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 true;
+		return false;
 	} else if (ev.info.other.metadata.tag == "missile") {
 		for (Animator & anim : animators) {
-			anim.active = true;
-			anim.set_anim(5);
-			anim.data.looping = true;
+			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 true;
+		return false;
 	}
 
 	return false;
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 215e3f2..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"
 
@@ -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};
@@ -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};
@@ -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};
@@ -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};
@@ -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};
@@ -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};
@@ -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};
@@ -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};
-- 
cgit v1.2.3


From 0de6692dcb029540f4502c5a2f1a0c6634f7b61f Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Wed, 8 Jan 2025 14:50:04 +0100
Subject: start of extra features and restored player functions

---
 game/enemy/EnemyBulletSubScene.cpp   |  2 +-
 game/enemy/EnemyScript.cpp           | 10 +++++++++-
 game/enemy/EnemySubScene.cpp         |  9 +++++----
 game/player/PlayerBulletSubScene.cpp |  6 +++---
 game/player/PlayerSubScene.cpp       |  6 +++---
 game/workers/CollisionScript.cpp     |  2 +-
 6 files changed, 22 insertions(+), 13 deletions(-)

(limited to 'game/workers')

diff --git a/game/enemy/EnemyBulletSubScene.cpp b/game/enemy/EnemyBulletSubScene.cpp
index edd8f0c..5c31f1d 100644
--- a/game/enemy/EnemyBulletSubScene.cpp
+++ b/game/enemy/EnemyBulletSubScene.cpp
@@ -30,7 +30,7 @@ int EnemyBulletSubScene::create(Scene & scn, int counter) {
 
 		.linear_velocity = vec2 {-250, 0},
 		.kinematic_collision = false,
-		.collision_layers = {COLL_LAY_MISSILE},
+		.collision_layers = {COLL_LAY_MISSILE,COLL_LAY_ZAPPER},
 		.collision_layer = COLL_LAY_BULLET
 	});
 	bullet_body.active = false;
diff --git a/game/enemy/EnemyScript.cpp b/game/enemy/EnemyScript.cpp
index 6558af5..8e475a8 100644
--- a/game/enemy/EnemyScript.cpp
+++ b/game/enemy/EnemyScript.cpp
@@ -8,6 +8,8 @@
 #include <crepe/api/ParticleEmitter.h>
 #include <crepe/api/Rigidbody.h>
 #include <crepe/api/Transform.h>
+#include <crepe/api/AudioSource.h>
+#include <crepe/api/Animator.h>
 #include <crepe/types.h>
 #include <random>
 using namespace crepe;
@@ -82,8 +84,12 @@ bool EnemyScript::spawn_enemy(const SpawnEnemyEvent & e) {
 
 bool EnemyScript::on_collide(const CollisionEvent & e) {
 	if (e.info.other.metadata.tag == "player_bullet") {
-		this->despawn_enemy();
+		//this->despawn_enemy();
+
 	}
+	Animator& body_animator = this->get_components<Animator>().front();
+	body_animator.data.col = 2;
+	//body_animator.play();
 	BehaviorScript & enemy_script = this->get_component<BehaviorScript>();
 	enemy_script.active = false;
 	return false;
@@ -110,6 +116,8 @@ void EnemyScript::shoot(const vec2 & location, float angle) {
 				= this->get_components_by_id<BoxCollider>(bullet_pos.game_object_id).front();
 			bullet_collider.active = true;
 			bullet_body.active = true;
+			AudioSource& audio = this->get_component<AudioSource>();
+			audio.play();
 			return;
 		}
 	}
diff --git a/game/enemy/EnemySubScene.cpp b/game/enemy/EnemySubScene.cpp
index 7d3e784..8316db9 100644
--- a/game/enemy/EnemySubScene.cpp
+++ b/game/enemy/EnemySubScene.cpp
@@ -8,6 +8,7 @@
 #include <crepe/api/GameObject.h>
 #include <crepe/api/Rigidbody.h>
 #include <crepe/api/Scene.h>
+#include <crepe/api/AudioSource.h>
 #include <crepe/api/Sprite.h>
 
 #include "../Config.h"
@@ -45,9 +46,8 @@ int EnemySubScene::create(Scene & scn, int enemy_counter) {
 		enemy_body_sprite, ivec2(32, 32), uvec2(4, 8),
 		Animator::Data {
 			.fps = 5,
-			.col = 3,
-			.row = 1,
-
+			.col = 1,
+			.row = 0,
 			.looping = false,
 		}
 	);
@@ -91,7 +91,8 @@ int EnemySubScene::create(Scene & scn, int enemy_counter) {
 			.looping = true,
 		}
 	);
-
+	enemy.add_component<AudioSource>(Asset("asset/sfx/bike_gun_2.ogg")).volume
+		= 0.1;
 	AI & ai_component = enemy.add_component<AI>(3000);
 	ai_component.path_follow_on();
 	BehaviorScript & enemy_script
diff --git a/game/player/PlayerBulletSubScene.cpp b/game/player/PlayerBulletSubScene.cpp
index 62bcf3e..2d237de 100644
--- a/game/player/PlayerBulletSubScene.cpp
+++ b/game/player/PlayerBulletSubScene.cpp
@@ -24,10 +24,10 @@ int PlayerBulletSubScene::create(Scene & scn, int counter) {
 	Rigidbody & player_bullet_body = player_bullet.add_component<Rigidbody>(Rigidbody::Data {
 		.gravity_scale = 0,
 		.body_type = Rigidbody::BodyType::KINEMATIC,
-		.linear_velocity = vec2 {300, 0},
-		.angular_velocity = 150,
+		.linear_velocity = vec2 {400, 0},
+		.angular_velocity = 10,
 		.kinematic_collision = false,
-		.collision_layers = {COLL_LAY_ENEMY},
+		.collision_layers = {COLL_LAY_ENEMY,COLL_LAY_ZAPPER},
 
 		.collision_layer = COLL_LAY_PLAYER_BULLET,
 
diff --git a/game/player/PlayerSubScene.cpp b/game/player/PlayerSubScene.cpp
index cf11162..c4d689a 100644
--- a/game/player/PlayerSubScene.cpp
+++ b/game/player/PlayerSubScene.cpp
@@ -22,7 +22,7 @@ using namespace crepe;
 using namespace std;
 
 PlayerSubScene::PlayerSubScene(Scene & scn) {
-	GameObject player = scn.new_object("player", "player", vec2(300, 200));
+	GameObject player = scn.new_object("player", "player", vec2(-100, 200));
 
 	Asset player_bullet {"asset/other_effects/effect_smgbullet.png"};
 	Sprite & player_bullet_sprite = player.add_component<Sprite>(
@@ -147,13 +147,13 @@ PlayerSubScene::PlayerSubScene(Scene & scn) {
 	player.add_component<Rigidbody>(Rigidbody::Data {
 		.gravity_scale = PLAYER_GRAVITY_SCALE,
 		.body_type = Rigidbody::BodyType::DYNAMIC,
-		//.linear_velocity = vec2(PLAYER_SPEED * 0.02, 0),
+		.linear_velocity = vec2(PLAYER_SPEED * 0.02, 0),
 		.collision_layers
 		= {COLL_LAY_BOT_TOP, COLL_LAY_ZAPPER, COLL_LAY_LASER, COLL_LAY_MISSILE, COLL_LAY_BULLET
 		},
 		.collision_layer = COLL_LAY_PLAYER,
 	});
-	player.add_component<BehaviorScript>().set_script<PlayerScript>().active = true;
+	player.add_component<BehaviorScript>().set_script<PlayerScript>().active = false;
 	player.add_component<BehaviorScript>().set_script<CoinScript>();
 	player.add_component<BehaviorScript>().set_script<PlayerEndScript>().active = false;
 
diff --git a/game/workers/CollisionScript.cpp b/game/workers/CollisionScript.cpp
index deaf0ee..625044d 100644
--- a/game/workers/CollisionScript.cpp
+++ b/game/workers/CollisionScript.cpp
@@ -49,7 +49,7 @@ bool CollisionScript::on_collision(const CollisionEvent & ev) {
 		bs_panic.active = false;
 
 		return false;
-	} else if (ev.info.other.metadata.tag == "missile") {
+	} else if (ev.info.other.metadata.tag == "missile" || ev.info.other.metadata.tag == "enemy_bullet") {
 		for (Animator & anim : animators) {
 			anim.active = false;
 			anim.set_anim(3);
-- 
cgit v1.2.3


From bb976ed881a989b8b2cec90c905d906d9b652a9d Mon Sep 17 00:00:00 2001
From: Loek Le Blansch <loek@pipeframe.xyz>
Date: Wed, 8 Jan 2025 16:20:10 +0100
Subject: `make format`

---
 game/GameScene.cpp                   |  2 +-
 game/enemy/EnemyBulletSubScene.cpp   |  2 +-
 game/enemy/EnemyScript.cpp           |  7 +++----
 game/enemy/EnemySubScene.cpp         |  5 ++---
 game/menus/shop/ShopMenuScene.cpp    |  1 -
 game/player/PlayerBulletSubScene.cpp |  2 +-
 game/scheduler/ObjectsScheduler.cpp  | 12 +++++++-----
 game/scheduler/ObjectsScheduler.h    |  6 +-----
 game/workers/CollisionScript.cpp     |  3 ++-
 9 files changed, 18 insertions(+), 22 deletions(-)

(limited to 'game/workers')

diff --git a/game/GameScene.cpp b/game/GameScene.cpp
index 34b0fcb..3ae64fb 100644
--- a/game/GameScene.cpp
+++ b/game/GameScene.cpp
@@ -20,8 +20,8 @@
 #include "player/PlayerBulletPool.h"
 #include "player/PlayerBulletSubScene.h"
 #include "player/PlayerSubScene.h"
-#include "scheduler/ObjectsScheduler.h"
 #include "prefab/ZapperPoolSubScene.h"
+#include "scheduler/ObjectsScheduler.h"
 #include "workers/WorkersSubScene.h"
 
 #include <cmath>
diff --git a/game/enemy/EnemyBulletSubScene.cpp b/game/enemy/EnemyBulletSubScene.cpp
index 5c31f1d..ad2ca9d 100644
--- a/game/enemy/EnemyBulletSubScene.cpp
+++ b/game/enemy/EnemyBulletSubScene.cpp
@@ -30,7 +30,7 @@ int EnemyBulletSubScene::create(Scene & scn, int counter) {
 
 		.linear_velocity = vec2 {-250, 0},
 		.kinematic_collision = false,
-		.collision_layers = {COLL_LAY_MISSILE,COLL_LAY_ZAPPER},
+		.collision_layers = {COLL_LAY_MISSILE, COLL_LAY_ZAPPER},
 		.collision_layer = COLL_LAY_BULLET
 	});
 	bullet_body.active = false;
diff --git a/game/enemy/EnemyScript.cpp b/game/enemy/EnemyScript.cpp
index 8cf8b80..5c03539 100644
--- a/game/enemy/EnemyScript.cpp
+++ b/game/enemy/EnemyScript.cpp
@@ -4,12 +4,11 @@
 #include "EnemyConfig.h"
 #include <crepe/api/AI.h>
 #include <crepe/api/Animator.h>
+#include <crepe/api/AudioSource.h>
 #include <crepe/api/BoxCollider.h>
 #include <crepe/api/ParticleEmitter.h>
 #include <crepe/api/Rigidbody.h>
 #include <crepe/api/Transform.h>
-#include <crepe/api/AudioSource.h>
-#include <crepe/api/Animator.h>
 #include <crepe/types.h>
 #include <random>
 using namespace crepe;
@@ -86,7 +85,7 @@ bool EnemyScript::on_collide(const CollisionEvent & e) {
 	if (e.info.other.metadata.tag == "player_bullet") {
 		this->despawn_enemy();
 	}
-	Animator& body_animator = this->get_components<Animator>().front();
+	Animator & body_animator = this->get_components<Animator>().front();
 	body_animator.data.col = 2;
 	//body_animator.play();
 	BehaviorScript & enemy_script = this->get_component<BehaviorScript>();
@@ -115,7 +114,7 @@ void EnemyScript::shoot(const vec2 & location, float angle) {
 				= this->get_components_by_id<BoxCollider>(bullet_pos.game_object_id).front();
 			bullet_collider.active = true;
 			bullet_body.active = true;
-			AudioSource& audio = this->get_component<AudioSource>();
+			AudioSource & audio = this->get_component<AudioSource>();
 			audio.play();
 			return;
 		}
diff --git a/game/enemy/EnemySubScene.cpp b/game/enemy/EnemySubScene.cpp
index 8316db9..607b9a9 100644
--- a/game/enemy/EnemySubScene.cpp
+++ b/game/enemy/EnemySubScene.cpp
@@ -2,13 +2,13 @@
 
 #include <crepe/api/AI.h>
 #include <crepe/api/Animator.h>
+#include <crepe/api/AudioSource.h>
 #include <crepe/api/BehaviorScript.h>
 #include <crepe/api/BoxCollider.h>
 #include <crepe/api/CircleCollider.h>
 #include <crepe/api/GameObject.h>
 #include <crepe/api/Rigidbody.h>
 #include <crepe/api/Scene.h>
-#include <crepe/api/AudioSource.h>
 #include <crepe/api/Sprite.h>
 
 #include "../Config.h"
@@ -91,8 +91,7 @@ int EnemySubScene::create(Scene & scn, int enemy_counter) {
 			.looping = true,
 		}
 	);
-	enemy.add_component<AudioSource>(Asset("asset/sfx/bike_gun_2.ogg")).volume
-		= 0.1;
+	enemy.add_component<AudioSource>(Asset("asset/sfx/bike_gun_2.ogg")).volume = 0.1;
 	AI & ai_component = enemy.add_component<AI>(3000);
 	ai_component.path_follow_on();
 	BehaviorScript & enemy_script
diff --git a/game/menus/shop/ShopMenuScene.cpp b/game/menus/shop/ShopMenuScene.cpp
index 5ada0d3..d1ea81d 100644
--- a/game/menus/shop/ShopMenuScene.cpp
+++ b/game/menus/shop/ShopMenuScene.cpp
@@ -6,7 +6,6 @@
 #include "../ButtonSubScene.h"
 #include "../MenusConfig.h"
 #include "types.h"
-#include "../../Config.h"
 
 #include <crepe/api/Camera.h>
 #include <crepe/api/Sprite.h>
diff --git a/game/player/PlayerBulletSubScene.cpp b/game/player/PlayerBulletSubScene.cpp
index 2d237de..795747b 100644
--- a/game/player/PlayerBulletSubScene.cpp
+++ b/game/player/PlayerBulletSubScene.cpp
@@ -27,7 +27,7 @@ int PlayerBulletSubScene::create(Scene & scn, int counter) {
 		.linear_velocity = vec2 {400, 0},
 		.angular_velocity = 10,
 		.kinematic_collision = false,
-		.collision_layers = {COLL_LAY_ENEMY,COLL_LAY_ZAPPER},
+		.collision_layers = {COLL_LAY_ENEMY, COLL_LAY_ZAPPER},
 
 		.collision_layer = COLL_LAY_PLAYER_BULLET,
 
diff --git a/game/scheduler/ObjectsScheduler.cpp b/game/scheduler/ObjectsScheduler.cpp
index 02d84c1..fca8fa2 100644
--- a/game/scheduler/ObjectsScheduler.cpp
+++ b/game/scheduler/ObjectsScheduler.cpp
@@ -2,8 +2,8 @@
 
 #include "ObjectsScheduler.h"
 
-#include "../Random.h"
 #include "../Config.h"
+#include "../Random.h"
 #include "../missile/SpawnEvent.h"
 #include "api/Rigidbody.h"
 #include "api/Transform.h"
@@ -16,15 +16,17 @@ void ObjectsScheduler::preset_1() { trigger_event<MissileSpawnEvent>(MissileSpaw
 void ObjectsScheduler::preset_2() { trigger_event<CreateZapperEvent>(CreateZapperEvent {}); }
 void ObjectsScheduler::preset_3() {}
 void ObjectsScheduler::preset_4() {}
-void ObjectsScheduler::boss_fight_1() { 
+void ObjectsScheduler::boss_fight_1() {
 	this->get_components_by_name<Rigidbody>("camera").front().get().data.linear_velocity.x = 0;
 	this->get_components_by_name<Rigidbody>("player").front().get().data.linear_velocity.x = 0;
-	this->trigger_event<BattleStartEvent>(BattleStartEvent{.num_enemies = 2});
+	this->trigger_event<BattleStartEvent>(BattleStartEvent {.num_enemies = 2});
 }
 
 bool ObjectsScheduler::boss_fight_1_event() {
-	this->get_components_by_name<Rigidbody>("camera").front().get().data.linear_velocity.x = PLAYER_SPEED * 0.02;
-	this->get_components_by_name<Rigidbody>("player").front().get().data.linear_velocity.x = PLAYER_SPEED * 0.02;
+	this->get_components_by_name<Rigidbody>("camera").front().get().data.linear_velocity.x
+		= PLAYER_SPEED * 0.02;
+	this->get_components_by_name<Rigidbody>("player").front().get().data.linear_velocity.x
+		= PLAYER_SPEED * 0.02;
 	return false;
 }
 
diff --git a/game/scheduler/ObjectsScheduler.h b/game/scheduler/ObjectsScheduler.h
index 56d72cb..bd0701b 100644
--- a/game/scheduler/ObjectsScheduler.h
+++ b/game/scheduler/ObjectsScheduler.h
@@ -1,17 +1,14 @@
 #pragma once
 
-
-
 #include "api/Script.h"
 #include <functional>
 #include <vector>
 
-
 class ObjectsScheduler : public crepe::Script {
 
 private:
 	std::vector<std::function<void()>> obstacles;
-	
+
 	int last_boss_check = 0;
 	int last_obstacle_check = 0;
 
@@ -32,5 +29,4 @@ private:
 public:
 	void init();
 	void fixed_update(crepe::duration_t dt);
-
 };
diff --git a/game/workers/CollisionScript.cpp b/game/workers/CollisionScript.cpp
index 625044d..372bfec 100644
--- a/game/workers/CollisionScript.cpp
+++ b/game/workers/CollisionScript.cpp
@@ -49,7 +49,8 @@ bool CollisionScript::on_collision(const CollisionEvent & ev) {
 		bs_panic.active = false;
 
 		return false;
-	} else if (ev.info.other.metadata.tag == "missile" || ev.info.other.metadata.tag == "enemy_bullet") {
+	} else if (ev.info.other.metadata.tag == "missile"
+			   || ev.info.other.metadata.tag == "enemy_bullet") {
 		for (Animator & anim : animators) {
 			anim.active = false;
 			anim.set_anim(3);
-- 
cgit v1.2.3