From 7f7c5c56dce30d47c32fb57fad6d839d0990b054 Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Wed, 8 Jan 2025 10:08:03 +0100
Subject: enemy spawn working + enemy shooting

---
 game/enemy/BattleScript.h | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
 create mode 100644 game/enemy/BattleScript.h

(limited to 'game/enemy/BattleScript.h')

diff --git a/game/enemy/BattleScript.h b/game/enemy/BattleScript.h
new file mode 100644
index 0000000..d239e70
--- /dev/null
+++ b/game/enemy/BattleScript.h
@@ -0,0 +1,20 @@
+#pragma once
+
+#include <crepe/api/Script.h>
+#include <crepe/api/BehaviorScript.h>
+#include <crepe/api/Event.h>
+#include <random>
+struct BattleStartEvent : public crepe::Event{
+	public: 
+	int num_enemies = 0;
+};
+class BattleScript : public crepe::Script{
+	public:
+	BattleScript();
+	void init() override;
+	void fixed_update(crepe::duration_t dt) override;
+	private:
+	std::random_device rd;
+	std::default_random_engine engine;
+	bool create_battle(const BattleStartEvent& e);
+};
-- 
cgit v1.2.3


From 016b36b6d340be958bb047ca5f26dd54aa658c88 Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Wed, 8 Jan 2025 12:43:54 +0100
Subject: battlescript battle won working

---
 game/enemy/BattleScript.cpp | 9 ++++-----
 game/enemy/BattleScript.h   | 1 +
 game/enemy/EnemyScript.cpp  | 2 ++
 game/main.cpp               | 4 ++--
 4 files changed, 9 insertions(+), 7 deletions(-)

(limited to 'game/enemy/BattleScript.h')

diff --git a/game/enemy/BattleScript.cpp b/game/enemy/BattleScript.cpp
index 463ddf3..1d263a3 100644
--- a/game/enemy/BattleScript.cpp
+++ b/game/enemy/BattleScript.cpp
@@ -1,4 +1,3 @@
-#include <iostream>
 #include "BattleScript.h"
 #include <crepe/api/AI.h>
 #include "EnemyScript.h"
@@ -8,10 +7,7 @@
 #include "EnemyScript.h"
 using namespace std;
 using namespace crepe;
-// stop player movement
-// spawn enemies
-// resume game once enemies are defeated
-// optional: spawn lazers during fight
+
 BattleScript::BattleScript(){
 	engine.seed(rd());
 }
