aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--game/CMakeLists.txt5
-rw-r--r--game/Config.h6
-rw-r--r--game/GameScene.cpp52
-rw-r--r--game/PlayerScript.cpp11
-rw-r--r--game/PlayerSubScene.cpp76
-rw-r--r--game/StartGameScript.cpp3
-rw-r--r--game/player/PlayerEndScript.cpp96
-rw-r--r--game/player/PlayerEndScript.h14
-rw-r--r--game/player/PlayerScript.cpp119
-rw-r--r--game/player/PlayerScript.h (renamed from game/PlayerScript.h)8
-rw-r--r--game/player/PlayerSubScene.cpp153
-rw-r--r--game/player/PlayerSubScene.h (renamed from game/PlayerSubScene.h)0
-rw-r--r--src/crepe/system/InputSystem.cpp2
13 files changed, 453 insertions, 92 deletions
diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt
index 937b5e6..8e3692b 100644
--- a/game/CMakeLists.txt
+++ b/game/CMakeLists.txt
@@ -16,9 +16,10 @@ add_executable(main
GameScene.cpp
background/HallwaySubScene.cpp
MoveCameraManualyScript.cpp
- PlayerScript.cpp
- PlayerSubScene.cpp
+ player/PlayerScript.cpp
+ player/PlayerSubScene.cpp
StartGameScript.cpp
+ player/PlayerEndScript.cpp
background/StartSubScene.cpp
main.cpp
)
diff --git a/game/Config.h b/game/Config.h
index ec753df..d6f8349 100644
--- a/game/Config.h
+++ b/game/Config.h
@@ -13,9 +13,15 @@ static constexpr int COLL_LAY_BOT_LOW = 2; // Only for GameScene
static constexpr int COLL_LAY_BOT_HIGH = 3; // Only for GameScene
static constexpr int COLL_LAY_PLAYER = 4; // Only for GameScene
static constexpr int COLL_LAY_WALL_FRAGS = 5; // Only for GameScene
+static constexpr int COLL_LAY_ZAPPER = 6; // Only for GameScene
+static constexpr int COLL_LAY_LASER = 7; // Only for GameScene
+static constexpr int COLL_LAY_MISSILE = 8; // Only for GameScene
static constexpr int GAME_HEIGHT = 800; // In game units
static constexpr int VIEWPORT_X = 1100; // In game units
// 'GAME_HEIGHT' (below) should be replaced by '500' when game development is finished
static constexpr int VIEWPORT_Y = GAME_HEIGHT; // In game units
+
+static constexpr int PLAYER_SPEED = 7500; // In game units
+static constexpr int PLAYER_GRAVITY_SCALE = 60; // In game units
diff --git a/game/GameScene.cpp b/game/GameScene.cpp
index 2511567..a8fcb47 100644
--- a/game/GameScene.cpp
+++ b/game/GameScene.cpp
@@ -1,10 +1,10 @@
#include "GameScene.h"
#include "Config.h"
#include "MoveCameraManualyScript.h"
-#include "PlayerSubScene.h"
#include "StartGameScript.h"
#include "background/BackgroundSubScene.h"
+#include "player/PlayerSubScene.h"
#include <cmath>
#include <crepe/api/Animator.h>
@@ -66,6 +66,56 @@ void GameScene::load_scene() {
GameObject start_game_script = new_object("start_game_script", "script", vec2(0, 0));
start_game_script.add_component<BehaviorScript>().set_script<StartGameScript>();
+
+ // zapper, laser and missile (below) for testing purpose only!!!
+ GameObject zapper = new_object("zapper", "zapper", vec2(1000, 0));
+ Asset zapper_asset {"asset/obstacles/zapper/regular_zappers/zapEffect.png"};
+ Sprite & zapper_sprite = zapper.add_component<Sprite>(
+ zapper_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_OBSTACLES,
+ .order_in_layer = 0,
+ .size = vec2(100, 100),
+ }
+ );
+ zapper.add_component<Rigidbody>(Rigidbody::Data {
+ .body_type = Rigidbody::BodyType::KINEMATIC,
+ .kinematic_collision = false,
+ .collision_layer = COLL_LAY_ZAPPER,
+ });
+ zapper.add_component<BoxCollider>(vec2(100, 100));
+ GameObject laser = new_object("laser", "laser", vec2(2000, 0));
+ Asset laser_asset {"asset/obstacles/laser/laserPower.png"};
+ Sprite & laser_sprite = laser.add_component<Sprite>(
+ laser_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_OBSTACLES,
+ .order_in_layer = 0,
+ .size = vec2(100, 100),
+ }
+ );
+ laser.add_component<Rigidbody>(Rigidbody::Data {
+ .body_type = Rigidbody::BodyType::KINEMATIC,
+ .kinematic_collision = false,
+ .collision_layer = COLL_LAY_LASER,
+ });
+ laser.add_component<BoxCollider>(vec2(100, 100));
+ GameObject missile = new_object("missile", "missile", vec2(4000, 0));
+ Asset missile_asset {"asset/obstacles/missile/missile.png"};
+ Sprite & missile_sprite = missile.add_component<Sprite>(
+ missile_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_OBSTACLES,
+ .order_in_layer = 0,
+ .size = vec2(100, 100),
+ }
+ );
+ missile.add_component<Rigidbody>(Rigidbody::Data {
+ .body_type = Rigidbody::BodyType::KINEMATIC,
+ .kinematic_collision = false,
+ .collision_layer = COLL_LAY_MISSILE,
+ });
+ missile.add_component<BoxCollider>(vec2(100, 100));
}
string GameScene::get_name() const { return "scene1"; }
diff --git a/game/PlayerScript.cpp b/game/PlayerScript.cpp
deleted file mode 100644
index 1c388f5..0000000
--- a/game/PlayerScript.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "PlayerScript.h"
-
-#include <crepe/api/Rigidbody.h>
-
-using namespace crepe;
-using namespace std;
-
-void PlayerScript::fixed_update(crepe::duration_t dt) {
- Rigidbody & rb = this->get_components_by_name<Rigidbody>("player").front();
- if (this->get_key_state(Keycode::SPACE)) rb.add_force_linear(vec2(0, -10));
-}
diff --git a/game/PlayerSubScene.cpp b/game/PlayerSubScene.cpp
deleted file mode 100644
index 00b7810..0000000
--- a/game/PlayerSubScene.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-#include "PlayerSubScene.h"
-#include "Config.h"
-#include "PlayerScript.h"
-
-#include <crepe/api/Animator.h>
-#include <crepe/api/GameObject.h>
-#include <crepe/api/Scene.h>
-#include <crepe/api/Script.h>
-#include <crepe/api/Sprite.h>
-
-using namespace crepe;
-using namespace std;
-
-PlayerSubScene::PlayerSubScene(Scene & scn) {
- GameObject player = scn.new_object("player", "player", vec2(-100, 200));
- Asset player_body_asset {"asset/barry/defaultBody.png"};
- Sprite & player_body_sprite = player.add_component<Sprite>(
- player_body_asset,
- Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_PLAYER,
- .order_in_layer = 0,
- .size = vec2(0, 50),
- }
- );
- player.add_component<Animator>(
- player_body_sprite, ivec2(32, 32), uvec2(4, 8),
- Animator::Data {
- .fps = 5,
- .looping = true,
- }
- );
- Asset player_head_asset {"asset/barry/defaultHead.png"};
- Sprite & player_head_sprite = player.add_component<Sprite>(
- player_head_asset,
- Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_PLAYER,
- .order_in_layer = 1,
- .size = vec2(0, 50),
- .position_offset = vec2(0, -20),
- }
- );
- player.add_component<Animator>(
- player_head_sprite, ivec2(32, 32), uvec2(4, 8),
- Animator::Data {
- .fps = 5,
- .looping = true,
- }
- );
- Asset player_jetpack_asset {"asset/barry/jetpackDefault.png"};
- Sprite & player_jetpack_sprite = player.add_component<Sprite>(
- player_jetpack_asset,
- Sprite::Data {
- .sorting_in_layer = SORT_IN_LAY_PLAYER,
- .order_in_layer = 2,
- .size = vec2(0, 60),
- .position_offset = vec2(-20, 0),
- }
- );
- player_jetpack_sprite.active = false;
- player.add_component<Animator>(
- player_jetpack_sprite, ivec2(32, 44), uvec2(4, 4),
- Animator::Data {
- .fps = 5,
- .looping = true,
- }
- );
- player.add_component<Rigidbody>(Rigidbody::Data {
- .gravity_scale = 20,
- .body_type = Rigidbody::BodyType::DYNAMIC,
- .linear_velocity = vec2(100, 0),
- .collision_layers = {COLL_LAY_BOT_TOP},
- .collision_layer = COLL_LAY_PLAYER,
- });
- player.add_component<BoxCollider>(vec2(50, 50));
- player.add_component<BehaviorScript>().set_script<PlayerScript>().active = false;
-}
diff --git a/game/StartGameScript.cpp b/game/StartGameScript.cpp
index 50ba86c..c786eb4 100644
--- a/game/StartGameScript.cpp
+++ b/game/StartGameScript.cpp
@@ -1,4 +1,5 @@
#include "StartGameScript.h"
+#include "Config.h"
#include <crepe/api/Animator.h>
#include <crepe/api/ParticleEmitter.h>
@@ -50,7 +51,7 @@ 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(100, 0);
+ 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;
diff --git a/game/player/PlayerEndScript.cpp b/game/player/PlayerEndScript.cpp
new file mode 100644
index 0000000..e04fb9d
--- /dev/null
+++ b/game/player/PlayerEndScript.cpp
@@ -0,0 +1,96 @@
+#include "PlayerEndScript.h"
+
+#include "../Config.h"
+#include "manager/LoopTimerManager.h"
+
+#include <crepe/api/Animator.h>
+#include <crepe/api/BoxCollider.h>
+#include <crepe/api/CircleCollider.h>
+#include <crepe/api/Rigidbody.h>
+#include <crepe/types.h>
+
+using namespace crepe;
+using namespace std;
+
+void PlayerEndScript::init() {
+ Rigidbody & rb_player = this->get_components_by_name<Rigidbody>("player").front();
+ rb_player.data.elasticity_coefficient = 0.7;
+
+ subscribe<CollisionEvent>([this](const CollisionEvent & ev) -> bool {
+ return this->on_collision(ev);
+ });
+}
+
+bool PlayerEndScript::on_collision(const crepe::CollisionEvent & ev) {
+ if (ev.info.other.metadata.name == "floor") {
+ Transform & transform_player
+ = this->get_components_by_name<Transform>("player").front();
+ RefVector<Animator> anim_player = this->get_components_by_name<Animator>("player");
+ Rigidbody & rb_player = this->get_components_by_name<Rigidbody>("player").front();
+ Rigidbody & rb_camera = this->get_components_by_name<Rigidbody>("camera").front();
+
+ float dt = this->get_loop_timer().get_fixed_delta_time().count();
+
+ if (jump == 0) {
+ int random_number = rand() % 4;
+ for (Animator & anim : anim_player) {
+ anim.active = false;
+ anim.set_anim(6);
+ for (int i = 0; i < random_number; i++) {
+ anim.next_anim();
+ }
+ }
+ } else if (jump == 1) {
+ for (Animator & anim : anim_player) {
+ anim.next_anim();
+ }
+ }
+
+ if (jump == 0) {
+ rb_player.data.angular_velocity = 16000 * dt;
+ rb_player.data.angular_velocity_coefficient = 0.7;
+ jump++;
+ } else if (jump == 1) {
+ jump++;
+ } else if (jump == 2) {
+ RefVector<Rigidbody> rb_back_forest
+ = this->get_components_by_tag<Rigidbody>("forest_background");
+ for (Rigidbody & rb : rb_back_forest) {
+ rb.data.linear_velocity_coefficient = vec2(0.5, 0.5);
+ }
+
+ rb_player.data.angular_velocity = 0;
+ rb_player.data.elasticity_coefficient = 0;
+ rb_player.data.linear_velocity = vec2(PLAYER_SPEED * dt, 0);
+ rb_player.data.linear_velocity_coefficient = vec2(0.5, 0.5);
+ rb_camera.data.linear_velocity_coefficient = vec2(0.5, 0.5);
+ for (Animator & anim : anim_player) {
+ anim.active = false;
+ anim.set_anim(7);
+ }
+ if (transform_player.rotation > 0 && transform_player.rotation < 90) {
+ // Do not call next_anim()
+ } else if (transform_player.rotation > 90 && transform_player.rotation < 180) {
+ for (Animator & anim : anim_player) {
+ anim.next_anim();
+ }
+ } else if (transform_player.rotation > 180 && transform_player.rotation < 270) {
+ for (Animator & anim : anim_player) {
+ anim.next_anim();
+ anim.next_anim();
+ }
+ } else {
+ for (Animator & anim : anim_player) {
+ anim.next_anim();
+ anim.next_anim();
+ anim.next_anim();
+ }
+ }
+ jump++;
+ }
+
+ return true;
+ }
+
+ return false;
+}
diff --git a/game/player/PlayerEndScript.h b/game/player/PlayerEndScript.h
new file mode 100644
index 0000000..03ea8a9
--- /dev/null
+++ b/game/player/PlayerEndScript.h
@@ -0,0 +1,14 @@
+#pragma once
+
+#include <crepe/api/Script.h>
+
+class PlayerEndScript : public crepe::Script {
+public:
+ void init();
+
+private:
+ bool on_collision(const crepe::CollisionEvent & ev);
+
+private:
+ int jump = 0;
+};
diff --git a/game/player/PlayerScript.cpp b/game/player/PlayerScript.cpp
new file mode 100644
index 0000000..c4ed6a0
--- /dev/null
+++ b/game/player/PlayerScript.cpp
@@ -0,0 +1,119 @@
+#include "PlayerScript.h"
+
+#include "../Config.h"
+
+#include <crepe/api/Animator.h>
+#include <crepe/api/ParticleEmitter.h>
+#include <crepe/api/Rigidbody.h>
+#include <crepe/api/Transform.h>
+#include <crepe/types.h>
+
+using namespace crepe;
+using namespace std;
+
+void PlayerScript::init() {
+ subscribe<CollisionEvent>([this](const CollisionEvent & ev) -> bool {
+ return this->on_collision(ev);
+ });
+}
+
+bool PlayerScript::on_collision(const CollisionEvent & ev) {
+ BehaviorScript & play_scr = this->get_components_by_name<BehaviorScript>("player").front();
+ BehaviorScript & end_scr = this->get_components_by_name<BehaviorScript>("player").back();
+ 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;
+ prev_anim = 0;
+ }
+ 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 == "laser") {
+ for (Animator & anim : animators) {
+ anim.active = true;
+ anim.set_anim(4);
+ anim.data.looping = true;
+ prev_anim = 0;
+ }
+ 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;
+ prev_anim = 0;
+ }
+ for (ParticleEmitter & emitter : emitters) {
+ emitter.data.emission_rate = 0;
+ }
+ play_scr.active = false;
+ end_scr.active = true;
+ return true;
+ }
+
+ return false;
+}
+
+void PlayerScript::fixed_update(crepe::duration_t dt) {
+ RefVector<Animator> animators = this->get_components_by_name<Animator>("player");
+ RefVector<ParticleEmitter> emitters
+ = this->get_components_by_name<ParticleEmitter>("player");
+ Transform & transform = this->get_components_by_name<Transform>("player").front();
+
+ 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::SPACE)) {
+ rb.add_force_linear(vec2(0, -PLAYER_GRAVITY_SCALE / 2.5));
+ if (prev_anim != 1) {
+ for (Animator & anim : animators) {
+ anim.active = true;
+ anim.set_anim(1);
+ anim.data.looping = true;
+ prev_anim = 1;
+ }
+ for (ParticleEmitter & emitter : emitters) {
+ emitter.data.emission_rate = 30;
+ }
+ }
+ } else if (transform.position.y == 195) {
+ if (prev_anim != 0) {
+ for (Animator & anim : animators) {
+ anim.active = true;
+ anim.set_anim(0);
+ anim.data.looping = true;
+ prev_anim = 0;
+ }
+ for (ParticleEmitter & emitter : emitters) {
+ emitter.data.emission_rate = 0;
+ }
+ }
+ } else {
+ if (prev_anim != 2) {
+ for (Animator & anim : animators) {
+ anim.set_anim(2);
+ anim.data.looping = false;
+ prev_anim = 2;
+ }
+ for (ParticleEmitter & emitter : emitters) {
+ emitter.data.emission_rate = 0;
+ }
+ }
+ }
+}
diff --git a/game/PlayerScript.h b/game/player/PlayerScript.h
index 84c4f7f..d8eb098 100644
--- a/game/PlayerScript.h
+++ b/game/player/PlayerScript.h
@@ -1,8 +1,16 @@
#pragma once
+#include <crepe/api/Event.h>
#include <crepe/api/Script.h>
class PlayerScript : public crepe::Script {
public:
+ void init();
void fixed_update(crepe::duration_t dt);
+
+private:
+ bool on_collision(const crepe::CollisionEvent & ev);
+
+private:
+ int prev_anim = 0;
};
diff --git a/game/player/PlayerSubScene.cpp b/game/player/PlayerSubScene.cpp
new file mode 100644
index 0000000..c1e5e2f
--- /dev/null
+++ b/game/player/PlayerSubScene.cpp
@@ -0,0 +1,153 @@
+#include "PlayerSubScene.h"
+#include "PlayerEndScript.h"
+#include "PlayerScript.h"
+
+#include "../Config.h"
+
+#include <crepe/api/Animator.h>
+#include <crepe/api/BoxCollider.h>
+#include <crepe/api/CircleCollider.h>
+#include <crepe/api/GameObject.h>
+#include <crepe/api/ParticleEmitter.h>
+#include <crepe/api/Scene.h>
+#include <crepe/api/Script.h>
+#include <crepe/api/Sprite.h>
+#include <crepe/types.h>
+
+using namespace crepe;
+using namespace std;
+
+PlayerSubScene::PlayerSubScene(Scene & scn) {
+ 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>(
+ player_bullet,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_PLAYER,
+ .order_in_layer = 3,
+ .size = vec2(0, 6),
+ }
+ );
+ player.add_component<ParticleEmitter>(player_bullet_sprite, ParticleEmitter::Data{
+ .offset = vec2(-15, 15),
+ .emission_rate = 0,
+ .min_speed = 300,
+ .max_speed = 500,
+ .min_angle = 85,
+ .max_angle = 100,
+ .boundary = ParticleEmitter::Boundary {
+ .height = 400,
+ .reset_on_exit = true,
+ },
+ });
+ Asset player_bullet_x2 {"asset/other_effects/effect_smgbullet_x2.png"};
+ Sprite & player_bullet_x2_sprite = player.add_component<Sprite>(
+ player_bullet_x2,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_PLAYER,
+ .order_in_layer = 3,
+ .size = vec2(0, 12),
+ }
+ );
+ player.add_component<ParticleEmitter>(player_bullet_x2_sprite, ParticleEmitter::Data{
+ .offset = vec2(-15, 15),
+ .emission_rate = 0,
+ .min_speed = 300,
+ .max_speed = 500,
+ .min_angle = 85,
+ .max_angle = 100,
+ .boundary = ParticleEmitter::Boundary {
+ .height = 400,
+ .reset_on_exit = true,
+ },
+ });
+ Asset player_shell {"asset/other_effects/effect_rocketmgshell_TVOS.png"};
+ Sprite & player_shell_sprite = player.add_component<Sprite>(
+ player_shell,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_PLAYER,
+ .order_in_layer = 3,
+ .size = vec2(0, 12),
+ .angle_offset = 90,
+ }
+ );
+ player.add_component<ParticleEmitter>(player_shell_sprite, ParticleEmitter::Data{
+ .offset = vec2(-15, 15),
+ .emission_rate = 0,
+ .min_speed = 200,
+ .max_speed = 500,
+ .min_angle = 110,
+ .max_angle = 120,
+ .force_over_time = vec2(0, 1000),
+ .boundary = ParticleEmitter::Boundary {
+ .height = 400,
+ .reset_on_exit = true,
+ },
+ });
+
+ Asset player_body_asset {"asset/barry/defaultBody.png"};
+ Sprite & player_body_sprite = player.add_component<Sprite>(
+ player_body_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_PLAYER,
+ .order_in_layer = 0,
+ .size = vec2(0, 50),
+ }
+ );
+ player.add_component<Animator>(
+ player_body_sprite, ivec2(32, 32), uvec2(4, 8),
+ Animator::Data {
+ .fps = 5,
+ .looping = true,
+ }
+ );
+ player.add_component<BoxCollider>(vec2(50, 50));
+ Asset player_head_asset {"asset/barry/defaultHead.png"};
+ Sprite & player_head_sprite = player.add_component<Sprite>(
+ player_head_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_PLAYER,
+ .order_in_layer = 1,
+ .size = vec2(0, 50),
+ .position_offset = vec2(0, -20),
+ }
+ );
+ player.add_component<Animator>(
+ player_head_sprite, ivec2(32, 32), uvec2(4, 8),
+ Animator::Data {
+ .fps = 5,
+ .looping = true,
+ }
+ );
+ player.add_component<CircleCollider>(25, vec2(0, -20));
+ Asset player_jetpack_asset {"asset/barry/jetpackDefault.png"};
+ Sprite & player_jetpack_sprite = player.add_component<Sprite>(
+ player_jetpack_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_PLAYER,
+ .order_in_layer = 2,
+ .size = vec2(0, 60),
+ .position_offset = vec2(-20, 0),
+ }
+ );
+ player_jetpack_sprite.active = false;
+ player.add_component<Animator>(
+ player_jetpack_sprite, ivec2(32, 44), uvec2(4, 4),
+ Animator::Data {
+ .fps = 5,
+ .looping = true,
+ }
+ );
+ player.add_component<BoxCollider>(vec2(40, 60), vec2(-20, 0));
+ player.add_component<Rigidbody>(Rigidbody::Data {
+ .gravity_scale = PLAYER_GRAVITY_SCALE,
+ .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},
+ .collision_layer = COLL_LAY_PLAYER,
+ });
+ player.add_component<BehaviorScript>().set_script<PlayerScript>().active = false;
+ player.add_component<BehaviorScript>().set_script<PlayerEndScript>().active = false;
+}
diff --git a/game/PlayerSubScene.h b/game/player/PlayerSubScene.h
index bf94c32..bf94c32 100644
--- a/game/PlayerSubScene.h
+++ b/game/player/PlayerSubScene.h
diff --git a/src/crepe/system/InputSystem.cpp b/src/crepe/system/InputSystem.cpp
index 91c9c64..be7eda6 100644
--- a/src/crepe/system/InputSystem.cpp
+++ b/src/crepe/system/InputSystem.cpp
@@ -216,7 +216,7 @@ bool InputSystem::is_mouse_inside_button(
if (!button.data.world_space) {
actual_pos += cam_transform.position;
}
- vec2 half_dimensions = button.dimensions / 2;
+ vec2 half_dimensions = button.dimensions * transform.scale / 2;
return mouse_pos.x >= actual_pos.x - half_dimensions.x
&& mouse_pos.x <= actual_pos.x + half_dimensions.x