diff options
author | max-001 <maxsmits21@kpnmail.nl> | 2024-12-17 11:57:25 +0100 |
---|---|---|
committer | max-001 <maxsmits21@kpnmail.nl> | 2024-12-17 11:57:25 +0100 |
commit | 24b415850da853496a6610e6fa00d4325b9a95c9 (patch) | |
tree | 31e1783b0ce12eb9ecfdb725f57f288e544b9c88 | |
parent | 58dd5c74add6be4b4185b273291a30aec3f37fa5 (diff) |
Added basic player with some physics
-rw-r--r-- | src/example/GameScene.cpp | 94 | ||||
-rw-r--r-- | src/example/Hallway.cpp | 4 | ||||
-rw-r--r-- | src/example/Start.cpp | 9 |
3 files changed, 103 insertions, 4 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"; } diff --git a/src/example/Hallway.cpp b/src/example/Hallway.cpp index c029acf..59d200f 100644 --- a/src/example/Hallway.cpp +++ b/src/example/Hallway.cpp @@ -21,8 +21,8 @@ float Hallway::create(Scene & scn, float begin_x, unsigned int sector_num, begin_x += 600; this->add_sector_number(begin, vec2(-200, 0), sector_num, sector_color); - this->add_lamp(begin, vec2(-70, -120), 11); - this->add_lamp(begin, vec2(30, -120), 9); + this->add_lamp(begin, vec2(330, -120), 11); + this->add_lamp(begin, vec2(430, -120), 9); GameObject middle_1 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0)); Asset middle_asset{"asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; diff --git a/src/example/Start.cpp b/src/example/Start.cpp index 2c46d34..846c34f 100644 --- a/src/example/Start.cpp +++ b/src/example/Start.cpp @@ -18,6 +18,14 @@ float Start::create(Scene & scn, float begin_x) { .order_in_layer = 0, .size = vec2(0, 800), }); + GameObject hole = scn.new_object("start_hole", "background", vec2(begin_x - 250, 140)); + Asset hole_asset{"asset/jetpack_joyride/background/start/titleWallHole.png"}; + Sprite & hole_sprite = hole.add_component<Sprite>(hole_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 1, + .size = vec2(0, 200), + }); + hole_sprite.active = false; begin_x += 700; this->add_table(begin, vec2(-150, 150)); @@ -54,6 +62,7 @@ void Start::add_lamp(GameObject & obj, vec2 offset, unsigned int fps) { .size = vec2(0, 300), .position_offset = offset - vec2(65, -55), }); + lamp_glow_sprite.active = false; obj.add_component<Animator>(lamp_glow_sprite, ivec2(422, 384), uvec2(6, 1), Animator::Data{ .fps = fps, |