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 /src/example/GameScene.cpp | |
parent | 58dd5c74add6be4b4185b273291a30aec3f37fa5 (diff) |
Added basic player with some physics
Diffstat (limited to 'src/example/GameScene.cpp')
-rw-r--r-- | src/example/GameScene.cpp | 94 |
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"; } |