aboutsummaryrefslogtreecommitdiff
path: root/src/example/GameScene.cpp
diff options
context:
space:
mode:
authormax-001 <maxsmits21@kpnmail.nl>2024-12-17 11:57:25 +0100
committermax-001 <maxsmits21@kpnmail.nl>2024-12-17 11:57:25 +0100
commit24b415850da853496a6610e6fa00d4325b9a95c9 (patch)
tree31e1783b0ce12eb9ecfdb725f57f288e544b9c88 /src/example/GameScene.cpp
parent58dd5c74add6be4b4185b273291a30aec3f37fa5 (diff)
Added basic player with some physics
Diffstat (limited to 'src/example/GameScene.cpp')
-rw-r--r--src/example/GameScene.cpp94
1 files changed, 92 insertions, 2 deletions
diff --git a/src/example/GameScene.cpp b/src/example/GameScene.cpp
index 8a0ec5c..76e5284 100644
--- a/src/example/GameScene.cpp
+++ b/src/example/GameScene.cpp
@@ -1,6 +1,11 @@
#include "GameScene.h"
#include "Background.h"
+#include "api/Animator.h"
+#include "api/Asset.h"
+#include "api/BoxCollider.h"
+#include "api/Transform.h"
+#include <cmath>
#include <crepe/api/BehaviorScript.h>
#include <crepe/api/Camera.h>
#include <crepe/api/Color.h>
@@ -8,6 +13,7 @@
#include <crepe/api/GameObject.h>
#include <crepe/api/Rigidbody.h>
#include <crepe/api/Script.h>
+#include <crepe/api/Sprite.h>
#include <crepe/types.h>
using namespace crepe;
@@ -33,18 +39,102 @@ private:
}
};
+class StartGame : public Script {
+public:
+ void update() {
+ Transform & player_transform
+ = this->get_components_by_name<Transform>("player").front();
+
+ if (player_transform.position.x == -310) {
+ Sprite & lamp_sprite = this->get_components_by_name<Sprite>("start_end").back();
+ lamp_sprite.active = true;
+ Sprite & hole_sprite = this->get_components_by_name<Sprite>("start_hole").front();
+ hole_sprite.active = true;
+ }
+
+ if (player_transform.position.x == -100) {
+ Animator & jetpack_stand_anim
+ = this->get_components_by_name<Animator>("start_begin").back();
+ jetpack_stand_anim.next_anim();
+ Sprite & jetpack_sprite = this->get_components_by_name<Sprite>("player").back();
+ jetpack_sprite.active = true;
+ }
+
+ if (player_transform.position.x == 150) {
+ Rigidbody & rb = this->get_components_by_name<Rigidbody>("camera").front();
+ rb.data.linear_velocity = vec2(100, 0);
+ }
+ }
+};
+
void GameScene::load_scene() {
Background background(*this);
- GameObject camera = new_object("camera", "camera", vec2(600, 0));
- camera.add_component<Camera>(ivec2(1700, 720), vec2(2000, 800),
+ GameObject camera = new_object("camera", "camera", vec2(250, 0));
+ camera.add_component<Camera>(ivec2(990, 720), vec2(1100, 800),
Camera::Data{
.bg_color = Color::RED,
});
camera.add_component<BehaviorScript>().set_script<MoveCameraScript>();
camera.add_component<Rigidbody>(Rigidbody::Data{
+ .linear_velocity = vec2(0, 0),
+ });
+
+ GameObject player = new_object("player", "player", vec2(-500, 200));
+ Asset player_body_asset{"asset/jetpack_joyride/barry/defaultBody.png"};
+ Sprite & player_body_sprite
+ = player.add_component<Sprite>(player_body_asset, Sprite::Data{
+ .sorting_in_layer = 10,
+ .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/jetpack_joyride/barry/defaultHead.png"};
+ Sprite & player_head_sprite
+ = player.add_component<Sprite>(player_head_asset, Sprite::Data{
+ .sorting_in_layer = 10,
+ .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/jetpack_joyride/barry/jetpackDefault.png"};
+ Sprite & player_jetpack_sprite = player.add_component<Sprite>(
+ player_jetpack_asset, Sprite::Data{
+ .sorting_in_layer = 10,
+ .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 = 1,
+ .body_type = Rigidbody::BodyType::DYNAMIC,
.linear_velocity = vec2(100, 0),
});
+ player.add_component<BoxCollider>(vec2(50, 50));
+
+ GameObject game_world = new_object("game_world", "game_world", vec2(0, 325));
+ game_world.add_component<Rigidbody>(Rigidbody::Data{
+ .body_type = Rigidbody::BodyType::STATIC,
+ });
+ game_world.add_component<BoxCollider>(vec2(INFINITY, 200));
+
+ GameObject start_game_scritp = new_object("start_game_script", "script", vec2(0, 0));
+ start_game_scritp.add_component<BehaviorScript>().set_script<StartGame>();
}
string GameScene::get_name() const { return "scene1"; }