@@ -24,6 +20,7 @@ void BattleScript::init(){
 	});
 }
 void BattleScript::fixed_update(duration_t dt){
+	if(!battle_active) return;
 	bool enemies_alive = false;
 	RefVector<BehaviorScript> enemy_scripts = this->get_components_by_tag<BehaviorScript>("enemy");
 	
@@ -33,10 +30,12 @@ void BattleScript::fixed_update(duration_t dt){
 		}
 	}
 	if(!enemies_alive){
+		this->battle_active = false;
 		this->trigger_event<BattleWonEvent>();
 	}
 }
 bool BattleScript::create_battle(const BattleStartEvent& e){
+	this->battle_active = true;
 	RefVector<BehaviorScript> enemy_scripts = this->get_components_by_tag<BehaviorScript>("enemy");
 	std::uniform_real_distribution<float> dist(10,30);
 	for(int i = 0; i < e.num_enemies;i++){
diff --git a/game/enemy/BattleScript.h b/game/enemy/BattleScript.h
index d239e70..55ca166 100644
--- a/game/enemy/BattleScript.h
+++ b/game/enemy/BattleScript.h
@@ -14,6 +14,7 @@ class BattleScript : public crepe::Script{
 	void init() override;
 	void fixed_update(crepe::duration_t dt) override;
 	private:
+	bool battle_active = false;
 	std::random_device rd;
 	std::default_random_engine engine;
 	bool create_battle(const BattleStartEvent& e);
diff --git a/game/enemy/EnemyScript.cpp b/game/enemy/EnemyScript.cpp
index 4b75846..f9b79ea 100644
--- a/game/enemy/EnemyScript.cpp
+++ b/game/enemy/EnemyScript.cpp
@@ -82,6 +82,8 @@ bool EnemyScript::on_collide(const CollisionEvent & e){
 	if(e.info.other.metadata.tag == "player_bullet"){
 		this->despawn_enemy();
 	}
+	BehaviorScript& enemy_script = this->get_component<BehaviorScript>();
+	enemy_script.active = false;
 	return false;
 }
 void EnemyScript::despawn_enemy(){
diff --git a/game/main.cpp b/game/main.cpp
index 3f7e17e..9b25444 100644
--- a/game/main.cpp
+++ b/game/main.cpp
@@ -9,10 +9,10 @@ using namespace crepe;
 
 int main() {
 	Engine gameloop;
-	gameloop.add_scene<GameScene>();
+	
 	gameloop.add_scene<MainMenuScene>();
 	gameloop.add_scene<ShopMenuScene>();
-	
+	gameloop.add_scene<GameScene>();
 
 	return gameloop.main();
 }
-- 
cgit v1.2.3


From 1e25ce23534c1dcc7bebfc9fe33c1b587f15643a Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Wed, 8 Jan 2025 12:50:47 +0100
Subject: removed unwanted / removed lines

---
 game/StartGameScript.cpp    | 21 ++++++++++-----------
 game/enemy/BattleScript.cpp |  1 -
 game/enemy/BattleScript.h   |  4 ++++
 game/enemy/BattleWonEvent.h |  5 -----
 4 files changed, 14 insertions(+), 17 deletions(-)
 delete mode 100644 game/enemy/BattleWonEvent.h

(limited to 'game/enemy/BattleScript.h')

diff --git a/game/StartGameScript.cpp b/game/StartGameScript.cpp
index 3de577c..8fbc17d 100644
--- a/game/StartGameScript.cpp
+++ b/game/StartGameScript.cpp
@@ -13,7 +13,6 @@ using namespace std;
 
 void StartGameScript::fixed_update(crepe::duration_t dt) {
 	Transform & player_transform = this->get_components_by_name<Transform>("player").front();
-	// cout << "startgameScript call speed: " << PLAYER_SPEED * dt.count() << endl;
 	// Create hole in wall and activate panic lamp
 	if (player_transform.position.x > 75 && !this->created_hole) {
 		Sprite & lamp_sprite = this->get_components_by_name<Sprite>("start_end").back();
@@ -64,14 +63,14 @@ void StartGameScript::fixed_update(crepe::duration_t dt) {
 	}
 
 	// Start camera movement, enable player jumping and disable this script
-	// if (player_transform.position.x > 500) {
-	// 	Rigidbody & rb = this->get_components_by_name<Rigidbody>("camera").front();
-	// 	rb.data.linear_velocity = vec2(PLAYER_SPEED * dt.count(), 0);
-	// 	BehaviorScript & player_script
-	// 		= this->get_components_by_name<BehaviorScript>("player").front();
-	// 	player_script.active = true;
-	// 	BehaviorScript & this_script
-	// 		= this->get_components_by_name<BehaviorScript>("start_game_script").front();
-	// 	this_script.active = false;
-	// }
+	if (player_transform.position.x > 500) {
+		Rigidbody & rb = this->get_components_by_name<Rigidbody>("camera").front();
+		rb.data.linear_velocity = vec2(PLAYER_SPEED * dt.count(), 0);
+		BehaviorScript & player_script
+			= this->get_components_by_name<BehaviorScript>("player").front();
+		player_script.active = true;
+		BehaviorScript & this_script
+			= this->get_components_by_name<BehaviorScript>("start_game_script").front();
+		this_script.active = false;
+	}
 }
diff --git a/game/enemy/BattleScript.cpp b/game/enemy/BattleScript.cpp
index 1d263a3..2564e3d 100644
--- a/game/enemy/BattleScript.cpp
+++ b/game/enemy/BattleScript.cpp
@@ -3,7 +3,6 @@
 #include "EnemyScript.h"
 #include <crepe/api/BehaviorScript.h>
 #include <crepe/api/Metadata.h>
-#include "BattleWonEvent.h"
 #include "EnemyScript.h"
 using namespace std;
 using namespace crepe;
diff --git a/game/enemy/BattleScript.h b/game/enemy/BattleScript.h
index 55ca166..f91c597 100644
--- a/game/enemy/BattleScript.h
+++ b/game/enemy/BattleScript.h
@@ -4,6 +4,10 @@
 #include <crepe/api/BehaviorScript.h>
 #include <crepe/api/Event.h>
 #include <random>
+struct BattleWonEvent : public crepe::Event{
+
+};
+
 struct BattleStartEvent : public crepe::Event{
 	public: 
 	int num_enemies = 0;
diff --git a/game/enemy/BattleWonEvent.h b/game/enemy/BattleWonEvent.h
deleted file mode 100644
index a48dbad..0000000
--- a/game/enemy/BattleWonEvent.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#pragma once
-#include <crepe/api/Event.h>
-struct BattleWonEvent : public crepe::Event{
-
-};
-- 
cgit v1.2.3


From fcec9d7598f0808d4081120a9cb2036bdea59737 Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Wed, 8 Jan 2025 13:52:43 +0100
Subject: make format

---
 game/GameScene.cpp                   | 20 ++++----
 game/Random.cpp                      |  1 -
 game/Random.h                        |  2 -
 game/StartGameScript.cpp             |  2 +-
 game/enemy/BattleScript.cpp          | 52 +++++++++----------
 game/enemy/BattleScript.h            | 19 ++++---
 game/enemy/EnemyBulletPool.cpp       |  2 +-
 game/enemy/EnemyBulletPool.h         |  1 +
 game/enemy/EnemyBulletScript.cpp     | 28 +++++------
 game/enemy/EnemyBulletScript.h       | 12 ++---
 game/enemy/EnemyBulletSubScene.cpp   | 38 +++++++-------
 game/enemy/EnemyPool.cpp             |  2 +-
 game/enemy/EnemyPool.h               |  1 +
 game/enemy/EnemyScript.cpp           | 98 +++++++++++++++++++-----------------
 game/enemy/EnemyScript.h             | 16 +++---
 game/enemy/EnemySubScene.cpp         | 42 ++++++++--------
 game/enemy/EnemySubScene.h           |  2 +-
 game/main.cpp                        |  2 +-
 game/player/PlayerBulletPool.cpp     |  2 +-
 game/player/PlayerBulletPool.h       |  1 +
 game/player/PlayerBulletScript.cpp   | 30 +++++------
 game/player/PlayerBulletScript.h     | 12 ++---
 game/player/PlayerBulletSubScene.cpp | 41 +++++++--------
 game/player/PlayerBulletSubScene.h   |  2 +-
 game/player/PlayerScript.cpp         | 32 +++++++-----
 game/player/PlayerScript.h           |  7 +--
 game/player/PlayerSubScene.cpp       |  3 +-
 27 files changed, 242 insertions(+), 228 deletions(-)

(limited to 'game/enemy/BattleScript.h')

diff --git a/game/GameScene.cpp b/game/GameScene.cpp
index f09272d..4d3c8af 100644
--- a/game/GameScene.cpp
+++ b/game/GameScene.cpp
@@ -6,20 +6,21 @@
 #include "coins/CoinSystemScript.h"
 
 #include "background/BackgroundSubScene.h"
+#include "enemy/BattleScript.h"
+#include "enemy/EnemyBulletPool.h"
+#include "enemy/EnemyPool.h"
+#include "enemy/EnemySubScene.h"
 #include "hud/HudScript.h"
 #include "hud/HudSubScene.h"
 #include "hud/SpeedScript.h"
 #include "menus/endgame/EndGameSubScene.h"
-#include "player/PlayerSubScene.h"
 #include "player/PlayerBulletPool.h"
 #include "player/PlayerBulletSubScene.h"
-#include "enemy/EnemyPool.h"
-#include "enemy/EnemySubScene.h"
-#include "enemy/EnemyBulletPool.h"
-#include "enemy/BattleScript.h"
+#include "player/PlayerSubScene.h"
 #include "workers/WorkersSubScene.h"
 
 #include <cmath>
+#include <crepe/api/AI.h>
 #include <crepe/api/Animator.h>
 #include <crepe/api/Asset.h>
 #include <crepe/api/AudioSource.h>
@@ -29,7 +30,6 @@
 #include <crepe/api/Color.h>
 #include <crepe/api/Event.h>
 #include <crepe/api/GameObject.h>
-#include <crepe/api/AI.h>
 #include <crepe/api/ParticleEmitter.h>
 #include <crepe/api/Rigidbody.h>
 #include <crepe/api/Script.h>
@@ -44,7 +44,7 @@ void GameScene::load_scene() {
 	BackgroundSubScene background(*this);
 
 	GameObject camera = new_object("camera", "camera", vec2(650, 0));
-	Camera& camera_cam = camera.add_component<Camera>(
+	Camera & camera_cam = camera.add_component<Camera>(
 		ivec2(990, 720), vec2(VIEWPORT_X, VIEWPORT_Y),
 		Camera::Data {
 			.bg_color = Color::RED,
@@ -56,11 +56,11 @@ void GameScene::load_scene() {
 	camera.add_component<BehaviorScript>().set_script<SpeedScript>();
 	camera.add_component<BehaviorScript>().set_script<BattleScript>();
 	camera.add_component<Rigidbody>(Rigidbody::Data {});
-	AI& enemy_path_1 = camera.add_component<AI>(400);
+	AI & enemy_path_1 = camera.add_component<AI>(400);
 	enemy_path_1.make_oval_path(100, 100, camera.transform.position, 1.5708, true);
-	AI& enemy_path_2 = camera.add_component<AI>(400);
+	AI & enemy_path_2 = camera.add_component<AI>(400);
 	enemy_path_2.make_oval_path(100, 100, {0, 0}, 1.5708, true);
-	AI& enemy_path_3 = camera.add_component<AI>(400);
+	AI & enemy_path_3 = camera.add_component<AI>(400);
 	enemy_path_3.make_oval_path(100, 100, {0, 0}, 1.5708, true);
 	// camer.add_component<AI>
 	PlayerSubScene player(*this);
diff --git a/game/Random.cpp b/game/Random.cpp
index 59be3c5..ace6245 100644
--- a/game/Random.cpp
+++ b/game/Random.cpp
@@ -25,4 +25,3 @@ unsigned Random::u(unsigned upper, unsigned lower) {
 	unsigned x = rand() % range;
 	return x + lower;
 }
-
diff --git a/game/Random.h b/game/Random.h
index cf05e87..8af9669 100644
--- a/game/Random.h
+++ b/game/Random.h
@@ -6,6 +6,4 @@ public:
 	static double d(double upper = 1.0, double lower = 0.0);
 	static int i(int upper, int lower = 0);
 	static unsigned u(unsigned upper, unsigned lower = 0);
-
 };
-
diff --git a/game/StartGameScript.cpp b/game/StartGameScript.cpp
index 8fbc17d..77a8598 100644
--- a/game/StartGameScript.cpp
+++ b/game/StartGameScript.cpp
@@ -1,7 +1,7 @@
-#include <iostream>
 #include "StartGameScript.h"
 #include "Config.h"
 #include "api/BehaviorScript.h"
+#include <iostream>
 
 #include <crepe/api/Animator.h>
 #include <crepe/api/AudioSource.h>
diff --git a/game/enemy/BattleScript.cpp b/game/enemy/BattleScript.cpp
index 2564e3d..dde8da1 100644
--- a/game/enemy/BattleScript.cpp
+++ b/game/enemy/BattleScript.cpp
@@ -1,51 +1,51 @@
 #include "BattleScript.h"
-#include <crepe/api/AI.h>
 #include "EnemyScript.h"
+#include <crepe/api/AI.h>
 #include <crepe/api/BehaviorScript.h>
 #include <crepe/api/Metadata.h>
-#include "EnemyScript.h"
 using namespace std;
 using namespace crepe;
 
-BattleScript::BattleScript(){
-	engine.seed(rd());
-}
-void BattleScript::init(){
-	std::uniform_int_distribution<int> dist(2,10);
+BattleScript::BattleScript() { engine.seed(rd()); }
+void BattleScript::init() {
+	std::uniform_int_distribution<int> dist(2, 10);
 	int random_enemy_amount = dist(this->engine);
 	// this->create_battle(random_enemy_amount);
-	this->subscribe<BattleStartEvent>([this](const BattleStartEvent& e) -> bool {
+	this->subscribe<BattleStartEvent>([this](const BattleStartEvent & e) -> bool {
 		return this->create_battle(e);
 	});
 }
-void BattleScript::fixed_update(duration_t dt){
-	if(!battle_active) return;
+void BattleScript::fixed_update(duration_t dt) {
+	if (!battle_active) return;
 	bool enemies_alive = false;
-	RefVector<BehaviorScript> enemy_scripts = this->get_components_by_tag<BehaviorScript>("enemy");
-	
-	for(BehaviorScript& script : enemy_scripts){
-		if(script.active){
+	RefVector<BehaviorScript> enemy_scripts
+		= this->get_components_by_tag<BehaviorScript>("enemy");
+
+	for (BehaviorScript & script : enemy_scripts) {
+		if (script.active) {
 			enemies_alive = true;
 		}
 	}
-	if(!enemies_alive){
+	if (!enemies_alive) {
 		this->battle_active = false;
 		this->trigger_event<BattleWonEvent>();
 	}
 }
-bool BattleScript::create_battle(const BattleStartEvent& e){
+bool BattleScript::create_battle(const BattleStartEvent & e) {
 	this->battle_active = true;
-	RefVector<BehaviorScript> enemy_scripts = this->get_components_by_tag<BehaviorScript>("enemy");
-	std::uniform_real_distribution<float> dist(10,30);
-	for(int i = 0; i < e.num_enemies;i++){
-		BehaviorScript& script = enemy_scripts[i];
+	RefVector<BehaviorScript> enemy_scripts
+		= this->get_components_by_tag<BehaviorScript>("enemy");
+	std::uniform_real_distribution<float> dist(10, 30);
+	for (int i = 0; i < e.num_enemies; i++) {
+		BehaviorScript & script = enemy_scripts[i];
 		script.active = true;
-		this->trigger_event<SpawnEnemyEvent>(SpawnEnemyEvent{
-			.speed = dist(engine),
-			.column = i,
-		},script.game_object_id);
-		
+		this->trigger_event<SpawnEnemyEvent>(
+			SpawnEnemyEvent {
+				.speed = dist(engine),
+				.column = i,
+			},
+			script.game_object_id
+		);
 	}
 	return true;
 }
-
diff --git a/game/enemy/BattleScript.h b/game/enemy/BattleScript.h
index f91c597..ddd0be1 100644
--- a/game/enemy/BattleScript.h
+++ b/game/enemy/BattleScript.h
@@ -1,25 +1,24 @@
 #pragma once
 
-#include <crepe/api/Script.h>
 #include <crepe/api/BehaviorScript.h>
 #include <crepe/api/Event.h>
+#include <crepe/api/Script.h>
 #include <random>
-struct BattleWonEvent : public crepe::Event{
+struct BattleWonEvent : public crepe::Event {};
 
-};
-
-struct BattleStartEvent : public crepe::Event{
-	public: 
+struct BattleStartEvent : public crepe::Event {
+public:
 	int num_enemies = 0;
 };
-class BattleScript : public crepe::Script{
-	public:
+class BattleScript : public crepe::Script {
+public:
 	BattleScript();
 	void init() override;
 	void fixed_update(crepe::duration_t dt) override;
-	private:
+
+private:
 	bool battle_active = false;
 	std::random_device rd;
 	std::default_random_engine engine;
-	bool create_battle(const BattleStartEvent& e);
+	bool create_battle(const BattleStartEvent & e);
 };
diff --git a/game/enemy/EnemyBulletPool.cpp b/game/enemy/EnemyBulletPool.cpp
index 63afca3..3ee4816 100644
--- a/game/enemy/EnemyBulletPool.cpp
+++ b/game/enemy/EnemyBulletPool.cpp
@@ -1,5 +1,5 @@
-#include "EnemyBulletSubScene.h"
 #include "EnemyBulletPool.h"
+#include "EnemyBulletSubScene.h"
 using namespace std;
 
 void EnemyBulletPool::create_bullets(crepe::Scene & scn) {
diff --git a/game/enemy/EnemyBulletPool.h b/game/enemy/EnemyBulletPool.h
index e0de02c..ee53fc4 100644
--- a/game/enemy/EnemyBulletPool.h
+++ b/game/enemy/EnemyBulletPool.h
@@ -5,6 +5,7 @@
 class EnemyBulletPool {
 public:
 	void create_bullets(crepe::Scene & scn);
+
 private:
 	static constexpr int MAXIMUM_AMOUNT = 20;
 };
diff --git a/game/enemy/EnemyBulletScript.cpp b/game/enemy/EnemyBulletScript.cpp
index 55160ab..65c0c23 100644
--- a/game/enemy/EnemyBulletScript.cpp
+++ b/game/enemy/EnemyBulletScript.cpp
@@ -1,39 +1,39 @@
-#include <iostream>
 #include "EnemyBulletScript.h"
 #include <crepe/api/Camera.h>
-#include <crepe/api/Rigidbody.h>
 #include <crepe/api/Metadata.h>
+#include <crepe/api/Rigidbody.h>
+#include <iostream>
 
 #include "EnemyConfig.h"
 using namespace crepe;
 using namespace std;
-void EnemyBulletScript::init(){
-	this->subscribe<CollisionEvent>([this](const CollisionEvent& e) -> bool {
+void EnemyBulletScript::init() {
+	this->subscribe<CollisionEvent>([this](const CollisionEvent & e) -> bool {
 		return this->on_collide(e);
 	});
 }
-void EnemyBulletScript::fixed_update(crepe::duration_t dt){
-	Transform& transform = this->get_component<Transform>();
-	Camera& camera = this->get_components_by_name<Camera>("camera").front();
-	Transform& cam_transform = this->get_components_by_name<Transform>("camera").front();
-	Rigidbody& bullet_body = this->get_component<Rigidbody>();
+void EnemyBulletScript::fixed_update(crepe::duration_t dt) {
+	Transform & transform = this->get_component<Transform>();
+	Camera & camera = this->get_components_by_name<Camera>("camera").front();
+	Transform & cam_transform = this->get_components_by_name<Transform>("camera").front();
+	Rigidbody & bullet_body = this->get_component<Rigidbody>();
 	//move
 	transform.position.x += bullet_body.data.linear_velocity.x * dt.count();
 	vec2 half_screen = camera.viewport_size / 2;
 	float despawn_location = cam_transform.position.x - half_screen.x - 50;
-	if(transform.position.x < despawn_location){
+	if (transform.position.x < despawn_location) {
 		this->despawn_bullet();
 	}
 }
 
-void EnemyBulletScript::despawn_bullet(){
-	Transform& transform = this->get_component<Transform>();
-	Rigidbody& bullet_body = this->get_component<Rigidbody>();
+void EnemyBulletScript::despawn_bullet() {
+	Transform & transform = this->get_component<Transform>();
+	Rigidbody & bullet_body = this->get_component<Rigidbody>();
 	bullet_body.active = false;
 	transform.position = ENEMY_BULLET_POOL_LOCATION;
 }
 
-bool EnemyBulletScript::on_collide(const CollisionEvent& e){
+bool EnemyBulletScript::on_collide(const CollisionEvent & e) {
 	//cout << "collision happened with " << e.info.other.metadata.tag << endl;
 	this->despawn_bullet();
 	return false;
diff --git a/game/enemy/EnemyBulletScript.h b/game/enemy/EnemyBulletScript.h
index 822387f..7dab751 100644
--- a/game/enemy/EnemyBulletScript.h
+++ b/game/enemy/EnemyBulletScript.h
@@ -2,10 +2,10 @@
 #include <crepe/api/BehaviorScript.h>
 #include <crepe/api/Script.h>
 
-class EnemyBulletScript : public crepe::Script{
-	public:
-		void init() override;
-		void fixed_update(crepe::duration_t dt) override;
-		bool on_collide(const crepe::CollisionEvent& e);
-		void despawn_bullet();
+class EnemyBulletScript : public crepe::Script {
+public:
+	void init() override;
+	void fixed_update(crepe::duration_t dt) override;
+	bool on_collide(const crepe::CollisionEvent & e);
+	void despawn_bullet();
 };
diff --git a/game/enemy/EnemyBulletSubScene.cpp b/game/enemy/EnemyBulletSubScene.cpp
index 4f95ce4..edd8f0c 100644
--- a/game/enemy/EnemyBulletSubScene.cpp
+++ b/game/enemy/EnemyBulletSubScene.cpp
@@ -1,47 +1,49 @@
 #include <string>
 
-#include <crepe/api/GameObject.h>
-#include <crepe/api/Scene.h>
+#include "../Config.h"
+#include "EnemyConfig.h"
+#include <crepe/api/AI.h>
+#include <crepe/api/Animator.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/BehaviorScript.h>
-#include <crepe/api/Animator.h>
+#include <crepe/api/Scene.h>
 #include <crepe/api/Sprite.h>
-#include <crepe/api/AI.h>
-#include "../Config.h"
-#include "EnemyConfig.h"
 
+#include "../Random.h"
+#include "EnemyBulletScript.h"
 #include "EnemyBulletSubScene.h"
 #include "EnemyScript.h"
-#include "EnemyBulletScript.h"
-#include "../Random.h"
 using namespace crepe;
 using namespace std;
-int EnemyBulletSubScene::create(Scene & scn, int counter){
+int EnemyBulletSubScene::create(Scene & scn, int counter) {
 	string unique_name = "enemy_bullet_" + to_string(counter++);
-	GameObject bullet = scn.new_object(unique_name.c_str(),"enemy_bullet",ENEMY_BULLET_POOL_LOCATION,0,1);
-	
-	Rigidbody& bullet_body = bullet.add_component<Rigidbody>(Rigidbody::Data {
+	GameObject bullet = scn.new_object(
+		unique_name.c_str(), "enemy_bullet", ENEMY_BULLET_POOL_LOCATION, 0, 1
+	);
+
+	Rigidbody & bullet_body = bullet.add_component<Rigidbody>(Rigidbody::Data {
 		.gravity_scale = 0,
 		.body_type = Rigidbody::BodyType::KINEMATIC,
-		
-		.linear_velocity = vec2{-250,0},
+
+		.linear_velocity = vec2 {-250, 0},
 		.kinematic_collision = false,
 		.collision_layers = {COLL_LAY_MISSILE},
 		.collision_layer = COLL_LAY_BULLET
 	});
 	bullet_body.active = false;
-	BoxCollider& bullet_collider = bullet.add_component<BoxCollider>(vec2(60, 30));
+	BoxCollider & bullet_collider = bullet.add_component<BoxCollider>(vec2(60, 30));
 	//bullet_collider.active = false;
 	Asset bullet_asset {"asset/other_effects/effect_smgbullet_x2.png"};
 	Sprite & bullet_sprite = bullet.add_component<Sprite>(
 		bullet_asset,
 		Sprite::Data {
-			.flip = {true,false},
+			.flip = {true, false},
 			.sorting_in_layer = SORT_IN_LAY_OBSTACLES,
 			.order_in_layer = 1,
-			.size = vec2(60,0),
+			.size = vec2(60, 0),
 		}
 	);
 	bullet.add_component<BehaviorScript>().set_script<EnemyBulletScript>();
diff --git a/game/enemy/EnemyPool.cpp b/game/enemy/EnemyPool.cpp
index 50d0e6a..a7179bf 100644
--- a/game/enemy/EnemyPool.cpp
+++ b/game/enemy/EnemyPool.cpp
@@ -1,5 +1,5 @@
-#include "EnemySubScene.h"
 #include "EnemyPool.h"
+#include "EnemySubScene.h"
 using namespace std;
 void EnemyPool::create_enemies(crepe::Scene & scn) {
 	EnemySubScene enemy;
diff --git a/game/enemy/EnemyPool.h b/game/enemy/EnemyPool.h
index 916b930..f4d6765 100644
--- a/game/enemy/EnemyPool.h
+++ b/game/enemy/EnemyPool.h
@@ -5,6 +5,7 @@
 class EnemyPool {
 public:
 	void create_enemies(crepe::Scene & scn);
+
 private:
 	static constexpr int MAXIMUM_AMOUNT = 10;
 };
diff --git a/game/enemy/EnemyScript.cpp b/game/enemy/EnemyScript.cpp
index e87a58e..6558af5 100644
--- a/game/enemy/EnemyScript.cpp
+++ b/game/enemy/EnemyScript.cpp
@@ -1,109 +1,113 @@
-#include "../Config.h"
 #include "EnemyScript.h"
+#include "../Config.h"
+#include "../Random.h"
+#include "EnemyConfig.h"
+#include <crepe/api/AI.h>
 #include <crepe/api/Animator.h>
-#include <crepe/api/ParticleEmitter.h>
 #include <crepe/api/BoxCollider.h>
-#include <crepe/api/AI.h>
+#include <crepe/api/ParticleEmitter.h>
 #include <crepe/api/Rigidbody.h>
 #include <crepe/api/Transform.h>
 #include <crepe/types.h>
 #include <random>
-#include "../Random.h"
-#include "EnemyConfig.h"
 using namespace crepe;
 using namespace std;
-EnemyScript::EnemyScript(){
+EnemyScript::EnemyScript() {
 	engine.seed(rd());
 	this->last_fired = std::chrono::steady_clock::now();
-	this->shot_delay = std::chrono::duration<float>(3 + Random::f(1,0));
+	this->shot_delay = std::chrono::duration<float>(3 + Random::f(1, 0));
 }
-void EnemyScript::init(){
-	Metadata& meta = this->get_component<Metadata>();
-	this->subscribe<SpawnEnemyEvent>([this](const SpawnEnemyEvent& e) -> bool{
-		return this->spawn_enemy(e);
-	},meta.game_object_id);
-	this->subscribe<CollisionEvent>([this](const CollisionEvent& e) -> bool {
+void EnemyScript::init() {
+	Metadata & meta = this->get_component<Metadata>();
+	this->subscribe<SpawnEnemyEvent>(
+		[this](const SpawnEnemyEvent & e) -> bool { return this->spawn_enemy(e); },
+		meta.game_object_id
+	);
+	this->subscribe<CollisionEvent>([this](const CollisionEvent & e) -> bool {
 		return this->on_collide(e);
 	});
 };
 void EnemyScript::fixed_update(duration_t dt) {
-	if(this->alive){
+	if (this->alive) {
 		return;
 	}
-    Transform& transform = this->get_component<Transform>();
-    Transform& player_transform = this->get_components_by_name<Transform>("player").front();
-	Rigidbody& enemy_body = this->get_component<Rigidbody>();
-    AI& ai_component = this->get_component<AI>();
-	
+	Transform & transform = this->get_component<Transform>();
+	Transform & player_transform = this->get_components_by_name<Transform>("player").front();
+	Rigidbody & enemy_body = this->get_component<Rigidbody>();
+	AI & ai_component = this->get_component<AI>();
+
 	//transform.position += enemy_body.data.linear_velocity * dt.count();
-    float direction_to_player_y = player_transform.position.y - transform.position.y;
+	float direction_to_player_y = player_transform.position.y - transform.position.y;
 	float distance_to_player_y = std::abs(direction_to_player_y);
 
 	float adjustment_speed = speed * (distance_to_player_y / MAX_DISTANCE);
 
 	adjustment_speed = std::clamp(adjustment_speed, MIN_SPEED, MAX_SPEED);
 	// Move the path nodes on the Y-axis
-	for (vec2& path_node : ai_component.path) {
+	for (vec2 & path_node : ai_component.path) {
 		path_node.y += (direction_to_player_y > 0 ? 1 : -1) * adjustment_speed * dt.count();
 	}
 	//bullet fire logic:
 	auto now = std::chrono::steady_clock::now();
-    std::chrono::duration<float> elapsed = now - last_fired;
+	std::chrono::duration<float> elapsed = now - last_fired;
 	if (elapsed > shot_delay) {
-    	this->shoot(transform.position,0);
+		this->shoot(transform.position, 0);
 		last_fired = now;
-		this->shot_delay = std::chrono::duration<float>(Random::f(4,1));
+		this->shot_delay = std::chrono::duration<float>(Random::f(4, 1));
 	}
-
 }
-bool EnemyScript::spawn_enemy(const SpawnEnemyEvent& e){
+bool EnemyScript::spawn_enemy(const SpawnEnemyEvent & e) {
 	this->speed = e.speed;
-	AI& ai_component = this->get_component<AI>();
-	Transform& transform = this->get_component<Transform>();
-	Camera& camera = this->get_components_by_name<Camera>("camera").front();
-	Transform& cam_transform = this->get_components_by_name<Transform>("camera").front();
+	AI & ai_component = this->get_component<AI>();
+	Transform & transform = this->get_component<Transform>();
+	Camera & camera = this->get_components_by_name<Camera>("camera").front();
+	Transform & cam_transform = this->get_components_by_name<Transform>("camera").front();
 
 	vec2 half_screen = camera.viewport_size / 2;
-	float x_value = cam_transform.position.x + half_screen.x - 50 * (1 + e.column);  
-		uniform_real_distribution<float> dist(
+	float x_value = cam_transform.position.x + half_screen.x - 50 * (1 + e.column);
+	uniform_real_distribution<float> dist(
 		cam_transform.position.y - half_screen.y + 100,
 		cam_transform.position.y + half_screen.y - 100
-		);
+	);
 	float random_height = dist(engine);
-	vec2 spawn_location = {cam_transform.position.x + camera.viewport_size.x / 2 + 100,random_height};
+	vec2 spawn_location
+		= {cam_transform.position.x + camera.viewport_size.x / 2 + 100, random_height};
 	transform.position = spawn_location;
 	ai_component.path.clear();
-	ai_component.make_oval_path(10, 10, vec2{x_value,random_height}, 1.5708, true);
+	ai_component.make_oval_path(10, 10, vec2 {x_value, random_height}, 1.5708, true);
 	ai_component.active = true;
 	this->last_fired = std::chrono::steady_clock::now();
 	return true;
 }
 
-bool EnemyScript::on_collide(const CollisionEvent & e){
-	if(e.info.other.metadata.tag == "player_bullet"){
+bool EnemyScript::on_collide(const CollisionEvent & e) {
+	if (e.info.other.metadata.tag == "player_bullet") {
 		this->despawn_enemy();
 	}
-	BehaviorScript& enemy_script = this->get_component<BehaviorScript>();
+	BehaviorScript & enemy_script = this->get_component<BehaviorScript>();
 	enemy_script.active = false;
 	return false;
 }
-void EnemyScript::despawn_enemy(){
-	Transform& transform = this->get_component<Transform>();
+void EnemyScript::despawn_enemy() {
+	Transform & transform = this->get_component<Transform>();
 	transform.position = ENEMY_POOL_LOCATION;
-	AI& ai_component = this->get_component<AI>();
+	AI & ai_component = this->get_component<AI>();
 	// Rigidbody& enemy_body
 	ai_component.active = false;
 }
-void EnemyScript::shoot(const vec2& location,float angle){
-	RefVector<Transform> bullet_transforms = this->get_components_by_tag<Transform>("enemy_bullet");
+void EnemyScript::shoot(const vec2 & location, float angle) {
+	RefVector<Transform> bullet_transforms
+		= this->get_components_by_tag<Transform>("enemy_bullet");
 
-	for(Transform& bullet_pos : bullet_transforms){
-		if(bullet_pos.position.x == 0 && bullet_pos.position.y == -750){
+	for (Transform & bullet_pos : bullet_transforms) {
+		if (bullet_pos.position.x == 0 && bullet_pos.position.y == -750) {
 
 			bullet_pos.position = location;
 			bullet_pos.position.x -= 20;
-			Rigidbody& bullet_body = this->get_components_by_id<Rigidbody>(bullet_pos.game_object_id).front();
-			BoxCollider bullet_collider = this->get_components_by_id<BoxCollider>(bullet_pos.game_object_id).front();
+			Rigidbody & bullet_body
+				= this->get_components_by_id<Rigidbody>(bullet_pos.game_object_id).front();
+			BoxCollider bullet_collider
+				= this->get_components_by_id<BoxCollider>(bullet_pos.game_object_id).front();
 			bullet_collider.active = true;
 			bullet_body.active = true;
 			return;
diff --git a/game/enemy/EnemyScript.h b/game/enemy/EnemyScript.h
index 7babe4d..42ecac4 100644
--- a/game/enemy/EnemyScript.h
+++ b/game/enemy/EnemyScript.h
@@ -1,24 +1,24 @@
 #pragma once
+#include <chrono>
+#include <crepe/api/Camera.h>
 #include <crepe/api/Event.h>
 #include <crepe/api/Script.h>
-#include <crepe/api/Event.h>
-#include <crepe/api/Camera.h>
 #include <random>
-#include <chrono>
-struct SpawnEnemyEvent : public crepe::Event{
+struct SpawnEnemyEvent : public crepe::Event {
 	float speed = 0;
 	int column = 0;
 };
 class EnemyScript : public crepe::Script {
-	public:
+public:
 	EnemyScript();
 	void init() override;
 	void fixed_update(crepe::duration_t dt) override;
-	void shoot(const crepe::vec2& position,float angle);
+	void shoot(const crepe::vec2 & position, float angle);
 	bool on_collide(const crepe::CollisionEvent & collisionData);
 	void despawn_enemy();
-	bool spawn_enemy(const SpawnEnemyEvent& e);
-	private:
+	bool spawn_enemy(const SpawnEnemyEvent & e);
+
+private:
 	std::random_device rd;
 	std::default_random_engine engine;
 	bool alive = false;
diff --git a/game/enemy/EnemySubScene.cpp b/game/enemy/EnemySubScene.cpp
index 82401a1..7d3e784 100644
--- a/game/enemy/EnemySubScene.cpp
+++ b/game/enemy/EnemySubScene.cpp
@@ -1,54 +1,53 @@
 #include <string>
 
-
-#include <crepe/api/GameObject.h>
-#include <crepe/api/Scene.h>
+#include <crepe/api/AI.h>
+#include <crepe/api/Animator.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/BehaviorScript.h>
-#include <crepe/api/Animator.h>
+#include <crepe/api/Scene.h>
 #include <crepe/api/Sprite.h>
-#include <crepe/api/AI.h>
 
 #include "../Config.h"
-#include "EnemySubScene.h"
-#include "EnemyScript.h"
 #include "EnemyConfig.h"
+#include "EnemyScript.h"
+#include "EnemySubScene.h"
 using namespace crepe;
 using namespace std;
 //#TODO add sound
-int EnemySubScene::create(Scene & scn,int enemy_counter){
+int EnemySubScene::create(Scene & scn, int enemy_counter) {
 
 	string unique_name = "enemy_" + to_string(enemy_counter++);
-	GameObject enemy = scn.new_object(unique_name.c_str(),"enemy",ENEMY_POOL_LOCATION,0,1);
-	
+	GameObject enemy = scn.new_object(unique_name.c_str(), "enemy", ENEMY_POOL_LOCATION, 0, 1);
+
 	enemy.add_component<Rigidbody>(Rigidbody::Data {
 		.gravity_scale = 0,
 		.body_type = Rigidbody::BodyType::DYNAMIC,
 		.max_linear_velocity = 400,
-		.collision_layers = {COLL_LAY_BOT_TOP,COLL_LAY_PLAYER_BULLET},
+		.collision_layers = {COLL_LAY_BOT_TOP, COLL_LAY_PLAYER_BULLET},
 		.collision_layer = COLL_LAY_ENEMY,
-		
+
 	});
 	Asset enemy_body_asset {"asset/workers/worker2Body.png"};
 	enemy.add_component<BoxCollider>(vec2(50, 50));
 	Sprite & enemy_body_sprite = enemy.add_component<Sprite>(
 		enemy_body_asset,
 		Sprite::Data {
-			.flip = {true,false},
+			.flip = {true, false},
 			.sorting_in_layer = SORT_IN_LAY_WORKERS_FRONT,
 			.order_in_layer = 0,
 			.size = vec2(0, 50),
 		}
 	);
-	Animator& body_animator = enemy.add_component<Animator>(
+	Animator & body_animator = enemy.add_component<Animator>(
 		enemy_body_sprite, ivec2(32, 32), uvec2(4, 8),
 		Animator::Data {
 			.fps = 5,
 			.col = 3,
 			.row = 1,
-			
+
 			.looping = false,
 		}
 	);
@@ -58,7 +57,7 @@ int EnemySubScene::create(Scene & scn,int enemy_counter){
 	Sprite & enemy_head_sprite = enemy.add_component<Sprite>(
 		enemy_head_asset,
 		Sprite::Data {
-			.flip = {true,false},
+			.flip = {true, false},
 			.sorting_in_layer = SORT_IN_LAY_WORKERS_FRONT,
 			.order_in_layer = 1,
 			.size = vec2(0, 50),
@@ -77,7 +76,7 @@ int EnemySubScene::create(Scene & scn,int enemy_counter){
 	Sprite & enemy_jetpack_sprite = enemy.add_component<Sprite>(
 		enemy_jetpack_asset,
 		Sprite::Data {
-			.flip = {true,false},
+			.flip = {true, false},
 			.sorting_in_layer = SORT_IN_LAY_WORKERS_FRONT,
 			.order_in_layer = 2,
 			.size = vec2(0, 60),
@@ -92,10 +91,11 @@ int EnemySubScene::create(Scene & scn,int enemy_counter){
 			.looping = true,
 		}
 	);
-	
-	AI& ai_component = enemy.add_component<AI>(3000);
+
+	AI & ai_component = enemy.add_component<AI>(3000);
 	ai_component.path_follow_on();
-	BehaviorScript& enemy_script = enemy.add_component<BehaviorScript>().set_script<EnemyScript>();
+	BehaviorScript & enemy_script
+		= enemy.add_component<BehaviorScript>().set_script<EnemyScript>();
 	enemy_script.active = false;
 	return enemy_counter;
 }
diff --git a/game/enemy/EnemySubScene.h b/game/enemy/EnemySubScene.h
index 68bb9a1..3899250 100644
--- a/game/enemy/EnemySubScene.h
+++ b/game/enemy/EnemySubScene.h
@@ -6,5 +6,5 @@ class Scene;
 
 class EnemySubScene {
 public:
-	int create(crepe::Scene & scn,int enemy_counter);
+	int create(crepe::Scene & scn, int enemy_counter);
 };
diff --git a/game/main.cpp b/game/main.cpp
index 9b25444..858fad4 100644
--- a/game/main.cpp
+++ b/game/main.cpp
@@ -9,7 +9,7 @@ using namespace crepe;
 
 int main() {
 	Engine gameloop;
-	
+
 	gameloop.add_scene<MainMenuScene>();
 	gameloop.add_scene<ShopMenuScene>();
 	gameloop.add_scene<GameScene>();
diff --git a/game/player/PlayerBulletPool.cpp b/game/player/PlayerBulletPool.cpp
index 4cd115e..5285ec8 100644
--- a/game/player/PlayerBulletPool.cpp
+++ b/game/player/PlayerBulletPool.cpp
@@ -1,5 +1,5 @@
-#include "PlayerBulletSubScene.h"
 #include "PlayerBulletPool.h"
+#include "PlayerBulletSubScene.h"
 using namespace std;
 
 void PlayerBulletPool::create_bullets(crepe::Scene & scn) {
diff --git a/game/player/PlayerBulletPool.h b/game/player/PlayerBulletPool.h
index a8ba2fb..9618d54 100644
--- a/game/player/PlayerBulletPool.h
+++ b/game/player/PlayerBulletPool.h
@@ -5,6 +5,7 @@
 class PlayerBulletPool {
 public:
 	void create_bullets(crepe::Scene & scn);
+
 private:
 	static constexpr int MAXIMUM_AMOUNT = 20;
 };
diff --git a/game/player/PlayerBulletScript.cpp b/game/player/PlayerBulletScript.cpp
index 6beb9f1..a76b7eb 100644
--- a/game/player/PlayerBulletScript.cpp
+++ b/game/player/PlayerBulletScript.cpp
@@ -1,41 +1,41 @@
 
 #include <crepe/api/Camera.h>
-#include <crepe/api/Rigidbody.h>
 #include <crepe/api/Metadata.h>
+#include <crepe/api/Rigidbody.h>
 
 #include "PlayerBulletScript.h"
 
 using namespace crepe;
 using namespace std;
-void PlayerBulletScript::init(){
-	this->subscribe<CollisionEvent>([this](const CollisionEvent& e) -> bool {
+void PlayerBulletScript::init() {
+	this->subscribe<CollisionEvent>([this](const CollisionEvent & e) -> bool {
 		return this->on_collide(e);
 	});
 }
-void PlayerBulletScript::fixed_update(crepe::duration_t dt){
-	Transform& transform = this->get_component<Transform>();
-	Camera& camera = this->get_components_by_name<Camera>("camera").front();
-	Transform& cam_transform = this->get_components_by_name<Transform>("camera").front();
-	Rigidbody& bullet_body = this->get_component<Rigidbody>();
+void PlayerBulletScript::fixed_update(crepe::duration_t dt) {
+	Transform & transform = this->get_component<Transform>();
+	Camera & camera = this->get_components_by_name<Camera>("camera").front();
+	Transform & cam_transform = this->get_components_by_name<Transform>("camera").front();
+	Rigidbody & bullet_body = this->get_component<Rigidbody>();
 	transform.rotation += bullet_body.data.angular_velocity;
 	transform.position += bullet_body.data.linear_velocity * dt.count();
 	vec2 half_screen = camera.viewport_size / 2;
 	float despawn_location = cam_transform.position.x + half_screen.x + 50;
-	if(transform.position.x > despawn_location){
+	if (transform.position.x > despawn_location) {
 		this->despawn_bullet();
 	}
 }
 
-void PlayerBulletScript::despawn_bullet(){
-	Transform& transform = this->get_component<Transform>();
-	Rigidbody& bullet_body = this->get_component<Rigidbody>();
+void PlayerBulletScript::despawn_bullet() {
+	Transform & transform = this->get_component<Transform>();
+	Rigidbody & bullet_body = this->get_component<Rigidbody>();
 	bullet_body.active = false;
-	BehaviorScript& bullet_script = this->get_component<BehaviorScript>();
+	BehaviorScript & bullet_script = this->get_component<BehaviorScript>();
 	bullet_script.active = false;
-	transform.position = {0,-850};
+	transform.position = {0, -850};
 }
 
-bool PlayerBulletScript::on_collide(const CollisionEvent& e){
+bool PlayerBulletScript::on_collide(const CollisionEvent & e) {
 	this->despawn_bullet();
 	return false;
 }
diff --git a/game/player/PlayerBulletScript.h b/game/player/PlayerBulletScript.h
index 559b815..0637790 100644
--- a/game/player/PlayerBulletScript.h
+++ b/game/player/PlayerBulletScript.h
@@ -2,10 +2,10 @@
 #include <crepe/api/BehaviorScript.h>
 #include <crepe/api/Script.h>
 
-class PlayerBulletScript : public crepe::Script{
-	public:
-		void init() override;
-		void fixed_update(crepe::duration_t dt) override;
-		bool on_collide(const crepe::CollisionEvent& e);
-		void despawn_bullet();
+class PlayerBulletScript : public crepe::Script {
+public:
+	void init() override;
+	void fixed_update(crepe::duration_t dt) override;
+	bool on_collide(const crepe::CollisionEvent & e);
+	void despawn_bullet();
 };
diff --git a/game/player/PlayerBulletSubScene.cpp b/game/player/PlayerBulletSubScene.cpp
index 96c6b9a..62bcf3e 100644
--- a/game/player/PlayerBulletSubScene.cpp
+++ b/game/player/PlayerBulletSubScene.cpp
@@ -1,51 +1,52 @@
 #include <string>
 
-#include <crepe/api/GameObject.h>
-#include <crepe/api/Scene.h>
+#include "../Config.h"
+#include <crepe/api/AI.h>
+#include <crepe/api/Animator.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/BehaviorScript.h>
-#include <crepe/api/Animator.h>
+#include <crepe/api/Scene.h>
 #include <crepe/api/Sprite.h>
-#include <crepe/api/AI.h>
-#include "../Config.h"
-
 
+#include "PlayerBulletScript.h"
 #include "PlayerBulletSubScene.h"
 #include "PlayerScript.h"
-#include "PlayerBulletScript.h"
 using namespace crepe;
 using namespace std;
-int PlayerBulletSubScene::create(Scene & scn,int counter){
+int PlayerBulletSubScene::create(Scene & scn, int counter) {
 	string unique_name = "player_bullet_" + to_string(counter++);
-	GameObject player_bullet = scn.new_object(unique_name.c_str(),"player_bullet",vec2{0,-850},0,1);
-	
-	Rigidbody& player_bullet_body = player_bullet.add_component<Rigidbody>(Rigidbody::Data {
+	GameObject player_bullet
+		= scn.new_object(unique_name.c_str(), "player_bullet", vec2 {0, -850}, 0, 1);
+
+	Rigidbody & player_bullet_body = player_bullet.add_component<Rigidbody>(Rigidbody::Data {
 		.gravity_scale = 0,
 		.body_type = Rigidbody::BodyType::KINEMATIC,
-		.linear_velocity = vec2{300,0},
+		.linear_velocity = vec2 {300, 0},
 		.angular_velocity = 150,
 		.kinematic_collision = false,
 		.collision_layers = {COLL_LAY_ENEMY},
-		
+
 		.collision_layer = COLL_LAY_PLAYER_BULLET,
-		
-		
+
 	});
 	player_bullet_body.active = false;
-	BoxCollider& player_bullet_collider = player_bullet.add_component<BoxCollider>(vec2(30, 30));
+	BoxCollider & player_bullet_collider
+		= player_bullet.add_component<BoxCollider>(vec2(30, 30));
 
 	Asset player_bullet_asset {"asset/other_effects/crepe.png"};
 	Sprite & player_bullet_sprite = player_bullet.add_component<Sprite>(
 		player_bullet_asset,
 		Sprite::Data {
-			.flip = {true,false},
+			.flip = {true, false},
 			.sorting_in_layer = SORT_IN_LAY_OBSTACLES,
 			.order_in_layer = 1,
-			.size = vec2(30,0),
+			.size = vec2(30, 0),
 		}
 	);
-	player_bullet.add_component<BehaviorScript>().set_script<PlayerBulletScript>().active = false;
+	player_bullet.add_component<BehaviorScript>().set_script<PlayerBulletScript>().active
+		= false;
 	return counter;
 }
diff --git a/game/player/PlayerBulletSubScene.h b/game/player/PlayerBulletSubScene.h
index 425d554..72eda62 100644
--- a/game/player/PlayerBulletSubScene.h
+++ b/game/player/PlayerBulletSubScene.h
@@ -6,5 +6,5 @@ class Scene;
 
 class PlayerBulletSubScene {
 public:
-	int create(crepe::Scene & scn,int counter);
+	int create(crepe::Scene & scn, int counter);
 };
diff --git a/game/player/PlayerScript.cpp b/game/player/PlayerScript.cpp
index 7bc5e55..d32da0b 100644
--- a/game/player/PlayerScript.cpp
+++ b/game/player/PlayerScript.cpp
@@ -4,9 +4,9 @@
 #include "../enemy/BattleScript.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/BoxCollider.h>
 #include <crepe/api/Transform.h>
 #include <crepe/types.h>
 
@@ -60,7 +60,8 @@ bool PlayerScript::on_collision(const CollisionEvent & ev) {
 		audio.play();
 
 		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 = true;
 			anim.set_anim(5);
@@ -91,19 +92,19 @@ void PlayerScript::fixed_update(crepe::duration_t dt) {
 	for (ParticleEmitter & emitter : emitters) {
 		emitter.data.boundary.offset = vec2(0, -transform.position.y);
 	}
-	
+
 	Rigidbody & rb = this->get_components_by_name<Rigidbody>("player").front();
 	if (this->get_key_state(Keycode::P)) {
-		this->trigger_event<BattleStartEvent>(BattleStartEvent{
+		this->trigger_event<BattleStartEvent>(BattleStartEvent {
 			.num_enemies = 5,
 		});
 	}
-	if(this->get_key_state(Keycode::ENTER)){
+	if (this->get_key_state(Keycode::ENTER)) {
 
 		auto now = std::chrono::steady_clock::now();
 		std::chrono::duration<float> elapsed = now - last_fired;
 		if (elapsed > shot_delay) {
-			this->shoot(transform.position,0);
+			this->shoot(transform.position, 0);
 			last_fired = now;
 		}
 	}
@@ -155,18 +156,23 @@ void PlayerScript::fixed_update(crepe::duration_t dt) {
 	}
 }
 
-void PlayerScript::shoot(const vec2& location,float angle){
-	RefVector<Transform> bullet_transforms = this->get_components_by_tag<Transform>("player_bullet");
+void PlayerScript::shoot(const vec2 & location, float angle) {
+	RefVector<Transform> bullet_transforms
+		= this->get_components_by_tag<Transform>("player_bullet");
 
-	for(Transform& bullet_pos : bullet_transforms){
-		if(bullet_pos.position.x == 0 && bullet_pos.position.y == -850){
+	for (Transform & bullet_pos : bullet_transforms) {
+		if (bullet_pos.position.x == 0 && bullet_pos.position.y == -850) {
 
 			bullet_pos.position = location;
 			bullet_pos.position.x += 20;
-			Rigidbody& bullet_body = this->get_components_by_id<Rigidbody>(bullet_pos.game_object_id).front();
-			BoxCollider bullet_collider = this->get_components_by_id<BoxCollider>(bullet_pos.game_object_id).front();
+			Rigidbody & bullet_body
+				= this->get_components_by_id<Rigidbody>(bullet_pos.game_object_id).front();
+			BoxCollider bullet_collider
+				= this->get_components_by_id<BoxCollider>(bullet_pos.game_object_id).front();
 			bullet_body.active = true;
-			BehaviorScript& bullet_script = this->get_components_by_id<BehaviorScript>(bullet_pos.game_object_id).front();
+			BehaviorScript & bullet_script
+				= this->get_components_by_id<BehaviorScript>(bullet_pos.game_object_id)
+					  .front();
 			bullet_script.active = true;
 			return;
 		}
diff --git a/game/player/PlayerScript.h b/game/player/PlayerScript.h
index 30f39c6..e7d860a 100644
--- a/game/player/PlayerScript.h
+++ b/game/player/PlayerScript.h
@@ -1,17 +1,18 @@
 #pragma once
 
+#include <chrono>
 #include <crepe/api/Event.h>
 #include <crepe/api/Script.h>
-#include <chrono>
 class PlayerScript : public crepe::Script {
 public:
 	void init();
 	void fixed_update(crepe::duration_t dt);
-	
+
 private:
 	bool on_collision(const crepe::CollisionEvent & ev);
 	// bool on_key_up(const crepe::KeyReleaseEvent& ev);
-	void shoot(const crepe::vec2& location,float angle);
+	void shoot(const crepe::vec2 & location, float angle);
+
 private:
 	int prev_anim = 0;
 	std::chrono::time_point<std::chrono::steady_clock> last_fired;
diff --git a/game/player/PlayerSubScene.cpp b/game/player/PlayerSubScene.cpp
index 1203ca0..cf11162 100644
--- a/game/player/PlayerSubScene.cpp
+++ b/game/player/PlayerSubScene.cpp
@@ -149,7 +149,8 @@ PlayerSubScene::PlayerSubScene(Scene & scn) {
 		.body_type = Rigidbody::BodyType::DYNAMIC,
 		//.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},
+		= {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;
-- 
cgit v1.2.3


From 7739a80176cea889ce240d18d354c5174825b25a Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Thu, 9 Jan 2025 14:46:30 +0100
Subject: workers during normal sequence working

---
 game/Config.h                       |  1 +
 game/enemy/BattleScript.cpp         | 15 ++++++---
 game/enemy/BattleScript.h           |  2 ++
 game/enemy/EnemyBulletScript.cpp    |  2 +-
 game/enemy/EnemyBulletSubScene.cpp  |  7 ++---
 game/enemy/EnemyScript.cpp          | 61 +++++++++++++++++++++++++++++++------
 game/enemy/EnemyScript.h            | 15 ++++++---
 game/enemy/EnemySubScene.cpp        | 41 +++++++++++++++++++++++++
 game/main.cpp                       |  1 +
 game/player/PlayerScript.cpp        |  6 ++++
 game/player/PlayerScript.h          |  5 ++-
 game/player/PlayerSubScene.cpp      |  7 +++--
 game/scheduler/ObjectsScheduler.cpp | 26 ++++++++++++++--
 13 files changed, 159 insertions(+), 30 deletions(-)

(limited to 'game/enemy/BattleScript.h')

diff --git a/game/Config.h b/game/Config.h
index 8fa41ba..3242a03 100644
--- a/game/Config.h
+++ b/game/Config.h
@@ -34,6 +34,7 @@ static constexpr int COLL_LAY_MISSILE = 8; // Only for GameScene
 static constexpr int COLL_LAY_BULLET = 9; // Only for GameScene
 static constexpr int COLL_LAY_ENEMY = 10; // Only for GameScene
 static constexpr int COLL_LAY_PLAYER_BULLET = 11; // Only for GameScene
+static constexpr int COLL_LAY_PLAYER_SHIELD = 12; // Only for GameScene
 
 static constexpr float GAME_HEIGHT = 800; // In game units
 static constexpr float HALLWAY_HEIGHT = 475; // In game units
diff --git a/game/enemy/BattleScript.cpp b/game/enemy/BattleScript.cpp
index 6d96ef6..3eda89e 100644
--- a/game/enemy/BattleScript.cpp
+++ b/game/enemy/BattleScript.cpp
@@ -1,6 +1,7 @@
 #include "BattleScript.h"
 #include "EnemyScript.h"
 #include <crepe/api/AI.h>
+#include <iostream>
 #include <crepe/api/BehaviorScript.h>
 #include <crepe/api/Metadata.h>
 using namespace std;
@@ -28,16 +29,23 @@ void BattleScript::fixed_update(duration_t dt) {
 	}
 	if (!enemies_alive) {
 		this->battle_active = false;
+		cout << "battle won" << endl;
 		this->trigger_event<BattleWonEvent>();
 	}
 }
 bool BattleScript::create_battle(const BattleStartEvent & e) {
-	this->battle_active = true;
+	this->battle_active = e.battle;
+	this->spawn_enemies(e.num_enemies);
+	return false;
+}
+void BattleScript::spawn_enemies(int amount) {
 	RefVector<BehaviorScript> enemy_scripts
 		= this->get_components_by_tag<BehaviorScript>("enemy");
-	std::uniform_real_distribution<float> dist(10, 30);
-	for (int i = 0; i < e.num_enemies; i++) {
+	std::uniform_real_distribution<float> dist(70, 150);
+	
+	for (int i = 0; i < amount; i++) {
 		BehaviorScript & script = enemy_scripts[i];
+		if(script.active == true) continue;
 		script.active = true;
 		this->queue_event<SpawnEnemyEvent>(
 			SpawnEnemyEvent {
@@ -47,5 +55,4 @@ bool BattleScript::create_battle(const BattleStartEvent & e) {
 			script.game_object_id
 		);
 	}
-	return false;
 }
diff --git a/game/enemy/BattleScript.h b/game/enemy/BattleScript.h
index ddd0be1..57aa16c 100644
--- a/game/enemy/BattleScript.h
+++ b/game/enemy/BattleScript.h
@@ -9,6 +9,7 @@ struct BattleWonEvent : public crepe::Event {};
 struct BattleStartEvent : public crepe::Event {
 public:
 	int num_enemies = 0;
+	bool battle = false;
 };
 class BattleScript : public crepe::Script {
 public:
@@ -20,5 +21,6 @@ private:
 	bool battle_active = false;
 	std::random_device rd;
 	std::default_random_engine engine;
+	void spawn_enemies(int amount);
 	bool create_battle(const BattleStartEvent & e);
 };
diff --git a/game/enemy/EnemyBulletScript.cpp b/game/enemy/EnemyBulletScript.cpp
index 65c0c23..d208a88 100644
--- a/game/enemy/EnemyBulletScript.cpp
+++ b/game/enemy/EnemyBulletScript.cpp
@@ -18,7 +18,7 @@ void EnemyBulletScript::fixed_update(crepe::duration_t dt) {
 	Transform & cam_transform = this->get_components_by_name<Transform>("camera").front();
 	Rigidbody & bullet_body = this->get_component<Rigidbody>();
 	//move
-	transform.position.x += bullet_body.data.linear_velocity.x * dt.count();
+	transform.position += bullet_body.data.linear_velocity * dt.count();
 	vec2 half_screen = camera.viewport_size / 2;
 	float despawn_location = cam_transform.position.x - half_screen.x - 50;
 	if (transform.position.x < despawn_location) {
diff --git a/game/enemy/EnemyBulletSubScene.cpp b/game/enemy/EnemyBulletSubScene.cpp
index ad2ca9d..eb43f0a 100644
--- a/game/enemy/EnemyBulletSubScene.cpp
+++ b/game/enemy/EnemyBulletSubScene.cpp
@@ -27,14 +27,13 @@ int EnemyBulletSubScene::create(Scene & scn, int counter) {
 	Rigidbody & bullet_body = bullet.add_component<Rigidbody>(Rigidbody::Data {
 		.gravity_scale = 0,
 		.body_type = Rigidbody::BodyType::KINEMATIC,
-
-		.linear_velocity = vec2 {-250, 0},
+		.linear_velocity = vec2 {-400, 0},
 		.kinematic_collision = false,
-		.collision_layers = {COLL_LAY_MISSILE, COLL_LAY_ZAPPER},
+		.collision_layers = {COLL_LAY_BOT_TOP,COLL_LAY_MISSILE, COLL_LAY_ZAPPER},
 		.collision_layer = COLL_LAY_BULLET
 	});
 	bullet_body.active = false;
-	BoxCollider & bullet_collider = bullet.add_component<BoxCollider>(vec2(60, 30));
+	BoxCollider & bullet_collider = bullet.add_component<BoxCollider>(vec2(40, 10));
 	//bullet_collider.active = false;
 	Asset bullet_asset {"asset/other_effects/effect_smgbullet_x2.png"};
 	Sprite & bullet_sprite = bullet.add_component<Sprite>(
diff --git a/game/enemy/EnemyScript.cpp b/game/enemy/EnemyScript.cpp
index 5c03539..04d577a 100644
--- a/game/enemy/EnemyScript.cpp
+++ b/game/enemy/EnemyScript.cpp
@@ -2,6 +2,7 @@
 #include "../Config.h"
 #include "../Random.h"
 #include "EnemyConfig.h"
+#include <iostream>
 #include <crepe/api/AI.h>
 #include <crepe/api/Animator.h>
 #include <crepe/api/AudioSource.h>
@@ -9,7 +10,11 @@
 #include <crepe/api/ParticleEmitter.h>
 #include <crepe/api/Rigidbody.h>
 #include <crepe/api/Transform.h>
+#include <crepe/api/Sprite.h>
 #include <crepe/types.h>
+#include "../Random.h"
+#include "api/Color.h"
+#include "api/Sprite.h"
 #include <random>
 using namespace crepe;
 using namespace std;
@@ -40,23 +45,33 @@ void EnemyScript::fixed_update(duration_t dt) {
 	//transform.position += enemy_body.data.linear_velocity * dt.count();
 	float direction_to_player_y = player_transform.position.y - transform.position.y;
 	float distance_to_player_y = std::abs(direction_to_player_y);
+	
 
 	float adjustment_speed = speed * (distance_to_player_y / MAX_DISTANCE);
-
+	//cout << "before clamp speed: " << adjustment_speed << endl;
 	adjustment_speed = std::clamp(adjustment_speed, MIN_SPEED, MAX_SPEED);
 	// Move the path nodes on the Y-axis
+	//cout << "adjusted_speed: " << adjustment_speed << endl;
+	Rigidbody& player_body = this->get_components_by_tag<Rigidbody>("player").front();
 	for (vec2 & path_node : ai_component.path) {
 		path_node.y += (direction_to_player_y > 0 ? 1 : -1) * adjustment_speed * dt.count();
+		path_node.x += player_body.data.linear_velocity.x * dt.count();
 	}
 	//bullet fire logic:
 	auto now = std::chrono::steady_clock::now();
 	std::chrono::duration<float> elapsed = now - last_fired;
 	if (elapsed > shot_delay) {
-		this->shoot(transform.position, 0);
+		this->shoot(transform.position);
 		last_fired = now;
 		this->shot_delay = std::chrono::duration<float>(Random::f(4, 1));
 	}
+	std::chrono::duration<float> elapsed_hit = now - last_hit;
+	//hit blink timer
+	if(elapsed_hit > blink_time){
+		set_hit_blink(false);
+	}
 }
+
 bool EnemyScript::spawn_enemy(const SpawnEnemyEvent & e) {
 	this->speed = e.speed;
 	AI & ai_component = this->get_component<AI>();
@@ -65,7 +80,7 @@ bool EnemyScript::spawn_enemy(const SpawnEnemyEvent & e) {
 	Transform & cam_transform = this->get_components_by_name<Transform>("camera").front();
 
 	vec2 half_screen = camera.viewport_size / 2;
-	float x_value = cam_transform.position.x + half_screen.x - 50 * (1 + e.column);
+	float x_value = cam_transform.position.x + half_screen.x - 70 * (1 + e.column);
 	uniform_real_distribution<float> dist(
 		cam_transform.position.y - half_screen.y + 100,
 		cam_transform.position.y + half_screen.y - 100
@@ -75,31 +90,52 @@ bool EnemyScript::spawn_enemy(const SpawnEnemyEvent & e) {
 		= {cam_transform.position.x + camera.viewport_size.x / 2 + 100, random_height};
 	transform.position = spawn_location;
 	ai_component.path.clear();
-	ai_component.make_oval_path(10, 10, vec2 {x_value, random_height}, 1.5708, true);
+	ai_component.make_oval_path(10, 30, vec2 {x_value, random_height}, 1.5708, true);
 	ai_component.active = true;
 	this->last_fired = std::chrono::steady_clock::now();
 	return false;
 }
 
+void EnemyScript::set_hit_blink(bool status){
+	RefVector<Sprite> sprites = this->get_components<Sprite>();
+	for(Sprite& sprite : sprites){
+		if(status){
+			sprite.data.color = Color::RED;
+			continue;
+		}
+		sprite.data.color = Color::WHITE;
+	}
+}
+
 bool EnemyScript::on_collide(const CollisionEvent & e) {
 	if (e.info.other.metadata.tag == "player_bullet") {
+		this->health--;
+		last_hit = std::chrono::steady_clock::now();
+		//Sprite& sprite;
+		set_hit_blink(true);
+		
+	}
+	if(health <= 0){
 		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;
 }
+
 void EnemyScript::despawn_enemy() {
 	Transform & transform = this->get_component<Transform>();
+	BehaviorScript & enemy_script = this->get_component<BehaviorScript>();
+	enemy_script.active = false;
+	Animator & body_animator = this->get_components<Animator>().front();
+	body_animator.data.col = 2;
 	transform.position = ENEMY_POOL_LOCATION;
 	AI & ai_component = this->get_component<AI>();
 	// Rigidbody& enemy_body
 	ai_component.active = false;
 }
-void EnemyScript::shoot(const vec2 & location, float angle) {
+
+void EnemyScript::shoot(const vec2 & location) {
 	RefVector<Transform> bullet_transforms
 		= this->get_components_by_tag<Transform>("enemy_bullet");
 
@@ -120,3 +156,10 @@ void EnemyScript::shoot(const vec2 & location, float angle) {
 		}
 	}
 }
+
+void EnemyScript::create_tank(){
+	RefVector<Sprite> sprites = this->get_components<Sprite>();
+	Sprite& tank_body = sprites[2];
+	tank_body.active = true;
+
+}
diff --git a/game/enemy/EnemyScript.h b/game/enemy/EnemyScript.h
index 42ecac4..24799a5 100644
--- a/game/enemy/EnemyScript.h
+++ b/game/enemy/EnemyScript.h
@@ -13,19 +13,24 @@ public:
 	EnemyScript();
 	void init() override;
 	void fixed_update(crepe::duration_t dt) override;
-	void shoot(const crepe::vec2 & position, float angle);
+	void shoot(const crepe::vec2 & position);
 	bool on_collide(const crepe::CollisionEvent & collisionData);
 	void despawn_enemy();
 	bool spawn_enemy(const SpawnEnemyEvent & e);
-
+	void create_tank();
+	void create_soldier();
+	void set_hit_blink(bool status);
 private:
 	std::random_device rd;
 	std::default_random_engine engine;
 	bool alive = false;
 	float speed = 50;
-	const float MIN_SPEED = 10;
-	const float MAX_SPEED = 130;
-	const float MAX_DISTANCE = 100;
+	int health = 2;
+	const float MIN_SPEED = 20;
+	const float MAX_SPEED = 150;
+	const float MAX_DISTANCE = 200;
 	std::chrono::time_point<std::chrono::steady_clock> last_fired;
+	std::chrono::time_point<std::chrono::steady_clock> last_hit;
 	std::chrono::duration<float> shot_delay = std::chrono::duration<float>(0);
+	std::chrono::duration<float> blink_time = std::chrono::duration<float>(0.1);
 };
diff --git a/game/enemy/EnemySubScene.cpp b/game/enemy/EnemySubScene.cpp
index 607b9a9..edc537f 100644
--- a/game/enemy/EnemySubScene.cpp
+++ b/game/enemy/EnemySubScene.cpp
@@ -31,6 +31,7 @@ int EnemySubScene::create(Scene & scn, int enemy_counter) {
 		.collision_layer = COLL_LAY_ENEMY,
 
 	});
+	// normal body
 	Asset enemy_body_asset {"asset/workers/worker2Body.png"};
 	enemy.add_component<BoxCollider>(vec2(50, 50));
 	Sprite & enemy_body_sprite = enemy.add_component<Sprite>(
@@ -51,7 +52,9 @@ int EnemySubScene::create(Scene & scn, int enemy_counter) {
 			.looping = false,
 		}
 	);
+	enemy_body_sprite.active = false;
 	body_animator.pause();
+	body_animator.active = true;
 	enemy.add_component<BoxCollider>(vec2(40, 60), vec2(-20, 0));
 	Asset enemy_head_asset {"asset/workers/worker2Head.png"};
 	Sprite & enemy_head_sprite = enemy.add_component<Sprite>(
@@ -71,6 +74,32 @@ int EnemySubScene::create(Scene & scn, int enemy_counter) {
 			.looping = true,
 		}
 	);
+	// tanky body 
+	Asset tank_body_asset {"asset/workers/workerFatBody.png"};
+	enemy.add_component<BoxCollider>(vec2(50, 50));
+	Sprite & tank_body_sprite = enemy.add_component<Sprite>(
+		tank_body_asset,
+		Sprite::Data {
+			.flip = {true, false},
+			.sorting_in_layer = SORT_IN_LAY_WORKERS_FRONT,
+			.order_in_layer = 0,
+			.size = vec2(0, 50),
+		}
+	);
+	tank_body_sprite.active = true;
+	Animator & tank_animator = enemy.add_component<Animator>(
+		tank_body_sprite, ivec2(32, 32), uvec2(4, 8),
+		Animator::Data {
+			.fps = 5,
+			.col = 1,
+			.row = 0,
+			.looping = false,
+		}
+	);
+	tank_animator.pause();
+	tank_animator.active = true;
+
+	//jetpack
 	enemy.add_component<CircleCollider>(25, vec2(0, -20));
 	Asset enemy_jetpack_asset {"asset/barry/jetpackDefault.png"};
 	Sprite & enemy_jetpack_sprite = enemy.add_component<Sprite>(
@@ -91,6 +120,18 @@ int EnemySubScene::create(Scene & scn, int enemy_counter) {
 			.looping = true,
 		}
 	);
+	//gun
+	Asset enemy_pistol_asset{"asset/workers/gun.png"};
+	Sprite & enemy_pistol_sprite = enemy.add_component<Sprite>(
+		enemy_pistol_asset,
+		Sprite::Data {
+			.flip = {false, false},
+			.sorting_in_layer = SORT_IN_LAY_WORKERS_FRONT,
+			.order_in_layer = 2,
+			.size = vec2(0, 20),
+			.position_offset = vec2(-20, 0),
+		}
+	);
 	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();
diff --git a/game/main.cpp b/game/main.cpp
index 14eec99..a34121e 100644
--- a/game/main.cpp
+++ b/game/main.cpp
@@ -17,6 +17,7 @@ int main() {
 	Config::get_instance() = ENGINE_CONFIG;
 
 	Engine gameloop;
+	
 	gameloop.add_scene<MainMenuScene>();
 	gameloop.add_scene<ShopMenuScene>();
 	gameloop.add_scene<GameScene>();
diff --git a/game/player/PlayerScript.cpp b/game/player/PlayerScript.cpp
index fadca9c..c072e06 100644
--- a/game/player/PlayerScript.cpp
+++ b/game/player/PlayerScript.cpp
@@ -104,6 +104,12 @@ void PlayerScript::fixed_update(crepe::duration_t dt) {
 			last_fired = now;
 		}
 	}
+	if (this->get_key_state(Keycode::P)) {
+		this->trigger_event<BattleStartEvent>(BattleStartEvent{
+			.num_enemies = 4,
+			.battle = true,
+		});
+	}
 	if (this->get_key_state(Keycode::SPACE)) {
 		rb.add_force_linear(vec2(0, -PLAYER_GRAVITY_SCALE / 2.5) * dt.count() / 0.02);
 		if (prev_anim != 1) {
diff --git a/game/player/PlayerScript.h b/game/player/PlayerScript.h
index e7d860a..0fe21d1 100644
--- a/game/player/PlayerScript.h
+++ b/game/player/PlayerScript.h
@@ -15,8 +15,11 @@ private:
 
 private:
 	int prev_anim = 0;
+	bool gravity_mode = true;
+	bool fall_direction = false;
 	std::chrono::time_point<std::chrono::steady_clock> last_fired;
+	std::chrono::time_point<std::chrono::steady_clock> last_switched;
 	std::chrono::duration<float> shot_delay = std::chrono::duration<float>(0.5);
-
+	std::chrono::duration<float> switch_delay = std::chrono::duration<float>(0.01);
 	int current_jetpack_sound = 0;
 };
diff --git a/game/player/PlayerSubScene.cpp b/game/player/PlayerSubScene.cpp
index c4d689a..245f19c 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(-100, 200));
+	GameObject player = scn.new_object("player", "player", vec2(200, 200));
 
 	Asset player_bullet {"asset/other_effects/effect_smgbullet.png"};
 	Sprite & player_bullet_sprite = player.add_component<Sprite>(
@@ -106,7 +106,7 @@ PlayerSubScene::PlayerSubScene(Scene & scn) {
 			.looping = true,
 		}
 	);
-	player.add_component<BoxCollider>(vec2(50, 50));
+	player.add_component<BoxCollider>(vec2(35, 35));
 	Asset player_head_asset {"asset/barry/defaultHead.png"};
 	Sprite & player_head_sprite = player.add_component<Sprite>(
 		player_head_asset,
@@ -143,7 +143,7 @@ PlayerSubScene::PlayerSubScene(Scene & scn) {
 			.looping = true,
 		}
 	);
-	player.add_component<BoxCollider>(vec2(40, 60), vec2(-20, 0));
+	player.add_component<BoxCollider>(vec2(40, 50), vec2(-20, 0));
 	player.add_component<Rigidbody>(Rigidbody::Data {
 		.gravity_scale = PLAYER_GRAVITY_SCALE,
 		.body_type = Rigidbody::BodyType::DYNAMIC,
@@ -153,6 +153,7 @@ PlayerSubScene::PlayerSubScene(Scene & scn) {
 		},
 		.collision_layer = COLL_LAY_PLAYER,
 	});
+
 	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/scheduler/ObjectsScheduler.cpp b/game/scheduler/ObjectsScheduler.cpp
index 3ce2018..a802806 100644
--- a/game/scheduler/ObjectsScheduler.cpp
+++ b/game/scheduler/ObjectsScheduler.cpp
@@ -5,6 +5,7 @@
 #include "../Config.h"
 #include "../Random.h"
 #include "../missile/SpawnEvent.h"
+#include "../enemy/EnemyScript.h"
 #include "api/Rigidbody.h"
 #include "api/Transform.h"
 #include "enemy/BattleScript.h"
@@ -14,15 +15,34 @@ using namespace crepe;
 void ObjectsScheduler::preset_0() {
 	trigger_event<MissileSpawnEvent>(MissileSpawnEvent {});
 	trigger_event<MissileSpawnEvent>(MissileSpawnEvent {});
+	this->trigger_event<BattleStartEvent>(BattleStartEvent {
+		.num_enemies = Random::i(3,1),
+		.battle = false,
+	});
+}
+void ObjectsScheduler::preset_1() { 
+	trigger_event<MissileSpawnEvent>(MissileSpawnEvent {}); 
+	this->trigger_event<BattleStartEvent>(BattleStartEvent {
+		.num_enemies = Random::i(4,1),
+		.battle = false,
+		});
+}
+void ObjectsScheduler::preset_2() { 
+	trigger_event<CreateZapperEvent>(CreateZapperEvent {});
+	this->trigger_event<BattleStartEvent>(BattleStartEvent {
+		.num_enemies = Random::i(2,1),
+		.battle = false,
+		});
 }
-void ObjectsScheduler::preset_1() { trigger_event<MissileSpawnEvent>(MissileSpawnEvent {}); }
-void ObjectsScheduler::preset_2() { trigger_event<CreateZapperEvent>(CreateZapperEvent {}); }
 void ObjectsScheduler::preset_3() { trigger_event<CreateZapperEvent>(CreateZapperEvent {}); }
 void ObjectsScheduler::preset_4() {}
 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 = 7,
+		.battle = true,
+		});
 
 	RefVector<Rigidbody> rb_back_forest
 		= this->get_components_by_tag<Rigidbody>("forest_background");
-- 
cgit v1.2.3