From afd81007153f05c8f8b42bcf08a8cdf8ce13a98c Mon Sep 17 00:00:00 2001 From: JAROWMR Date: Thu, 12 Dec 2024 15:32:07 +0100 Subject: updated particle emitter --- src/example/game.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index 5361f3a..279648e 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -1,4 +1,5 @@ #include "api/CircleCollider.h" +#include "api/ParticleEmitter.h" #include "api/Scene.h" #include "manager/ComponentManager.h" #include "manager/Mediator.h" @@ -258,6 +259,26 @@ public: }) .active = false; + Asset img5{"asset/texture/square.png"}; + + + + GameObject particle = mgr.new_object( + "Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 0, 1); + auto & particle_image = particle.add_component(img5, Sprite::Data{.size = {5, 5},}); + auto & test = particle.add_component(particle_image,ParticleEmitter::Data{ + .position = {0, 0}, + .max_particles = 256, + .emission_rate = 50, + .min_speed = 10, + .max_speed = 20, + .min_angle = -20, + .max_angle = 20, + .begin_lifespan = 0, + .end_lifespan = 5, + } + ); + } string get_name() const { return "scene1"; } -- cgit v1.2.3 From 3d3c4dbcdbb21d8372ca84b0cfa3dd2bc28dea71 Mon Sep 17 00:00:00 2001 From: max-001 Date: Thu, 12 Dec 2024 17:14:33 +0100 Subject: First setup of game --- src/example/game.cpp | 256 ++++++++------------------------------------------- 1 file changed, 36 insertions(+), 220 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index 4239c15..6bdb804 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -2,6 +2,8 @@ #include "api/Scene.h" #include "manager/ComponentManager.h" #include "manager/Mediator.h" +#include "types.h" +#include #include #include #include @@ -11,245 +13,59 @@ #include #include #include -#include #include #include using namespace crepe; - using namespace std; -class MyScript1 : public Script { - bool flip = false; - bool oncollision(const CollisionEvent & test) { - Log::logf("Box {} script on_collision()", test.info.this_collider.game_object_id); - return true; - } - bool keypressed(const KeyPressEvent & test) { - Log::logf("Box script keypressed()"); - switch (test.key) { - case Keycode::A: { - Transform & tf = this->get_component(); - tf.position.x -= 1; - break; - } - case Keycode::W: { - Transform & tf = this->get_component(); - tf.position.y -= 1; - break; - } - case Keycode::S: { - Transform & tf = this->get_component(); - tf.position.y += 1; - break; - } - case Keycode::D: { - Transform & tf = this->get_component(); - tf.position.x += 1; - break; - } - case Keycode::E: { - if (flip) { - flip = false; - this->get_component().active = true; - this->get_components()[0].get().active = true; - this->get_component().active = false; - this->get_components()[1].get().active = false; - } else { - flip = true; - this->get_component().active = false; - this->get_components()[0].get().active = false; - this->get_component().active = true; - this->get_components()[1].get().active = true; - } - - //add collider switch - break; - } - default: - break; - } - return false; - } - - void init() { - Log::logf("init"); - subscribe( - [this](const CollisionEvent & ev) -> bool { return this->oncollision(ev); }); - subscribe( - [this](const KeyPressEvent & ev) -> bool { return this->keypressed(ev); }); - } - void update() { - // Retrieve component from the same GameObject this script is on - } -}; - -class MyScript2 : public Script { - bool flip = false; - bool oncollision(const CollisionEvent & test) { - Log::logf("Box {} script on_collision()", test.info.this_collider.game_object_id); - return true; - } - bool keypressed(const KeyPressEvent & test) { - Log::logf("Box script keypressed()"); - switch (test.key) { - case Keycode::LEFT: { - Transform & tf = this->get_component(); - tf.position.x -= 1; - break; - } - case Keycode::UP: { - Transform & tf = this->get_component(); - tf.position.y -= 1; - break; - } - case Keycode::DOWN: { - Transform & tf = this->get_component(); - tf.position.y += 1; - break; - } - case Keycode::RIGHT: { - Transform & tf = this->get_component(); - tf.position.x += 1; - break; - } - case Keycode::PAUSE: { - if (flip) { - flip = false; - this->get_component().active = true; - this->get_components()[0].get().active = true; - this->get_component().active = false; - this->get_components()[1].get().active = false; - } else { - flip = true; - this->get_component().active = false; - this->get_components()[0].get().active = false; - this->get_component().active = true; - this->get_components()[1].get().active = true; - } - - //add collider switch - break; - } - default: - break; - } - return false; - } - - void init() { - Log::logf("init"); - subscribe( - [this](const CollisionEvent & ev) -> bool { return this->oncollision(ev); }); - subscribe( - [this](const KeyPressEvent & ev) -> bool { return this->keypressed(ev); }); - } - void update() { - // Retrieve component from the same GameObject this script is on - } -}; - -class ConcreteScene1 : public Scene { +class Scene1 : public Scene { public: - using Scene::Scene; - void load_scene() { - Mediator & m = this->mediator; ComponentManager & mgr = m.component_manager; - Color color(0, 0, 0, 255); - float screen_size_width = 320; - float screen_size_height = 240; - float world_collider = 1000; - //define playable world - GameObject world = mgr.new_object( - "Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 0, 1); - world.add_component(Rigidbody::Data{ - .mass = 0, - .gravity_scale = 0, - .body_type = Rigidbody::BodyType::STATIC, - .offset = {0, 0}, - .collision_layers = {0}, + GameObject start_begin = mgr.new_object("start_begin", "background", vec2(0, 0)); + Asset start_begin_asset{"asset/jetpack_joyride/background/start/titleFG_1_TVOS.png"}; + start_begin.add_component(start_begin_asset, Sprite::Data{ + .sorting_in_layer = 0, + .order_in_layer = 0, + .size = vec2(0, 800), + }); + + GameObject start_end = mgr.new_object("start_end", "background", vec2(700, 0)); + Asset start_end_asset{"asset/jetpack_joyride/background/start/titleFG_2_TVOS.png"}; + start_end.add_component(start_end_asset, Sprite::Data{ + .sorting_in_layer = 0, + .order_in_layer = 1, + .size = vec2(0, 800), + }); + + GameObject hallway_begin = mgr.new_object("hallway_begin", "background", vec2(800, 0)); + Asset hallway_begin_asset{ + "asset/jetpack_joyride/background/hallway/hallway1FG_1_TVOS.png"}; + hallway_begin.add_component(hallway_begin_asset, Sprite::Data{ + .sorting_in_layer = 0, + .order_in_layer = 0, + .size = vec2(0, 800), + }); + + GameObject camera = mgr.new_object("camera", "camera", vec2(600, 0)); + camera.add_component(ivec2(1700, 720), vec2(2000, 800), + Camera::Data{ + .bg_color = Color::RED, + }); + camera.add_component(Rigidbody::Data{ + .linear_velocity = vec2(1, 0), }); - world.add_component( - vec2{0, 0 - (screen_size_height / 2 + world_collider / 2)}, - vec2{world_collider, world_collider}); - ; // Top - world.add_component(vec2{0, screen_size_height / 2 + world_collider / 2}, - vec2{world_collider, world_collider}); // Bottom - world.add_component( - vec2{0 - (screen_size_width / 2 + world_collider / 2), 0}, - vec2{world_collider, world_collider}); // Left - world.add_component(vec2{screen_size_width / 2 + world_collider / 2, 0}, - vec2{world_collider, world_collider}); // right - world.add_component( - Color::WHITE, - ivec2{static_cast(screen_size_width), static_cast(screen_size_height)}, - vec2{screen_size_width, screen_size_height}, 1.0f); - - GameObject game_object1 = mgr.new_object( - "Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 0, 1); - game_object1.add_component(Rigidbody::Data{ - .mass = 1, - .gravity_scale = 0, - .body_type = Rigidbody::BodyType::DYNAMIC, - .linear_velocity = {0, 0}, - .constraints = {0, 0, 0}, - .elastisity_coefficient = 1, - .offset = {0, 0}, - .collision_layers = {0}, - }); - // add box with boxcollider - game_object1.add_component(vec2{0, 0}, vec2{20, 20}); - game_object1.add_component().set_script(); - auto img1 = Texture("asset/texture/square.png"); - game_object1.add_component(img1, color, Sprite::FlipSettings{false, false}, 1, - 1, 20); - - //add circle with cirlcecollider deactiveated - game_object1.add_component(vec2{0, 0}, 10).active = false; - auto img2 = Texture("asset/texture/circle.png"); - game_object1 - .add_component(img2, color, Sprite::FlipSettings{false, false}, 1, 1, 20) - .active - = false; - - GameObject game_object2 = mgr.new_object( - "Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 0, 1); - game_object2.add_component(Rigidbody::Data{ - .mass = 1, - .gravity_scale = 0, - .body_type = Rigidbody::BodyType::STATIC, - .linear_velocity = {0, 0}, - .constraints = {0, 0, 0}, - .elastisity_coefficient = 1, - .offset = {0, 0}, - .collision_layers = {0}, - }); - // add box with boxcollider - game_object2.add_component(vec2{0, 0}, vec2{20, 20}); - game_object2.add_component().set_script(); - auto img3 = Texture("asset/texture/square.png"); - game_object2.add_component(img3, color, Sprite::FlipSettings{false, false}, 1, - 1, 20); - - //add circle with cirlcecollider deactiveated - game_object2.add_component(vec2{0, 0}, 10).active = false; - auto img4 = Texture("asset/texture/circle.png"); - game_object2 - .add_component(img4, color, Sprite::FlipSettings{false, false}, 1, 1, 20) - .active - = false; } string get_name() const { return "scene1"; } }; int main(int argc, char * argv[]) { - LoopManager gameloop; - gameloop.add_scene(); + gameloop.add_scene(); gameloop.start(); return 0; } -- cgit v1.2.3 From d8e948463d3e9ab2d871bb89ffc876c7d7444b85 Mon Sep 17 00:00:00 2001 From: max-001 Date: Thu, 12 Dec 2024 19:20:50 +0100 Subject: Improved game --- src/example/game.cpp | 87 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 83 insertions(+), 4 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index 6bdb804..5712358 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -29,7 +29,7 @@ public: Asset start_begin_asset{"asset/jetpack_joyride/background/start/titleFG_1_TVOS.png"}; start_begin.add_component(start_begin_asset, Sprite::Data{ .sorting_in_layer = 0, - .order_in_layer = 0, + .order_in_layer = 1, .size = vec2(0, 800), }); @@ -37,7 +37,7 @@ public: Asset start_end_asset{"asset/jetpack_joyride/background/start/titleFG_2_TVOS.png"}; start_end.add_component(start_end_asset, Sprite::Data{ .sorting_in_layer = 0, - .order_in_layer = 1, + .order_in_layer = 2, .size = vec2(0, 800), }); @@ -46,17 +46,96 @@ public: "asset/jetpack_joyride/background/hallway/hallway1FG_1_TVOS.png"}; hallway_begin.add_component(hallway_begin_asset, Sprite::Data{ .sorting_in_layer = 0, - .order_in_layer = 0, + .order_in_layer = 1, .size = vec2(0, 800), }); + GameObject hallway_middle + = mgr.new_object("hallway_middle", "background", vec2(1400, 0)); + Asset hallway_middle_asset{ + "asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; + hallway_middle.add_component(hallway_middle_asset, Sprite::Data{ + .sorting_in_layer = 0, + .order_in_layer = 2, + .size = vec2(0, 800), + }); + + GameObject hallway_end = mgr.new_object("hallway_end", "background", vec2(2000, 0)); + Asset hallway_end_asset{ + "asset/jetpack_joyride/background/hallway/hallway1FG_1_TVOS.png"}; + hallway_end.add_component(hallway_end_asset, Sprite::Data{ + .sorting_in_layer = 0, + .order_in_layer = 1, + .size = vec2(0, 800), + }); + + GameObject forest_begin = mgr.new_object("forest_begin", "background", vec2(2600, 0)); + Asset forest_begin_asset{ + "asset/jetpack_joyride/background/forest/forestFG_1_TVOS.png"}; + forest_begin.add_component(forest_begin_asset, Sprite::Data{ + .sorting_in_layer = 0, + .order_in_layer = 2, + .size = vec2(0, 800), + }); + + GameObject forest_middle + = mgr.new_object("forest_middle", "background", vec2(3400, 0)); + Asset forest_middle_asset{ + "asset/jetpack_joyride/background/forest/forestFG_3_TVOS.png"}; + forest_middle.add_component(forest_middle_asset, Sprite::Data{ + .sorting_in_layer = 0, + .order_in_layer = 2, + .size = vec2(0, 800), + }); + + GameObject forest_end = mgr.new_object("forest_end", "background", vec2(4200, 0)); + Asset forest_end_asset{"asset/jetpack_joyride/background/forest/forestFG_2_TVOS.png"}; + forest_end.add_component(forest_end_asset, Sprite::Data{ + .sorting_in_layer = 0, + .order_in_layer = 2, + .size = vec2(0, 800), + }); + + GameObject forest_background_1 + = mgr.new_object("forest_background", "background", vec2(2600, 0)); + Asset forest_background_1_asset{ + "asset/jetpack_joyride/background/forest/forestBG1_1_TVOS.png"}; + forest_background_1.add_component(forest_background_1_asset, + Sprite::Data{ + .sorting_in_layer = 0, + .order_in_layer = 0, + .size = vec2(0, 800), + }); + + GameObject forest_background_2 + = mgr.new_object("forest_background", "background", vec2(3400, 0)); + Asset forest_background_2_asset{ + "asset/jetpack_joyride/background/forest/forestBG1_1_TVOS.png"}; + forest_background_2.add_component(forest_background_2_asset, + Sprite::Data{ + .sorting_in_layer = 0, + .order_in_layer = 0, + .size = vec2(0, 800), + }); + + GameObject forest_background_3 + = mgr.new_object("forest_background", "background", vec2(4200, 0)); + Asset forest_background_3_asset{ + "asset/jetpack_joyride/background/forest/forestBG1_1_TVOS.png"}; + forest_background_3.add_component(forest_background_3_asset, + Sprite::Data{ + .sorting_in_layer = 0, + .order_in_layer = 0, + .size = vec2(0, 800), + }); + GameObject camera = mgr.new_object("camera", "camera", vec2(600, 0)); camera.add_component(ivec2(1700, 720), vec2(2000, 800), Camera::Data{ .bg_color = Color::RED, }); camera.add_component(Rigidbody::Data{ - .linear_velocity = vec2(1, 0), + .linear_velocity = vec2(1.5, 0), }); } -- cgit v1.2.3 From 8b24778cd1db8ea3348bb0e44cd4640030567dcf Mon Sep 17 00:00:00 2001 From: max-001 Date: Thu, 12 Dec 2024 19:32:52 +0100 Subject: Improved game --- src/example/game.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index 5712358..ec49742 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -129,6 +129,35 @@ public: .size = vec2(0, 800), }); + GameObject aquarium_begin + = mgr.new_object("aquarium_begin", "background", vec2(4800, 0)); + Asset aquarium_begin_asset{ + "asset/jetpack_joyride/background/aquarium/glassTubeFG_1_TVOS.png"}; + aquarium_begin.add_component(aquarium_begin_asset, Sprite::Data{ + .sorting_in_layer = 0, + .order_in_layer = 1, + .size = vec2(0, 800), + }); + + GameObject aquarium_middle + = mgr.new_object("aquarium_middle", "background", vec2(5400, 0)); + Asset aquarium_middle_asset{ + "asset/jetpack_joyride/background/aquarium/glassTubeFG_3_TVOS.png"}; + aquarium_middle.add_component(aquarium_middle_asset, Sprite::Data{ + .sorting_in_layer = 0, + .order_in_layer = 1, + .size = vec2(0, 800), + }); + + GameObject aquarium_end = mgr.new_object("aquarium_end", "background", vec2(6000, 0)); + Asset aquarium_end_asset{ + "asset/jetpack_joyride/background/aquarium/glassTubeFG_2_TVOS.png"}; + aquarium_end.add_component(aquarium_end_asset, Sprite::Data{ + .sorting_in_layer = 0, + .order_in_layer = 1, + .size = vec2(0, 800), + }); + GameObject camera = mgr.new_object("camera", "camera", vec2(600, 0)); camera.add_component(ivec2(1700, 720), vec2(2000, 800), Camera::Data{ -- cgit v1.2.3 From 338604322942d5e0ebc09d40c43c6f3a96b67947 Mon Sep 17 00:00:00 2001 From: max-001 Date: Fri, 13 Dec 2024 10:16:46 +0100 Subject: Added canera move script --- src/example/game.cpp | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index ec49742..dfa1e7e 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -1,3 +1,4 @@ +#include "api/BehaviorScript.h" #include "api/CircleCollider.h" #include "api/Scene.h" #include "manager/ComponentManager.h" @@ -19,12 +20,9 @@ using namespace crepe; using namespace std; -class Scene1 : public Scene { +class Background { public: - void load_scene() { - Mediator & m = this->mediator; - ComponentManager & mgr = m.component_manager; - + Background(ComponentManager & mgr) { GameObject start_begin = mgr.new_object("start_begin", "background", vec2(0, 0)); Asset start_begin_asset{"asset/jetpack_joyride/background/start/titleFG_1_TVOS.png"}; start_begin.add_component(start_begin_asset, Sprite::Data{ @@ -157,15 +155,43 @@ public: .order_in_layer = 1, .size = vec2(0, 800), }); + } +}; + +class MoveCameraScript : public Script { +public: + void init() { + subscribe( + [this](const KeyPressEvent & ev) -> bool { return this->keypressed(ev); }); + } + +private: + bool keypressed(const KeyPressEvent & event) { + if (event.key == Keycode::RIGHT) { + Transform & cam = this->get_components_by_name("camera").front(); + cam.position.x += 100; + } else if (event.key == Keycode::LEFT) { + Transform & cam = this->get_components_by_name("camera").front(); + cam.position.x -= 100; + } + return true; + } +}; + +class Scene1 : public Scene { +public: + void load_scene() { + Mediator & m = this->mediator; + ComponentManager & mgr = m.component_manager; + + Background background(mgr); GameObject camera = mgr.new_object("camera", "camera", vec2(600, 0)); camera.add_component(ivec2(1700, 720), vec2(2000, 800), Camera::Data{ .bg_color = Color::RED, }); - camera.add_component(Rigidbody::Data{ - .linear_velocity = vec2(1.5, 0), - }); + camera.add_component().set_script(); } string get_name() const { return "scene1"; } -- cgit v1.2.3 From e9771defdc0a54f98f571857f2f9eb500e26f94c Mon Sep 17 00:00:00 2001 From: max-001 Date: Fri, 13 Dec 2024 10:58:30 +0100 Subject: Improved game --- src/example/game.cpp | 172 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 105 insertions(+), 67 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index dfa1e7e..f2532ee 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -23,139 +23,177 @@ using namespace std; class Background { public: Background(ComponentManager & mgr) { - GameObject start_begin = mgr.new_object("start_begin", "background", vec2(0, 0)); + this->start(mgr); + + this->hallway(mgr); + + this->forest(mgr); + + this->aquarium(mgr); + + this->forest(mgr); + } + + void start(ComponentManager & mgr) { + GameObject start_begin = mgr.new_object("start_begin", "background", vec2(begin_x, 0)); Asset start_begin_asset{"asset/jetpack_joyride/background/start/titleFG_1_TVOS.png"}; start_begin.add_component(start_begin_asset, Sprite::Data{ - .sorting_in_layer = 0, - .order_in_layer = 1, + .sorting_in_layer = 4, + .order_in_layer = 0, .size = vec2(0, 800), }); + begin_x += 700; - GameObject start_end = mgr.new_object("start_end", "background", vec2(700, 0)); + GameObject start_end = mgr.new_object("start_end", "background", vec2(begin_x, 0)); Asset start_end_asset{"asset/jetpack_joyride/background/start/titleFG_2_TVOS.png"}; start_end.add_component(start_end_asset, Sprite::Data{ - .sorting_in_layer = 0, - .order_in_layer = 2, + .sorting_in_layer = 4, + .order_in_layer = 1, .size = vec2(0, 800), }); + begin_x += 100; + } - GameObject hallway_begin = mgr.new_object("hallway_begin", "background", vec2(800, 0)); + void hallway(ComponentManager & mgr) { + GameObject hallway_begin + = mgr.new_object("hallway_begin", "background", vec2(begin_x, 0)); Asset hallway_begin_asset{ "asset/jetpack_joyride/background/hallway/hallway1FG_1_TVOS.png"}; hallway_begin.add_component(hallway_begin_asset, Sprite::Data{ - .sorting_in_layer = 0, - .order_in_layer = 1, + .sorting_in_layer = 4, + .order_in_layer = 0, .size = vec2(0, 800), }); + begin_x += 600; - GameObject hallway_middle - = mgr.new_object("hallway_middle", "background", vec2(1400, 0)); + GameObject hallway_middle_1 + = mgr.new_object("hallway_middle", "background", vec2(begin_x, 0)); Asset hallway_middle_asset{ "asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; - hallway_middle.add_component(hallway_middle_asset, Sprite::Data{ - .sorting_in_layer = 0, - .order_in_layer = 2, - .size = vec2(0, 800), - }); + hallway_middle_1.add_component(hallway_middle_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 2, + .size = vec2(0, 800), + }); + begin_x += 600; - GameObject hallway_end = mgr.new_object("hallway_end", "background", vec2(2000, 0)); + GameObject hallway_middle_2 + = mgr.new_object("hallway_middle", "background", vec2(begin_x, 0)); + Asset hallway_middle_asset_2{ + "asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; + hallway_middle_2.add_component(hallway_middle_asset_2, + Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 3, + .size = vec2(0, 800), + }); + begin_x += 200; + + GameObject hallway_middle_3 + = mgr.new_object("hallway_middle", "background", vec2(begin_x, 0)); + Asset hallway_middle_asset_3{ + "asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; + hallway_middle_3.add_component(hallway_middle_asset_3, + Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 4, + .size = vec2(0, 800), + }); + begin_x += 400; + + GameObject hallway_middle_4 + = mgr.new_object("hallway_middle", "background", vec2(begin_x, 0)); + Asset hallway_middle_asset_4{ + "asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; + hallway_middle_4.add_component(hallway_middle_asset_4, + Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 5, + .size = vec2(0, 800), + }); + begin_x += 600; + + GameObject hallway_end = mgr.new_object("hallway_end", "background", vec2(begin_x, 0)); Asset hallway_end_asset{ "asset/jetpack_joyride/background/hallway/hallway1FG_1_TVOS.png"}; hallway_end.add_component(hallway_end_asset, Sprite::Data{ - .sorting_in_layer = 0, + .sorting_in_layer = 4, .order_in_layer = 1, .size = vec2(0, 800), }); + begin_x += 600; + } - GameObject forest_begin = mgr.new_object("forest_begin", "background", vec2(2600, 0)); + void forest(ComponentManager & mgr) { + GameObject forest_begin + = mgr.new_object("forest_begin", "background", vec2(begin_x, 0)); Asset forest_begin_asset{ "asset/jetpack_joyride/background/forest/forestFG_1_TVOS.png"}; forest_begin.add_component(forest_begin_asset, Sprite::Data{ - .sorting_in_layer = 0, - .order_in_layer = 2, + .sorting_in_layer = 4, + .order_in_layer = 0, .size = vec2(0, 800), }); + begin_x += 800; GameObject forest_middle - = mgr.new_object("forest_middle", "background", vec2(3400, 0)); + = mgr.new_object("forest_middle", "background", vec2(begin_x, 0)); Asset forest_middle_asset{ "asset/jetpack_joyride/background/forest/forestFG_3_TVOS.png"}; forest_middle.add_component(forest_middle_asset, Sprite::Data{ - .sorting_in_layer = 0, + .sorting_in_layer = 4, .order_in_layer = 2, .size = vec2(0, 800), }); + begin_x += 800; - GameObject forest_end = mgr.new_object("forest_end", "background", vec2(4200, 0)); + GameObject forest_end = mgr.new_object("forest_end", "background", vec2(begin_x, 0)); Asset forest_end_asset{"asset/jetpack_joyride/background/forest/forestFG_2_TVOS.png"}; forest_end.add_component(forest_end_asset, Sprite::Data{ - .sorting_in_layer = 0, - .order_in_layer = 2, + .sorting_in_layer = 4, + .order_in_layer = 1, .size = vec2(0, 800), }); + begin_x += 600; + } - GameObject forest_background_1 - = mgr.new_object("forest_background", "background", vec2(2600, 0)); - Asset forest_background_1_asset{ - "asset/jetpack_joyride/background/forest/forestBG1_1_TVOS.png"}; - forest_background_1.add_component(forest_background_1_asset, - Sprite::Data{ - .sorting_in_layer = 0, - .order_in_layer = 0, - .size = vec2(0, 800), - }); - - GameObject forest_background_2 - = mgr.new_object("forest_background", "background", vec2(3400, 0)); - Asset forest_background_2_asset{ - "asset/jetpack_joyride/background/forest/forestBG1_1_TVOS.png"}; - forest_background_2.add_component(forest_background_2_asset, - Sprite::Data{ - .sorting_in_layer = 0, - .order_in_layer = 0, - .size = vec2(0, 800), - }); - - GameObject forest_background_3 - = mgr.new_object("forest_background", "background", vec2(4200, 0)); - Asset forest_background_3_asset{ - "asset/jetpack_joyride/background/forest/forestBG1_1_TVOS.png"}; - forest_background_3.add_component(forest_background_3_asset, - Sprite::Data{ - .sorting_in_layer = 0, - .order_in_layer = 0, - .size = vec2(0, 800), - }); - + void aquarium(ComponentManager & mgr) { GameObject aquarium_begin - = mgr.new_object("aquarium_begin", "background", vec2(4800, 0)); + = mgr.new_object("aquarium_begin", "background", vec2(begin_x, 0)); Asset aquarium_begin_asset{ "asset/jetpack_joyride/background/aquarium/glassTubeFG_1_TVOS.png"}; aquarium_begin.add_component(aquarium_begin_asset, Sprite::Data{ - .sorting_in_layer = 0, - .order_in_layer = 1, + .sorting_in_layer = 4, + .order_in_layer = 0, .size = vec2(0, 800), }); + begin_x += 600; GameObject aquarium_middle - = mgr.new_object("aquarium_middle", "background", vec2(5400, 0)); + = mgr.new_object("aquarium_middle", "background", vec2(begin_x, 0)); Asset aquarium_middle_asset{ "asset/jetpack_joyride/background/aquarium/glassTubeFG_3_TVOS.png"}; aquarium_middle.add_component(aquarium_middle_asset, Sprite::Data{ - .sorting_in_layer = 0, - .order_in_layer = 1, + .sorting_in_layer = 4, + .order_in_layer = 2, .size = vec2(0, 800), }); + begin_x += 600; - GameObject aquarium_end = mgr.new_object("aquarium_end", "background", vec2(6000, 0)); + GameObject aquarium_end + = mgr.new_object("aquarium_end", "background", vec2(begin_x, 0)); Asset aquarium_end_asset{ "asset/jetpack_joyride/background/aquarium/glassTubeFG_2_TVOS.png"}; aquarium_end.add_component(aquarium_end_asset, Sprite::Data{ - .sorting_in_layer = 0, + .sorting_in_layer = 4, .order_in_layer = 1, .size = vec2(0, 800), }); + begin_x += 600; } + +private: + float begin_x = 0; }; class MoveCameraScript : public Script { -- cgit v1.2.3 From 3ab7a2cf4bb818527773444a862ec4b9d6aaefe5 Mon Sep 17 00:00:00 2001 From: max-001 Date: Fri, 13 Dec 2024 12:32:58 +0100 Subject: Improved game --- src/example/game.cpp | 154 ++++++++++++++++++++++++++++----------------------- 1 file changed, 84 insertions(+), 70 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index f2532ee..61d8605 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -1,3 +1,4 @@ +#include "api/Animator.h" #include "api/BehaviorScript.h" #include "api/CircleCollider.h" #include "api/Scene.h" @@ -35,92 +36,105 @@ public: } void start(ComponentManager & mgr) { - GameObject start_begin = mgr.new_object("start_begin", "background", vec2(begin_x, 0)); - Asset start_begin_asset{"asset/jetpack_joyride/background/start/titleFG_1_TVOS.png"}; - start_begin.add_component(start_begin_asset, Sprite::Data{ - .sorting_in_layer = 4, - .order_in_layer = 0, - .size = vec2(0, 800), - }); + GameObject begin = mgr.new_object("start_begin", "background", vec2(begin_x, 0)); + Asset begin_asset{"asset/jetpack_joyride/background/start/titleFG_1_TVOS.png"}; + begin.add_component(begin_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 0, + .size = vec2(0, 800), + }); begin_x += 700; - GameObject start_end = mgr.new_object("start_end", "background", vec2(begin_x, 0)); - Asset start_end_asset{"asset/jetpack_joyride/background/start/titleFG_2_TVOS.png"}; - start_end.add_component(start_end_asset, Sprite::Data{ - .sorting_in_layer = 4, - .order_in_layer = 1, - .size = vec2(0, 800), - }); + GameObject end = mgr.new_object("start_end", "background", vec2(begin_x, 0)); + Asset end_asset{"asset/jetpack_joyride/background/start/titleFG_2_TVOS.png"}; + end.add_component(end_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 1, + .size = vec2(0, 800), + }); begin_x += 100; + + this->add_lamp_start(end, vec2(-350, -95)); + } + + void add_lamp_start(GameObject & obj, vec2 offset) { + Asset lamp_asset{"asset/jetpack_joyride/background/start/alarmLight_TVOS.png"}; + obj.add_component(lamp_asset, Sprite::Data{ + .sorting_in_layer = 5, + .order_in_layer = 0, + .size = vec2(0, 100), + .position_offset = offset, + }); + Asset lamp_glow_asset{"asset/jetpack_joyride/background/start/alarmGlow_TVOS.png"}; + Sprite & lamp_glow_sprite = obj.add_component( + lamp_glow_asset, Sprite::Data{ + .sorting_in_layer = 5, + .order_in_layer = 1, + .size = vec2(0, 300), + .position_offset = offset - vec2(65, -55), + }); + obj.add_component(lamp_glow_sprite, ivec2(422, 384), uvec2(6, 1), + Animator::Data{ + .fps = 10, + .looping = true, + }); } void hallway(ComponentManager & mgr) { - GameObject hallway_begin - = mgr.new_object("hallway_begin", "background", vec2(begin_x, 0)); - Asset hallway_begin_asset{ - "asset/jetpack_joyride/background/hallway/hallway1FG_1_TVOS.png"}; - hallway_begin.add_component(hallway_begin_asset, Sprite::Data{ - .sorting_in_layer = 4, - .order_in_layer = 0, - .size = vec2(0, 800), - }); + GameObject begin = mgr.new_object("hallway_begin", "background", vec2(begin_x, 0)); + Asset begin_asset{"asset/jetpack_joyride/background/hallway/hallway1FG_1_TVOS.png"}; + begin.add_component(begin_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 0, + .size = vec2(0, 800), + }); begin_x += 600; - GameObject hallway_middle_1 - = mgr.new_object("hallway_middle", "background", vec2(begin_x, 0)); - Asset hallway_middle_asset{ - "asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; - hallway_middle_1.add_component(hallway_middle_asset, Sprite::Data{ - .sorting_in_layer = 4, - .order_in_layer = 2, - .size = vec2(0, 800), - }); + // Atributes for begin + + GameObject middle_1 = mgr.new_object("hallway_middle", "background", vec2(begin_x, 0)); + Asset middle_asset{"asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; + middle_1.add_component(middle_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 2, + .size = vec2(0, 800), + }); begin_x += 600; - GameObject hallway_middle_2 - = mgr.new_object("hallway_middle", "background", vec2(begin_x, 0)); - Asset hallway_middle_asset_2{ - "asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; - hallway_middle_2.add_component(hallway_middle_asset_2, - Sprite::Data{ - .sorting_in_layer = 4, - .order_in_layer = 3, - .size = vec2(0, 800), - }); + GameObject middle_2 = mgr.new_object("hallway_middle", "background", vec2(begin_x, 0)); + Asset middle_asset_2{"asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; + middle_2.add_component(middle_asset_2, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 3, + .size = vec2(0, 800), + }); begin_x += 200; - GameObject hallway_middle_3 - = mgr.new_object("hallway_middle", "background", vec2(begin_x, 0)); - Asset hallway_middle_asset_3{ - "asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; - hallway_middle_3.add_component(hallway_middle_asset_3, - Sprite::Data{ - .sorting_in_layer = 4, - .order_in_layer = 4, - .size = vec2(0, 800), - }); + GameObject middle_3 = mgr.new_object("hallway_middle", "background", vec2(begin_x, 0)); + Asset middle_asset_3{"asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; + middle_3.add_component(middle_asset_3, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 4, + .size = vec2(0, 800), + }); begin_x += 400; - GameObject hallway_middle_4 - = mgr.new_object("hallway_middle", "background", vec2(begin_x, 0)); - Asset hallway_middle_asset_4{ - "asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; - hallway_middle_4.add_component(hallway_middle_asset_4, - Sprite::Data{ - .sorting_in_layer = 4, - .order_in_layer = 5, - .size = vec2(0, 800), - }); + GameObject middle_4 = mgr.new_object("hallway_middle", "background", vec2(begin_x, 0)); + Asset middle_asset_4{"asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; + middle_4.add_component(middle_asset_4, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 5, + .size = vec2(0, 800), + }); begin_x += 600; - GameObject hallway_end = mgr.new_object("hallway_end", "background", vec2(begin_x, 0)); - Asset hallway_end_asset{ - "asset/jetpack_joyride/background/hallway/hallway1FG_1_TVOS.png"}; - hallway_end.add_component(hallway_end_asset, Sprite::Data{ - .sorting_in_layer = 4, - .order_in_layer = 1, - .size = vec2(0, 800), - }); + GameObject end = mgr.new_object("hallway_end", "background", vec2(begin_x, 0)); + Asset end_asset{"asset/jetpack_joyride/background/hallway/hallway1FG_1_TVOS.png"}; + end.add_component(end_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 1, + .size = vec2(0, 800), + }); begin_x += 600; } -- cgit v1.2.3 From 0f600b3281cca9183b0e8a6e34c79ec538d8ea2d Mon Sep 17 00:00:00 2001 From: max-001 Date: Fri, 13 Dec 2024 13:00:19 +0100 Subject: Improved game --- src/example/game.cpp | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index 61d8605..d447782 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -57,7 +57,7 @@ public: this->add_lamp_start(end, vec2(-350, -95)); } - void add_lamp_start(GameObject & obj, vec2 offset) { + void add_lamp_start(GameObject & obj, vec2 offset, unsigned int fps = 10) { Asset lamp_asset{"asset/jetpack_joyride/background/start/alarmLight_TVOS.png"}; obj.add_component(lamp_asset, Sprite::Data{ .sorting_in_layer = 5, @@ -75,7 +75,7 @@ public: }); obj.add_component(lamp_glow_sprite, ivec2(422, 384), uvec2(6, 1), Animator::Data{ - .fps = 10, + .fps = fps, .looping = true, }); } @@ -90,7 +90,8 @@ public: }); begin_x += 600; - // Atributes for begin + this->add_lamp_hallway(begin, vec2(-70, -120), 11); + this->add_lamp_hallway(begin, vec2(30, -120), 9); GameObject middle_1 = mgr.new_object("hallway_middle", "background", vec2(begin_x, 0)); Asset middle_asset{"asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; @@ -119,6 +120,8 @@ public: }); begin_x += 400; + this->add_lamp_hallway(middle_3, vec2(0, -120)); + GameObject middle_4 = mgr.new_object("hallway_middle", "background", vec2(begin_x, 0)); Asset middle_asset_4{"asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; middle_4.add_component(middle_asset_4, Sprite::Data{ @@ -138,6 +141,29 @@ public: begin_x += 600; } + void add_lamp_hallway(GameObject & obj, vec2 offset, unsigned int fps = 10) { + Asset lamp_asset{"asset/jetpack_joyride/background/hallway/alarmLight_TVOS.png"}; + obj.add_component(lamp_asset, Sprite::Data{ + .sorting_in_layer = 5, + .order_in_layer = 0, + .size = vec2(0, 100), + .position_offset = offset, + }); + Asset lamp_glow_asset{"asset/jetpack_joyride/background/hallway/alarmGlow_TVOS.png"}; + Sprite & lamp_glow_sprite = obj.add_component( + lamp_glow_asset, Sprite::Data{ + .sorting_in_layer = 5, + .order_in_layer = 1, + .size = vec2(0, 300), + .position_offset = offset - vec2(65, -30), + }); + obj.add_component(lamp_glow_sprite, ivec2(422, 384), uvec2(6, 1), + Animator::Data{ + .fps = fps, + .looping = true, + }); + } + void forest(ComponentManager & mgr) { GameObject forest_begin = mgr.new_object("forest_begin", "background", vec2(begin_x, 0)); -- cgit v1.2.3 From 1b382ecddb3156c1350feb309bdd9c389ee5c4eb Mon Sep 17 00:00:00 2001 From: max-001 Date: Fri, 13 Dec 2024 14:38:41 +0100 Subject: Added sector number --- src/example/game.cpp | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index d447782..24aa137 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -17,6 +17,7 @@ #include #include #include +#include using namespace crepe; using namespace std; @@ -26,13 +27,13 @@ public: Background(ComponentManager & mgr) { this->start(mgr); - this->hallway(mgr); + this->hallway(mgr, 1, Color::YELLOW); this->forest(mgr); this->aquarium(mgr); - this->forest(mgr); + this->hallway(mgr, 2, Color::MAGENTA); } void start(ComponentManager & mgr) { @@ -80,7 +81,7 @@ public: }); } - void hallway(ComponentManager & mgr) { + void hallway(ComponentManager & mgr, unsigned int sector_num, Color sector_color) { GameObject begin = mgr.new_object("hallway_begin", "background", vec2(begin_x, 0)); Asset begin_asset{"asset/jetpack_joyride/background/hallway/hallway1FG_1_TVOS.png"}; begin.add_component(begin_asset, Sprite::Data{ @@ -90,6 +91,7 @@ public: }); begin_x += 600; + this->add_sector_number(begin, vec2(-200, 0), sector_num, sector_color); this->add_lamp_hallway(begin, vec2(-70, -120), 11); this->add_lamp_hallway(begin, vec2(30, -120), 9); @@ -164,6 +166,38 @@ public: }); } + void add_sector_number(GameObject & obj, vec2 offset, unsigned int sector_num, + Color sector_color) { + Asset sector_text_asset{ + "asset/jetpack_joyride/background/hallway/sectorText_TVOS.png"}; + obj.add_component(sector_text_asset, Sprite::Data{ + .color = sector_color, + .sorting_in_layer = 5, + .order_in_layer = 0, + .size = vec2(0, 100), + .position_offset = offset, + }); + Asset sector_num_asset{ + "asset/jetpack_joyride/background/hallway/sectorNumbers_TVOS.png"}; + Sprite & sector_num_sprite = obj.add_component( + sector_num_asset, Sprite::Data{ + .color = sector_color, + .sorting_in_layer = 5, + .order_in_layer = 0, + .size = vec2(0, 100), + .position_offset = offset + vec2(200, 0), + }); + Animator & sector_num_anim = obj.add_component( + sector_num_sprite, ivec2(256, 128), uvec2(4, 4), Animator::Data{}); + int column = (sector_num - 1) / 4; + int row = (sector_num - 1) % 4; + sector_num_anim.set_anim(column); + for (int i = 0; i < row; i++) { + sector_num_anim.next_anim(); + } + sector_num_anim.pause(); + } + void forest(ComponentManager & mgr) { GameObject forest_begin = mgr.new_object("forest_begin", "background", vec2(begin_x, 0)); -- cgit v1.2.3 From 67cbdbaa87030ccb0cdc20fbb1ebe26fc9758749 Mon Sep 17 00:00:00 2001 From: max-001 Date: Fri, 13 Dec 2024 16:04:36 +0100 Subject: Implemented parallax background --- src/example/game.cpp | 182 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 150 insertions(+), 32 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index 24aa137..f5f6fd7 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -22,6 +22,37 @@ using namespace crepe; using namespace std; +class ParallaxScript : public Script { +public: + ParallaxScript(float begin_x, float end_x, std::string unique_bg_name) + : begin_x(begin_x), + end_x(end_x), + name(unique_bg_name) {} + + void update() { + RefVector vec_2 + = this->get_components_by_name("forest_bg_2_" + name); + RefVector vec_3 + = this->get_components_by_name("forest_bg_3_" + name); + + for (Transform & t : vec_2) { + if (t.position.x < begin_x - 400) { + t.position.x = end_x - 400; + } + } + for (Transform & t : vec_3) { + if (t.position.x < begin_x - 400) { + t.position.x = end_x - 400; + } + } + } + +private: + const float begin_x; + const float end_x; + const std::string name; +}; + class Background { public: Background(ComponentManager & mgr) { @@ -29,11 +60,15 @@ public: this->hallway(mgr, 1, Color::YELLOW); - this->forest(mgr); - - this->aquarium(mgr); + this->forest(mgr, "1"); this->hallway(mgr, 2, Color::MAGENTA); + + this->forest(mgr, "2"); + + this->hallway(mgr, 3, Color::CYAN); + + this->aquarium(mgr); } void start(ComponentManager & mgr) { @@ -91,7 +126,7 @@ public: }); begin_x += 600; - this->add_sector_number(begin, vec2(-200, 0), sector_num, sector_color); + this->add_sector_number_hallway(begin, vec2(-200, 0), sector_num, sector_color); this->add_lamp_hallway(begin, vec2(-70, -120), 11); this->add_lamp_hallway(begin, vec2(30, -120), 9); @@ -166,8 +201,8 @@ public: }); } - void add_sector_number(GameObject & obj, vec2 offset, unsigned int sector_num, - Color sector_color) { + void add_sector_number_hallway(GameObject & obj, vec2 offset, unsigned int sector_num, + Color sector_color) { Asset sector_text_asset{ "asset/jetpack_joyride/background/hallway/sectorText_TVOS.png"}; obj.add_component(sector_text_asset, Sprite::Data{ @@ -198,37 +233,120 @@ public: sector_num_anim.pause(); } - void forest(ComponentManager & mgr) { - GameObject forest_begin - = mgr.new_object("forest_begin", "background", vec2(begin_x, 0)); - Asset forest_begin_asset{ - "asset/jetpack_joyride/background/forest/forestFG_1_TVOS.png"}; - forest_begin.add_component(forest_begin_asset, Sprite::Data{ - .sorting_in_layer = 4, - .order_in_layer = 0, - .size = vec2(0, 800), - }); + void forest(ComponentManager & mgr, std::string unique_bg_name) { + GameObject script = mgr.new_object("forest_script", "background"); + script.add_component().set_script( + begin_x - 400, begin_x + 3000 + 400, unique_bg_name); + + this->add_background_forest(mgr, begin_x, unique_bg_name); + + GameObject begin = mgr.new_object("forest_begin", "background", vec2(begin_x, 0)); + Asset begin_asset{"asset/jetpack_joyride/background/forest/forestFG_1_TVOS.png"}; + begin.add_component(begin_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 0, + .size = vec2(0, 800), + }); begin_x += 800; - GameObject forest_middle - = mgr.new_object("forest_middle", "background", vec2(begin_x, 0)); - Asset forest_middle_asset{ - "asset/jetpack_joyride/background/forest/forestFG_3_TVOS.png"}; - forest_middle.add_component(forest_middle_asset, Sprite::Data{ - .sorting_in_layer = 4, - .order_in_layer = 2, - .size = vec2(0, 800), - }); + this->add_background_forest(mgr, begin_x, unique_bg_name); + + GameObject middle_1 = mgr.new_object("forest_middle", "background", vec2(begin_x, 0)); + Asset middle_1_asset{"asset/jetpack_joyride/background/forest/forestFG_3_TVOS.png"}; + middle_1.add_component(middle_1_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 2, + .size = vec2(0, 800), + }); begin_x += 800; - GameObject forest_end = mgr.new_object("forest_end", "background", vec2(begin_x, 0)); - Asset forest_end_asset{"asset/jetpack_joyride/background/forest/forestFG_2_TVOS.png"}; - forest_end.add_component(forest_end_asset, Sprite::Data{ - .sorting_in_layer = 4, - .order_in_layer = 1, - .size = vec2(0, 800), - }); + this->add_background_forest(mgr, begin_x, unique_bg_name); + + GameObject middle_2 = mgr.new_object("forest_middle", "background", vec2(begin_x, 0)); + Asset middle_2_asset{"asset/jetpack_joyride/background/forest/forestFG_3_TVOS.png"}; + middle_2.add_component(middle_2_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 3, + .size = vec2(0, 800), + }); + begin_x += 800; + + this->add_background_forest(mgr, begin_x, unique_bg_name); + + GameObject end = mgr.new_object("forest_end", "background", vec2(begin_x, 0)); + Asset end_asset{"asset/jetpack_joyride/background/forest/forestFG_2_TVOS.png"}; + end.add_component(end_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 1, + .size = vec2(0, 800), + }); begin_x += 600; + + this->add_background_forest(mgr, begin_x + 200, unique_bg_name); + } + + void add_background_forest(ComponentManager & mgr, float begin_x, std::string name) { + GameObject bg_1 + = mgr.new_object("forest_bg_1_" + name, "forest_background", vec2(begin_x, 0)); + Asset bg_1_asset{"asset/jetpack_joyride/background/forest/forestBG1_1_TVOS.png"}; + bg_1.add_component(bg_1_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 2, + .size = vec2(0, 800), + }); + GameObject bg_2 + = mgr.new_object("forest_bg_2_" + name, "forest_background", vec2(begin_x, 0)); + Asset bg_2_1_asset{"asset/jetpack_joyride/background/forest/forestBG2_1_TVOS.png"}; + bg_2.add_component(bg_2_1_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 1, + .size = vec2(0, 400), + .position_offset = vec2(200, 0), + }); + Asset bg_2_2_asset{"asset/jetpack_joyride/background/forest/forestBG2_2_TVOS.png"}; + bg_2.add_component(bg_2_2_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 1, + .size = vec2(0, 400), + .position_offset = vec2(-200, 0), + }); + GameObject bg_3 + = mgr.new_object("forest_bg_3_" + name, "forest_background", vec2(begin_x, 0)); + Asset bg_3_1_asset{"asset/jetpack_joyride/background/forest/forestBG3_1_TVOS.png"}; + bg_3.add_component(bg_3_1_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 0, + .size = vec2(0, 200), + .position_offset = vec2(300, 0), + }); + Asset bg_3_2_asset{"asset/jetpack_joyride/background/forest/forestBG3_2_TVOS.png"}; + bg_3.add_component(bg_3_2_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 0, + .size = vec2(0, 200), + .position_offset = vec2(100, 0), + }); + Asset bg_3_3_asset{"asset/jetpack_joyride/background/forest/forestBG3_3_TVOS.png"}; + bg_3.add_component(bg_3_3_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 0, + .size = vec2(0, 200), + .position_offset = vec2(-100, 0), + }); + Asset bg_3_4_asset{"asset/jetpack_joyride/background/forest/forestBG3_4_TVOS.png"}; + bg_3.add_component(bg_3_4_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 0, + .size = vec2(0, 200), + .position_offset = vec2(-300, 0), + }); + + bg_2.add_component(Rigidbody::Data{ + .linear_velocity = vec2(-2, 0), + }); + bg_3.add_component(Rigidbody::Data{ + .linear_velocity = vec2(-1, 0), + }); } void aquarium(ComponentManager & mgr) { -- cgit v1.2.3 From 9f0676acc2b67e8d3be3503797c0241147bf2489 Mon Sep 17 00:00:00 2001 From: max-001 Date: Fri, 13 Dec 2024 16:46:05 +0100 Subject: Added aquarium --- src/example/game.cpp | 116 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 108 insertions(+), 8 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index f5f6fd7..93c2f35 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -64,10 +64,14 @@ public: this->hallway(mgr, 2, Color::MAGENTA); - this->forest(mgr, "2"); + this->aquarium(mgr); this->hallway(mgr, 3, Color::CYAN); + this->forest(mgr, "2"); + + this->hallway(mgr, 4, Color::GREEN); + this->aquarium(mgr); } @@ -350,6 +354,8 @@ public: } void aquarium(ComponentManager & mgr) { + this->add_background_aquarium(mgr, begin_x); + GameObject aquarium_begin = mgr.new_object("aquarium_begin", "background", vec2(begin_x, 0)); Asset aquarium_begin_asset{ @@ -361,17 +367,60 @@ public: }); begin_x += 600; - GameObject aquarium_middle + GameObject aquarium_middle_1 + = mgr.new_object("aquarium_middle", "background", vec2(begin_x, 0)); + Asset aquarium_middle_1_asset{ + "asset/jetpack_joyride/background/aquarium/glassTubeFG_3_TVOS.png"}; + aquarium_middle_1.add_component(aquarium_middle_1_asset, + Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 2, + .size = vec2(0, 800), + }); + begin_x += 400; + + this->add_background_aquarium(mgr, begin_x - 200); + + GameObject aquarium_middle_2 + = mgr.new_object("aquarium_middle", "background", vec2(begin_x, 0)); + Asset aquarium_middle_2_asset{ + "asset/jetpack_joyride/background/aquarium/glassTubeFG_3_TVOS.png"}; + aquarium_middle_2.add_component(aquarium_middle_2_asset, + Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 3, + .size = vec2(0, 800), + }); + begin_x += 400; + + GameObject aquarium_middle_3 + = mgr.new_object("aquarium_middle", "background", vec2(begin_x, 0)); + Asset aquarium_middle_3_asset{ + "asset/jetpack_joyride/background/aquarium/glassTubeFG_3_TVOS.png"}; + aquarium_middle_3.add_component(aquarium_middle_3_asset, + Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 4, + .size = vec2(0, 800), + }); + begin_x += 400; + + this->add_background_aquarium(mgr, begin_x - 200); + + GameObject aquarium_middle_4 = mgr.new_object("aquarium_middle", "background", vec2(begin_x, 0)); - Asset aquarium_middle_asset{ + Asset aquarium_middle_4_asset{ "asset/jetpack_joyride/background/aquarium/glassTubeFG_3_TVOS.png"}; - aquarium_middle.add_component(aquarium_middle_asset, Sprite::Data{ - .sorting_in_layer = 4, - .order_in_layer = 2, - .size = vec2(0, 800), - }); + aquarium_middle_4.add_component(aquarium_middle_4_asset, + Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 5, + .size = vec2(0, 800), + }); begin_x += 600; + this->add_background_aquarium(mgr, begin_x); + GameObject aquarium_end = mgr.new_object("aquarium_end", "background", vec2(begin_x, 0)); Asset aquarium_end_asset{ @@ -384,6 +433,57 @@ public: begin_x += 600; } + void add_background_aquarium(ComponentManager & mgr, float begin_x) { + GameObject bg_1 + = mgr.new_object("aquarium_bg_1", "aquarium_background", vec2(begin_x, 0)); + Asset bg_1_1_asset{"asset/jetpack_joyride/background/aquarium/AquariumBG1_1_TVOS.png"}; + bg_1.add_component(bg_1_1_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 2, + .size = vec2(0, 400), + .position_offset = vec2(-200, 100), + }); + Asset bg_1_2_asset{"asset/jetpack_joyride/background/aquarium/AquariumBG1_2_TVOS.png"}; + bg_1.add_component(bg_1_2_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 2, + .size = vec2(0, 400), + .position_offset = vec2(200, 100), + }); + GameObject bg_2 + = mgr.new_object("aquarium_bg_2", "aquarium_background", vec2(begin_x, 0)); + Asset bg_2_1_asset{"asset/jetpack_joyride/background/aquarium/AquariumBG2_1_TVOS.png"}; + bg_2.add_component(bg_2_1_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 1, + .size = vec2(0, 400), + .position_offset = vec2(200, -50), + }); + Asset bg_2_2_asset{"asset/jetpack_joyride/background/aquarium/AquariumBG2_2_TVOS.png"}; + bg_2.add_component(bg_2_2_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 1, + .size = vec2(0, 400), + .position_offset = vec2(-200, -50), + }); + GameObject bg_3 + = mgr.new_object("aquarium_bg_3", "aquarium_background", vec2(begin_x, 0)); + Asset bg_3_1_asset{"asset/jetpack_joyride/background/aquarium/AquariumBG3_1_TVOS.png"}; + bg_3.add_component(bg_3_1_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 0, + .size = vec2(0, 400), + .position_offset = vec2(200, -200), + }); + Asset bg_3_2_asset{"asset/jetpack_joyride/background/aquarium/AquariumBG3_2_TVOS.png"}; + bg_3.add_component(bg_3_2_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 0, + .size = vec2(0, 400), + .position_offset = vec2(-200, -200), + }); + } + private: float begin_x = 0; }; -- cgit v1.2.3 From 9bd81b51cc6d3ba428a29c7d0d90e289b7229878 Mon Sep 17 00:00:00 2001 From: max-001 Date: Fri, 13 Dec 2024 16:54:24 +0100 Subject: Improved game --- src/example/game.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index 93c2f35..62e7732 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -346,10 +346,10 @@ public: }); bg_2.add_component(Rigidbody::Data{ - .linear_velocity = vec2(-2, 0), + .linear_velocity = vec2(-0.5, 0), }); bg_3.add_component(Rigidbody::Data{ - .linear_velocity = vec2(-1, 0), + .linear_velocity = vec2(-0.25, 0), }); } @@ -522,6 +522,9 @@ public: .bg_color = Color::RED, }); camera.add_component().set_script(); + camera.add_component(Rigidbody::Data{ + .linear_velocity = vec2(2.5, 0), + }); } string get_name() const { return "scene1"; } -- cgit v1.2.3 From 512aa7f54b88994d3095971b2001930b4e612947 Mon Sep 17 00:00:00 2001 From: JAROWMR Date: Fri, 13 Dec 2024 20:44:32 +0100 Subject: make format --- src/crepe/Particle.h | 3 ++- src/crepe/api/ParticleEmitter.cpp | 6 +++-- src/crepe/api/ParticleEmitter.h | 5 ++-- src/crepe/system/ParticleSystem.cpp | 10 ++++---- src/crepe/system/ParticleSystem.h | 1 - src/example/game.cpp | 31 ++++++++++++------------ src/example/rendering_particle.cpp | 1 - src/test/ParticleTest.cpp | 48 ++++++++++++++++++------------------- 8 files changed, 53 insertions(+), 52 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/crepe/Particle.h b/src/crepe/Particle.h index 0170117..ee0cd66 100644 --- a/src/crepe/Particle.h +++ b/src/crepe/Particle.h @@ -41,7 +41,8 @@ public: * \param velocity The initial velocity of the particle. * \param angle The angle of the particle's trajectory or orientation. */ - void reset(unsigned int lifespan, const vec2 & position, const vec2 & velocity, float angle); + void reset(unsigned int lifespan, const vec2 & position, const vec2 & velocity, + float angle); /** * \brief Updates the particle's state. * diff --git a/src/crepe/api/ParticleEmitter.cpp b/src/crepe/api/ParticleEmitter.cpp index 1e9cfaa..4f54bbd 100644 --- a/src/crepe/api/ParticleEmitter.cpp +++ b/src/crepe/api/ParticleEmitter.cpp @@ -3,9 +3,11 @@ using namespace crepe; -ParticleEmitter::ParticleEmitter(game_object_id_t game_object_id, const Sprite & sprite, const Data & data) +ParticleEmitter::ParticleEmitter(game_object_id_t game_object_id, const Sprite & sprite, + const Data & data) : Component(game_object_id), - sprite(sprite), data(data) { + sprite(sprite), + data(data) { for (size_t i = 0; i < this->data.max_particles; i++) { this->particles.emplace_back(); } diff --git a/src/crepe/api/ParticleEmitter.h b/src/crepe/api/ParticleEmitter.h index 5b8e8e3..be970f5 100644 --- a/src/crepe/api/ParticleEmitter.h +++ b/src/crepe/api/ParticleEmitter.h @@ -78,18 +78,19 @@ public: * \param game_object_id Identifier for the game object using this emitter. * \param data Configuration data defining particle properties. */ - ParticleEmitter(game_object_id_t game_object_id, const Sprite & sprite,const Data & data); + ParticleEmitter(game_object_id_t game_object_id, const Sprite & sprite, const Data & data); public: //! Configuration data for particle emission settings. Data data; + private: //! Only ParticleSystem can move and read particles friend ParticleSystem; //! Only RenderSystem can read particles friend RenderSystem; //! Saves time left over from last update event. - float spawn_accumulator = 0; + float spawn_accumulator = 0; //! collection of particles std::vector particles; }; diff --git a/src/crepe/system/ParticleSystem.cpp b/src/crepe/system/ParticleSystem.cpp index f98f245..31a4e9e 100644 --- a/src/crepe/system/ParticleSystem.cpp +++ b/src/crepe/system/ParticleSystem.cpp @@ -31,8 +31,8 @@ void ParticleSystem::update() { while (emitter.spawn_accumulator >= 1.0) { this->emit_particle(emitter, transform); emitter.spawn_accumulator -= 1.0; - } - + } + // Update all particles for (Particle & particle : emitter.particles) { if (particle.active) { @@ -49,9 +49,11 @@ void ParticleSystem::emit_particle(ParticleEmitter & emitter, const Transform & constexpr float DEG_TO_RAD = M_PI / 180.0; vec2 initial_position = emitter.data.position + transform.position; - float random_angle = this->generate_random_angle(emitter.data.min_angle, emitter.data.max_angle); + float random_angle + = this->generate_random_angle(emitter.data.min_angle, emitter.data.max_angle); - float random_speed = this->generate_random_speed(emitter.data.min_speed, emitter.data.max_speed); + float random_speed + = this->generate_random_speed(emitter.data.min_speed, emitter.data.max_speed); float angle_radians = random_angle * DEG_TO_RAD; vec2 velocity diff --git a/src/crepe/system/ParticleSystem.h b/src/crepe/system/ParticleSystem.h index 95a2bd5..154521d 100644 --- a/src/crepe/system/ParticleSystem.h +++ b/src/crepe/system/ParticleSystem.h @@ -23,7 +23,6 @@ public: void update() override; private: - /** * \brief Emits a particle from the specified emitter based on its emission properties. * diff --git a/src/example/game.cpp b/src/example/game.cpp index 279648e..2d25153 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -261,24 +261,23 @@ public: = false; Asset img5{"asset/texture/square.png"}; - - GameObject particle = mgr.new_object( "Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 0, 1); - auto & particle_image = particle.add_component(img5, Sprite::Data{.size = {5, 5},}); - auto & test = particle.add_component(particle_image,ParticleEmitter::Data{ - .position = {0, 0}, - .max_particles = 256, - .emission_rate = 50, - .min_speed = 10, - .max_speed = 20, - .min_angle = -20, - .max_angle = 20, - .begin_lifespan = 0, - .end_lifespan = 5, - } - ); - + auto & particle_image = particle.add_component(img5, Sprite::Data{ + .size = {5, 5}, + }); + auto & test + = particle.add_component(particle_image, ParticleEmitter::Data{ + .position = {0, 0}, + .max_particles = 256, + .emission_rate = 50, + .min_speed = 10, + .max_speed = 20, + .min_angle = -20, + .max_angle = 20, + .begin_lifespan = 0, + .end_lifespan = 5, + }); } string get_name() const { return "scene1"; } diff --git a/src/example/rendering_particle.cpp b/src/example/rendering_particle.cpp index 2b5c041..add43f4 100644 --- a/src/example/rendering_particle.cpp +++ b/src/example/rendering_particle.cpp @@ -17,7 +17,6 @@ using namespace crepe; using namespace std; - class TestScene : public Scene { public: diff --git a/src/test/ParticleTest.cpp b/src/test/ParticleTest.cpp index a9a26c6..8ffb140 100644 --- a/src/test/ParticleTest.cpp +++ b/src/test/ParticleTest.cpp @@ -1,6 +1,4 @@ #include "api/Asset.h" -#include -#include #include #include #include @@ -8,18 +6,18 @@ #include #include #include +#include +#include #define protected public #define private public #include #include #include - using namespace std; using namespace std::chrono_literals; using namespace crepe; - class ParticlesTest : public ::testing::Test { Mediator m; @@ -44,25 +42,25 @@ public: .size = {10, 10}, }); - game_object.add_component(test_sprite,ParticleEmitter::Data{ - .position = {0, 0}, - .max_particles = 100, - .emission_rate = 0, - .min_speed = 0, - .max_speed = 0, - .min_angle = 0, - .max_angle = 0, - .begin_lifespan = 0, - .end_lifespan = 0, - .force_over_time = vec2{0, 0}, - .boundary{ - .width = 0, - .height = 0, - .offset = vec2{0, 0}, - .reset_on_exit = false, - }, - }); - + game_object.add_component(test_sprite, + ParticleEmitter::Data{ + .position = {0, 0}, + .max_particles = 100, + .emission_rate = 0, + .min_speed = 0, + .max_speed = 0, + .min_angle = 0, + .max_angle = 0, + .begin_lifespan = 0, + .end_lifespan = 0, + .force_over_time = vec2{0, 0}, + .boundary{ + .width = 0, + .height = 0, + .offset = vec2{0, 0}, + .reset_on_exit = false, + }, + }); } transforms = mgr.get_components_by_id(0); Transform & transform = transforms.front().get(); @@ -209,6 +207,6 @@ TEST_F(ParticlesTest, boundaryParticleStop) { EXPECT_NEAR(std::abs(emitter.particles[0].position.x), emitter.data.boundary.height / 2, TOLERANCE); if (emitter.particles[0].velocity.y != 0) - EXPECT_NEAR(std::abs(emitter.particles[0].position.y), - emitter.data.boundary.width / 2, TOLERANCE); + EXPECT_NEAR(std::abs(emitter.particles[0].position.y), emitter.data.boundary.width / 2, + TOLERANCE); } -- cgit v1.2.3 From e30057abadb5372d84230fa4ce4238528177a9bf Mon Sep 17 00:00:00 2001 From: JAROWMR Date: Sat, 14 Dec 2024 11:53:40 +0100 Subject: fixed game example --- src/example/game.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index f8520f4..7c9a227 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -262,7 +262,7 @@ public: = false; Asset img5{"asset/texture/square.png"}; - GameObject particle = mgr.new_object( + GameObject particle = new_object( "Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 0, 1); auto & particle_image = particle.add_component(img5, Sprite::Data{ .size = {5, 5}, -- cgit v1.2.3 From 1a5116b944bcbdeeb3474faefbe150e82f8697b1 Mon Sep 17 00:00:00 2001 From: JAROWMR Date: Sat, 14 Dec 2024 13:24:14 +0100 Subject: updated api and game --- src/crepe/api/BoxCollider.cpp | 3 +-- src/crepe/api/BoxCollider.h | 2 +- src/crepe/api/CircleCollider.cpp | 3 +-- src/crepe/api/CircleCollider.h | 2 +- src/crepe/api/Rigidbody.h | 2 +- src/example/game.cpp | 26 ++++++++------------------ 6 files changed, 13 insertions(+), 25 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/crepe/api/BoxCollider.cpp b/src/crepe/api/BoxCollider.cpp index c097a24..302bdd2 100644 --- a/src/crepe/api/BoxCollider.cpp +++ b/src/crepe/api/BoxCollider.cpp @@ -4,7 +4,6 @@ using namespace crepe; -BoxCollider::BoxCollider(game_object_id_t game_object_id, const vec2 & offset, - const vec2 & dimensions) +BoxCollider::BoxCollider(game_object_id_t game_object_id,const vec2 & dimensions,const vec2 & offset) : Collider(game_object_id, offset), dimensions(dimensions) {} diff --git a/src/crepe/api/BoxCollider.h b/src/crepe/api/BoxCollider.h index 1ac4d46..a507e0c 100644 --- a/src/crepe/api/BoxCollider.h +++ b/src/crepe/api/BoxCollider.h @@ -13,7 +13,7 @@ namespace crepe { */ class BoxCollider : public Collider { public: - BoxCollider(game_object_id_t game_object_id, const vec2 & offset, const vec2 & dimensions); + BoxCollider(game_object_id_t game_object_id, const vec2 & dimensions,const vec2 & offset= {0,0}); //! Width and height of the box collider vec2 dimensions; diff --git a/src/crepe/api/CircleCollider.cpp b/src/crepe/api/CircleCollider.cpp index a4271e9..e542275 100644 --- a/src/crepe/api/CircleCollider.cpp +++ b/src/crepe/api/CircleCollider.cpp @@ -2,7 +2,6 @@ using namespace crepe; -CircleCollider::CircleCollider(game_object_id_t game_object_id, const vec2 & offset, - float radius) +CircleCollider::CircleCollider(game_object_id_t game_object_id, float radius, const vec2 & offset) : Collider(game_object_id, offset), radius(radius) {} diff --git a/src/crepe/api/CircleCollider.h b/src/crepe/api/CircleCollider.h index c7bf66e..ea40068 100644 --- a/src/crepe/api/CircleCollider.h +++ b/src/crepe/api/CircleCollider.h @@ -13,7 +13,7 @@ namespace crepe { */ class CircleCollider : public Collider { public: - CircleCollider(game_object_id_t game_object_id, const vec2 & offset, float radius); + CircleCollider(game_object_id_t game_object_id, float radius, const vec2 & offset= {0,0}); //! Radius of the circle collider. float radius; diff --git a/src/crepe/api/Rigidbody.h b/src/crepe/api/Rigidbody.h index b08c8db..6900295 100644 --- a/src/crepe/api/Rigidbody.h +++ b/src/crepe/api/Rigidbody.h @@ -139,7 +139,7 @@ public: * Each element represents a layer ID, and the GameObject will only detect * collisions with other GameObjects that belong to these layers. */ - std::set collision_layers; + std::set collision_layers = {0}; }; public: diff --git a/src/example/game.cpp b/src/example/game.cpp index 8ea50ea..60c9088 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -176,19 +176,11 @@ public: .gravity_scale = 0, .body_type = Rigidbody::BodyType::STATIC, .offset = {0, 0}, - .collision_layers = {0}, }); - world.add_component( - vec2{0, 0 - (screen_size_height / 2 + world_collider / 2)}, - vec2{world_collider, world_collider}); - ; // Top - world.add_component(vec2{0, screen_size_height / 2 + world_collider / 2}, - vec2{world_collider, world_collider}); // Bottom - world.add_component( - vec2{0 - (screen_size_width / 2 + world_collider / 2), 0}, - vec2{world_collider, world_collider}); // Left - world.add_component(vec2{screen_size_width / 2 + world_collider / 2, 0}, - vec2{world_collider, world_collider}); // right + world.add_component(vec2{world_collider, world_collider},vec2{0, 0 - (screen_size_height / 2 + world_collider / 2)}); // Top + world.add_component(vec2{world_collider, world_collider},vec2{0, screen_size_height / 2 + world_collider / 2}); // Bottom + world.add_component(vec2{world_collider, world_collider},vec2{0 - (screen_size_width / 2 + world_collider / 2), 0}); // Left + world.add_component(vec2{world_collider, world_collider},vec2{screen_size_width / 2 + world_collider / 2, 0}); // right world.add_component( ivec2{static_cast(screen_size_width), static_cast(screen_size_height)}, vec2{screen_size_width, screen_size_height}, @@ -207,10 +199,9 @@ public: .constraints = {0, 0, 0}, .elastisity_coefficient = 1, .offset = {0, 0}, - .collision_layers = {0}, }); // add box with boxcollider - game_object1.add_component(vec2{0, 0}, vec2{20, 20}); + game_object1.add_component(vec2{20, 20}); game_object1.add_component().set_script(); Asset img1{"asset/texture/square.png"}; @@ -219,7 +210,7 @@ public: }); //add circle with cirlcecollider deactiveated - game_object1.add_component(vec2{0, 0}, 10).active = false; + game_object1.add_component(10).active = false; Asset img2{"asset/texture/circle.png"}; game_object1 .add_component(img2, @@ -239,10 +230,9 @@ public: .constraints = {0, 0, 0}, .elastisity_coefficient = 1, .offset = {0, 0}, - .collision_layers = {0}, }); // add box with boxcollider - game_object2.add_component(vec2{0, 0}, vec2{20, 20}); + game_object2.add_component(vec2{20, 20}); game_object2.add_component().set_script(); game_object2.add_component(img1, Sprite::Data{ @@ -250,7 +240,7 @@ public: }); //add circle with cirlcecollider deactiveated - game_object2.add_component(vec2{0, 0}, 10).active = false; + game_object2.add_component(10).active = false; game_object2 .add_component(img2, -- cgit v1.2.3 From dd89b381c212aa55a4e9d7bc7eea014e992956ef Mon Sep 17 00:00:00 2001 From: JAROWMR Date: Sat, 14 Dec 2024 13:29:52 +0100 Subject: used add force in game.cpp --- src/example/game.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index 60c9088..d03d78d 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -35,7 +35,8 @@ class MyScript1 : public Script { } case Keycode::W: { Rigidbody & tf = this->get_component(); - tf.data.linear_velocity.y -= 1; + // tf.data.linear_velocity.y -= 1; + tf.add_force_linear({0,-1}); break; } case Keycode::S: { @@ -197,7 +198,7 @@ public: .body_type = Rigidbody::BodyType::DYNAMIC, .linear_velocity = {0, 1}, .constraints = {0, 0, 0}, - .elastisity_coefficient = 1, + .elastisity_coefficient = 0, .offset = {0, 0}, }); // add box with boxcollider -- cgit v1.2.3 From 4cddaf8e8b809a69a8e03e79c4f7902920745a9a Mon Sep 17 00:00:00 2001 From: JAROWMR Date: Sat, 14 Dec 2024 18:23:31 +0100 Subject: make format --- src/crepe/api/BoxCollider.cpp | 3 ++- src/crepe/api/BoxCollider.h | 3 ++- src/crepe/api/CircleCollider.cpp | 3 ++- src/crepe/api/CircleCollider.h | 3 ++- src/example/game.cpp | 18 +++++++++++++----- src/test/CollisionTest.cpp | 12 ++++++------ 6 files changed, 27 insertions(+), 15 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/crepe/api/BoxCollider.cpp b/src/crepe/api/BoxCollider.cpp index 302bdd2..a893d41 100644 --- a/src/crepe/api/BoxCollider.cpp +++ b/src/crepe/api/BoxCollider.cpp @@ -4,6 +4,7 @@ using namespace crepe; -BoxCollider::BoxCollider(game_object_id_t game_object_id,const vec2 & dimensions,const vec2 & offset) +BoxCollider::BoxCollider(game_object_id_t game_object_id, const vec2 & dimensions, + const vec2 & offset) : Collider(game_object_id, offset), dimensions(dimensions) {} diff --git a/src/crepe/api/BoxCollider.h b/src/crepe/api/BoxCollider.h index a507e0c..d643e7f 100644 --- a/src/crepe/api/BoxCollider.h +++ b/src/crepe/api/BoxCollider.h @@ -13,7 +13,8 @@ namespace crepe { */ class BoxCollider : public Collider { public: - BoxCollider(game_object_id_t game_object_id, const vec2 & dimensions,const vec2 & offset= {0,0}); + BoxCollider(game_object_id_t game_object_id, const vec2 & dimensions, + const vec2 & offset = {0, 0}); //! Width and height of the box collider vec2 dimensions; diff --git a/src/crepe/api/CircleCollider.cpp b/src/crepe/api/CircleCollider.cpp index e542275..90ab5e7 100644 --- a/src/crepe/api/CircleCollider.cpp +++ b/src/crepe/api/CircleCollider.cpp @@ -2,6 +2,7 @@ using namespace crepe; -CircleCollider::CircleCollider(game_object_id_t game_object_id, float radius, const vec2 & offset) +CircleCollider::CircleCollider(game_object_id_t game_object_id, float radius, + const vec2 & offset) : Collider(game_object_id, offset), radius(radius) {} diff --git a/src/crepe/api/CircleCollider.h b/src/crepe/api/CircleCollider.h index ea40068..22da836 100644 --- a/src/crepe/api/CircleCollider.h +++ b/src/crepe/api/CircleCollider.h @@ -13,7 +13,8 @@ namespace crepe { */ class CircleCollider : public Collider { public: - CircleCollider(game_object_id_t game_object_id, float radius, const vec2 & offset= {0,0}); + CircleCollider(game_object_id_t game_object_id, float radius, + const vec2 & offset = {0, 0}); //! Radius of the circle collider. float radius; diff --git a/src/example/game.cpp b/src/example/game.cpp index d03d78d..61f8760 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -36,7 +36,7 @@ class MyScript1 : public Script { case Keycode::W: { Rigidbody & tf = this->get_component(); // tf.data.linear_velocity.y -= 1; - tf.add_force_linear({0,-1}); + tf.add_force_linear({0, -1}); break; } case Keycode::S: { @@ -178,10 +178,18 @@ public: .body_type = Rigidbody::BodyType::STATIC, .offset = {0, 0}, }); - world.add_component(vec2{world_collider, world_collider},vec2{0, 0 - (screen_size_height / 2 + world_collider / 2)}); // Top - world.add_component(vec2{world_collider, world_collider},vec2{0, screen_size_height / 2 + world_collider / 2}); // Bottom - world.add_component(vec2{world_collider, world_collider},vec2{0 - (screen_size_width / 2 + world_collider / 2), 0}); // Left - world.add_component(vec2{world_collider, world_collider},vec2{screen_size_width / 2 + world_collider / 2, 0}); // right + world.add_component( + vec2{world_collider, world_collider}, + vec2{0, 0 - (screen_size_height / 2 + world_collider / 2)}); // Top + world.add_component( + vec2{world_collider, world_collider}, + vec2{0, screen_size_height / 2 + world_collider / 2}); // Bottom + world.add_component( + vec2{world_collider, world_collider}, + vec2{0 - (screen_size_width / 2 + world_collider / 2), 0}); // Left + world.add_component( + vec2{world_collider, world_collider}, + vec2{screen_size_width / 2 + world_collider / 2, 0}); // right world.add_component( ivec2{static_cast(screen_size_width), static_cast(screen_size_height)}, vec2{screen_size_width, screen_size_height}, diff --git a/src/test/CollisionTest.cpp b/src/test/CollisionTest.cpp index b34bede..ff9e7cc 100644 --- a/src/test/CollisionTest.cpp +++ b/src/test/CollisionTest.cpp @@ -69,10 +69,10 @@ public: .offset = {0, 0}, }); // Create a box with an inner size of 10x10 units - world.add_component(vec2{100, 100},vec2{0, -100}); // Top - world.add_component(vec2{100, 100},vec2{0, 100}); // Bottom - world.add_component(vec2{100, 100},vec2{-100, 0}); // Left - world.add_component(vec2{100, 100},vec2{100, 0}); // right + world.add_component(vec2{100, 100}, vec2{0, -100}); // Top + world.add_component(vec2{100, 100}, vec2{0, 100}); // Bottom + world.add_component(vec2{100, 100}, vec2{-100, 0}); // Left + world.add_component(vec2{100, 100}, vec2{100, 0}); // right game_object1.add_component(Rigidbody::Data{ .mass = 1, @@ -84,7 +84,7 @@ public: .offset = {0, 0}, .collision_layers = {0}, }); - game_object1.add_component(vec2{10, 10},vec2{0, 0}); + game_object1.add_component(vec2{10, 10}, vec2{0, 0}); BehaviorScript & script_object1 = game_object1.add_component().set_script(1); script_object1_ref = static_cast(script_object1.script.get()); @@ -100,7 +100,7 @@ public: .offset = {0, 0}, .collision_layers = {0}, }); - game_object2.add_component(vec2{10, 10},vec2{0, 0}); + game_object2.add_component(vec2{10, 10}, vec2{0, 0}); BehaviorScript & script_object2 = game_object2.add_component().set_script(2); script_object2_ref = static_cast(script_object2.script.get()); -- cgit v1.2.3 From 22476a51e00089f8c7b810937250ff4d7a14329e Mon Sep 17 00:00:00 2001 From: JAROWMR Date: Sat, 14 Dec 2024 19:59:32 +0100 Subject: updated test and game.cpp --- src/example/game.cpp | 2 +- src/test/ParticleTest.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index 7c9a227..ed6afac 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -269,7 +269,7 @@ public: }); auto & test = particle.add_component(particle_image, ParticleEmitter::Data{ - .position = {0, 0}, + .offset = {0, 0}, .max_particles = 256, .emission_rate = 50, .min_speed = 10, diff --git a/src/test/ParticleTest.cpp b/src/test/ParticleTest.cpp index 8ffb140..9263e00 100644 --- a/src/test/ParticleTest.cpp +++ b/src/test/ParticleTest.cpp @@ -44,7 +44,7 @@ public: game_object.add_component(test_sprite, ParticleEmitter::Data{ - .position = {0, 0}, + .offset = {0, 0}, .max_particles = 100, .emission_rate = 0, .min_speed = 0, @@ -70,7 +70,7 @@ public: std::vector> rigidbodies = mgr.get_components_by_id(0); ParticleEmitter & emitter = rigidbodies.front().get(); - emitter.data.position = {0, 0}; + emitter.data.offset = {0, 0}; emitter.data.emission_rate = 0; emitter.data.min_speed = 0; emitter.data.max_speed = 0; -- cgit v1.2.3 From 20d19e3c714d3e8ca3e35c170c07c563ecc719bb Mon Sep 17 00:00:00 2001 From: JAROWMR Date: Sat, 14 Dec 2024 21:30:32 +0100 Subject: fixed bug with lower than one particle per second --- src/crepe/system/ParticleSystem.cpp | 2 +- src/example/game.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/crepe/system/ParticleSystem.cpp b/src/crepe/system/ParticleSystem.cpp index e61f0ce..35a1d41 100644 --- a/src/crepe/system/ParticleSystem.cpp +++ b/src/crepe/system/ParticleSystem.cpp @@ -27,7 +27,7 @@ void ParticleSystem::update() { = mgr.get_components_by_id(emitter.game_object_id).front().get(); // Emit particles based on emission_rate - emitter.spawn_accumulator = emitter.data.emission_rate * dt; + emitter.spawn_accumulator += emitter.data.emission_rate * dt; while (emitter.spawn_accumulator >= 1.0) { this->emit_particle(emitter, transform); emitter.spawn_accumulator -= 1.0; diff --git a/src/example/game.cpp b/src/example/game.cpp index ed6afac..db0d04b 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -271,7 +271,7 @@ public: = particle.add_component(particle_image, ParticleEmitter::Data{ .offset = {0, 0}, .max_particles = 256, - .emission_rate = 50, + .emission_rate = 1, .min_speed = 10, .max_speed = 20, .min_angle = -20, -- cgit v1.2.3 From ccc7dd1f167daf869fb91118bd3fca8ea796fc8d Mon Sep 17 00:00:00 2001 From: max-001 Date: Mon, 16 Dec 2024 14:45:32 +0100 Subject: Fixed parallax --- src/example/game.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index 62e7732..cfa9d5e 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -36,13 +36,13 @@ public: = this->get_components_by_name("forest_bg_3_" + name); for (Transform & t : vec_2) { - if (t.position.x < begin_x - 400) { - t.position.x = end_x - 400; + if (t.position.x > end_x - 400) { + t.position.x = begin_x - 400; } } for (Transform & t : vec_3) { - if (t.position.x < begin_x - 400) { - t.position.x = end_x - 400; + if (t.position.x > end_x - 400) { + t.position.x = begin_x - 400; } } } @@ -346,10 +346,10 @@ public: }); bg_2.add_component(Rigidbody::Data{ - .linear_velocity = vec2(-0.5, 0), + .linear_velocity = vec2(0.3, 0), }); bg_3.add_component(Rigidbody::Data{ - .linear_velocity = vec2(-0.25, 0), + .linear_velocity = vec2(0.4, 0), }); } -- cgit v1.2.3 From ce8cc807f1dbc41aed62e850feb8619868717f84 Mon Sep 17 00:00:00 2001 From: max-001 Date: Mon, 16 Dec 2024 17:54:45 +0100 Subject: Passing Scene instance instead of ComponentManager --- src/crepe/api/Scene.h | 2 +- src/example/game.cpp | 21 +++++++++------------ 2 files changed, 10 insertions(+), 13 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/crepe/api/Scene.h b/src/crepe/api/Scene.h index dcca9d4..d552a43 100644 --- a/src/crepe/api/Scene.h +++ b/src/crepe/api/Scene.h @@ -60,7 +60,7 @@ private: OptionalRef mediator; //! \} -protected: +public: /** * \brief Retrieve the reference to the SaveManager instance * diff --git a/src/example/game.cpp b/src/example/game.cpp index cfa9d5e..5bdccf2 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -55,7 +55,7 @@ private: class Background { public: - Background(ComponentManager & mgr) { + Background(Scene & mgr) { this->start(mgr); this->hallway(mgr, 1, Color::YELLOW); @@ -75,7 +75,7 @@ public: this->aquarium(mgr); } - void start(ComponentManager & mgr) { + void start(Scene & mgr) { GameObject begin = mgr.new_object("start_begin", "background", vec2(begin_x, 0)); Asset begin_asset{"asset/jetpack_joyride/background/start/titleFG_1_TVOS.png"}; begin.add_component(begin_asset, Sprite::Data{ @@ -120,7 +120,7 @@ public: }); } - void hallway(ComponentManager & mgr, unsigned int sector_num, Color sector_color) { + void hallway(Scene & mgr, unsigned int sector_num, Color sector_color) { GameObject begin = mgr.new_object("hallway_begin", "background", vec2(begin_x, 0)); Asset begin_asset{"asset/jetpack_joyride/background/hallway/hallway1FG_1_TVOS.png"}; begin.add_component(begin_asset, Sprite::Data{ @@ -237,7 +237,7 @@ public: sector_num_anim.pause(); } - void forest(ComponentManager & mgr, std::string unique_bg_name) { + void forest(Scene & mgr, std::string unique_bg_name) { GameObject script = mgr.new_object("forest_script", "background"); script.add_component().set_script( begin_x - 400, begin_x + 3000 + 400, unique_bg_name); @@ -289,7 +289,7 @@ public: this->add_background_forest(mgr, begin_x + 200, unique_bg_name); } - void add_background_forest(ComponentManager & mgr, float begin_x, std::string name) { + void add_background_forest(Scene & mgr, float begin_x, std::string name) { GameObject bg_1 = mgr.new_object("forest_bg_1_" + name, "forest_background", vec2(begin_x, 0)); Asset bg_1_asset{"asset/jetpack_joyride/background/forest/forestBG1_1_TVOS.png"}; @@ -353,7 +353,7 @@ public: }); } - void aquarium(ComponentManager & mgr) { + void aquarium(Scene & mgr) { this->add_background_aquarium(mgr, begin_x); GameObject aquarium_begin @@ -433,7 +433,7 @@ public: begin_x += 600; } - void add_background_aquarium(ComponentManager & mgr, float begin_x) { + void add_background_aquarium(Scene & mgr, float begin_x) { GameObject bg_1 = mgr.new_object("aquarium_bg_1", "aquarium_background", vec2(begin_x, 0)); Asset bg_1_1_asset{"asset/jetpack_joyride/background/aquarium/AquariumBG1_1_TVOS.png"}; @@ -511,12 +511,9 @@ private: class Scene1 : public Scene { public: void load_scene() { - Mediator & m = this->mediator; - ComponentManager & mgr = m.component_manager; + Background background(*this); - Background background(mgr); - - GameObject camera = mgr.new_object("camera", "camera", vec2(600, 0)); + GameObject camera = new_object("camera", "camera", vec2(600, 0)); camera.add_component(ivec2(1700, 720), vec2(2000, 800), Camera::Data{ .bg_color = Color::RED, -- cgit v1.2.3 From a33c85c142baf7e7d00ca6d375fbb034080f5744 Mon Sep 17 00:00:00 2001 From: max-001 Date: Mon, 16 Dec 2024 17:56:52 +0100 Subject: Renamed mgr to scn --- src/example/game.cpp | 100 +++++++++++++++++++++++++-------------------------- 1 file changed, 50 insertions(+), 50 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index 5bdccf2..fa5d3c5 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -55,28 +55,28 @@ private: class Background { public: - Background(Scene & mgr) { - this->start(mgr); + Background(Scene & scn) { + this->start(scn); - this->hallway(mgr, 1, Color::YELLOW); + this->hallway(scn, 1, Color::YELLOW); - this->forest(mgr, "1"); + this->forest(scn, "1"); - this->hallway(mgr, 2, Color::MAGENTA); + this->hallway(scn, 2, Color::MAGENTA); - this->aquarium(mgr); + this->aquarium(scn); - this->hallway(mgr, 3, Color::CYAN); + this->hallway(scn, 3, Color::CYAN); - this->forest(mgr, "2"); + this->forest(scn, "2"); - this->hallway(mgr, 4, Color::GREEN); + this->hallway(scn, 4, Color::GREEN); - this->aquarium(mgr); + this->aquarium(scn); } - void start(Scene & mgr) { - GameObject begin = mgr.new_object("start_begin", "background", vec2(begin_x, 0)); + void start(Scene & scn) { + GameObject begin = scn.new_object("start_begin", "background", vec2(begin_x, 0)); Asset begin_asset{"asset/jetpack_joyride/background/start/titleFG_1_TVOS.png"}; begin.add_component(begin_asset, Sprite::Data{ .sorting_in_layer = 4, @@ -85,7 +85,7 @@ public: }); begin_x += 700; - GameObject end = mgr.new_object("start_end", "background", vec2(begin_x, 0)); + GameObject end = scn.new_object("start_end", "background", vec2(begin_x, 0)); Asset end_asset{"asset/jetpack_joyride/background/start/titleFG_2_TVOS.png"}; end.add_component(end_asset, Sprite::Data{ .sorting_in_layer = 4, @@ -120,8 +120,8 @@ public: }); } - void hallway(Scene & mgr, unsigned int sector_num, Color sector_color) { - GameObject begin = mgr.new_object("hallway_begin", "background", vec2(begin_x, 0)); + void hallway(Scene & scn, unsigned int sector_num, Color sector_color) { + GameObject begin = scn.new_object("hallway_begin", "background", vec2(begin_x, 0)); Asset begin_asset{"asset/jetpack_joyride/background/hallway/hallway1FG_1_TVOS.png"}; begin.add_component(begin_asset, Sprite::Data{ .sorting_in_layer = 4, @@ -134,7 +134,7 @@ public: this->add_lamp_hallway(begin, vec2(-70, -120), 11); this->add_lamp_hallway(begin, vec2(30, -120), 9); - GameObject middle_1 = mgr.new_object("hallway_middle", "background", vec2(begin_x, 0)); + 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"}; middle_1.add_component(middle_asset, Sprite::Data{ .sorting_in_layer = 4, @@ -143,7 +143,7 @@ public: }); begin_x += 600; - GameObject middle_2 = mgr.new_object("hallway_middle", "background", vec2(begin_x, 0)); + GameObject middle_2 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0)); Asset middle_asset_2{"asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; middle_2.add_component(middle_asset_2, Sprite::Data{ .sorting_in_layer = 4, @@ -152,7 +152,7 @@ public: }); begin_x += 200; - GameObject middle_3 = mgr.new_object("hallway_middle", "background", vec2(begin_x, 0)); + GameObject middle_3 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0)); Asset middle_asset_3{"asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; middle_3.add_component(middle_asset_3, Sprite::Data{ .sorting_in_layer = 4, @@ -163,7 +163,7 @@ public: this->add_lamp_hallway(middle_3, vec2(0, -120)); - GameObject middle_4 = mgr.new_object("hallway_middle", "background", vec2(begin_x, 0)); + GameObject middle_4 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0)); Asset middle_asset_4{"asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; middle_4.add_component(middle_asset_4, Sprite::Data{ .sorting_in_layer = 4, @@ -172,7 +172,7 @@ public: }); begin_x += 600; - GameObject end = mgr.new_object("hallway_end", "background", vec2(begin_x, 0)); + GameObject end = scn.new_object("hallway_end", "background", vec2(begin_x, 0)); Asset end_asset{"asset/jetpack_joyride/background/hallway/hallway1FG_1_TVOS.png"}; end.add_component(end_asset, Sprite::Data{ .sorting_in_layer = 4, @@ -237,14 +237,14 @@ public: sector_num_anim.pause(); } - void forest(Scene & mgr, std::string unique_bg_name) { - GameObject script = mgr.new_object("forest_script", "background"); + void forest(Scene & scn, std::string unique_bg_name) { + GameObject script = scn.new_object("forest_script", "background"); script.add_component().set_script( begin_x - 400, begin_x + 3000 + 400, unique_bg_name); - this->add_background_forest(mgr, begin_x, unique_bg_name); + this->add_background_forest(scn, begin_x, unique_bg_name); - GameObject begin = mgr.new_object("forest_begin", "background", vec2(begin_x, 0)); + GameObject begin = scn.new_object("forest_begin", "background", vec2(begin_x, 0)); Asset begin_asset{"asset/jetpack_joyride/background/forest/forestFG_1_TVOS.png"}; begin.add_component(begin_asset, Sprite::Data{ .sorting_in_layer = 4, @@ -253,9 +253,9 @@ public: }); begin_x += 800; - this->add_background_forest(mgr, begin_x, unique_bg_name); + this->add_background_forest(scn, begin_x, unique_bg_name); - GameObject middle_1 = mgr.new_object("forest_middle", "background", vec2(begin_x, 0)); + GameObject middle_1 = scn.new_object("forest_middle", "background", vec2(begin_x, 0)); Asset middle_1_asset{"asset/jetpack_joyride/background/forest/forestFG_3_TVOS.png"}; middle_1.add_component(middle_1_asset, Sprite::Data{ .sorting_in_layer = 4, @@ -264,9 +264,9 @@ public: }); begin_x += 800; - this->add_background_forest(mgr, begin_x, unique_bg_name); + this->add_background_forest(scn, begin_x, unique_bg_name); - GameObject middle_2 = mgr.new_object("forest_middle", "background", vec2(begin_x, 0)); + GameObject middle_2 = scn.new_object("forest_middle", "background", vec2(begin_x, 0)); Asset middle_2_asset{"asset/jetpack_joyride/background/forest/forestFG_3_TVOS.png"}; middle_2.add_component(middle_2_asset, Sprite::Data{ .sorting_in_layer = 4, @@ -275,9 +275,9 @@ public: }); begin_x += 800; - this->add_background_forest(mgr, begin_x, unique_bg_name); + this->add_background_forest(scn, begin_x, unique_bg_name); - GameObject end = mgr.new_object("forest_end", "background", vec2(begin_x, 0)); + GameObject end = scn.new_object("forest_end", "background", vec2(begin_x, 0)); Asset end_asset{"asset/jetpack_joyride/background/forest/forestFG_2_TVOS.png"}; end.add_component(end_asset, Sprite::Data{ .sorting_in_layer = 4, @@ -286,12 +286,12 @@ public: }); begin_x += 600; - this->add_background_forest(mgr, begin_x + 200, unique_bg_name); + this->add_background_forest(scn, begin_x + 200, unique_bg_name); } - void add_background_forest(Scene & mgr, float begin_x, std::string name) { + void add_background_forest(Scene & scn, float begin_x, std::string name) { GameObject bg_1 - = mgr.new_object("forest_bg_1_" + name, "forest_background", vec2(begin_x, 0)); + = scn.new_object("forest_bg_1_" + name, "forest_background", vec2(begin_x, 0)); Asset bg_1_asset{"asset/jetpack_joyride/background/forest/forestBG1_1_TVOS.png"}; bg_1.add_component(bg_1_asset, Sprite::Data{ .sorting_in_layer = 3, @@ -299,7 +299,7 @@ public: .size = vec2(0, 800), }); GameObject bg_2 - = mgr.new_object("forest_bg_2_" + name, "forest_background", vec2(begin_x, 0)); + = scn.new_object("forest_bg_2_" + name, "forest_background", vec2(begin_x, 0)); Asset bg_2_1_asset{"asset/jetpack_joyride/background/forest/forestBG2_1_TVOS.png"}; bg_2.add_component(bg_2_1_asset, Sprite::Data{ .sorting_in_layer = 3, @@ -315,7 +315,7 @@ public: .position_offset = vec2(-200, 0), }); GameObject bg_3 - = mgr.new_object("forest_bg_3_" + name, "forest_background", vec2(begin_x, 0)); + = scn.new_object("forest_bg_3_" + name, "forest_background", vec2(begin_x, 0)); Asset bg_3_1_asset{"asset/jetpack_joyride/background/forest/forestBG3_1_TVOS.png"}; bg_3.add_component(bg_3_1_asset, Sprite::Data{ .sorting_in_layer = 3, @@ -353,11 +353,11 @@ public: }); } - void aquarium(Scene & mgr) { - this->add_background_aquarium(mgr, begin_x); + void aquarium(Scene & scn) { + this->add_background_aquarium(scn, begin_x); GameObject aquarium_begin - = mgr.new_object("aquarium_begin", "background", vec2(begin_x, 0)); + = scn.new_object("aquarium_begin", "background", vec2(begin_x, 0)); Asset aquarium_begin_asset{ "asset/jetpack_joyride/background/aquarium/glassTubeFG_1_TVOS.png"}; aquarium_begin.add_component(aquarium_begin_asset, Sprite::Data{ @@ -368,7 +368,7 @@ public: begin_x += 600; GameObject aquarium_middle_1 - = mgr.new_object("aquarium_middle", "background", vec2(begin_x, 0)); + = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0)); Asset aquarium_middle_1_asset{ "asset/jetpack_joyride/background/aquarium/glassTubeFG_3_TVOS.png"}; aquarium_middle_1.add_component(aquarium_middle_1_asset, @@ -379,10 +379,10 @@ public: }); begin_x += 400; - this->add_background_aquarium(mgr, begin_x - 200); + this->add_background_aquarium(scn, begin_x - 200); GameObject aquarium_middle_2 - = mgr.new_object("aquarium_middle", "background", vec2(begin_x, 0)); + = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0)); Asset aquarium_middle_2_asset{ "asset/jetpack_joyride/background/aquarium/glassTubeFG_3_TVOS.png"}; aquarium_middle_2.add_component(aquarium_middle_2_asset, @@ -394,7 +394,7 @@ public: begin_x += 400; GameObject aquarium_middle_3 - = mgr.new_object("aquarium_middle", "background", vec2(begin_x, 0)); + = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0)); Asset aquarium_middle_3_asset{ "asset/jetpack_joyride/background/aquarium/glassTubeFG_3_TVOS.png"}; aquarium_middle_3.add_component(aquarium_middle_3_asset, @@ -405,10 +405,10 @@ public: }); begin_x += 400; - this->add_background_aquarium(mgr, begin_x - 200); + this->add_background_aquarium(scn, begin_x - 200); GameObject aquarium_middle_4 - = mgr.new_object("aquarium_middle", "background", vec2(begin_x, 0)); + = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0)); Asset aquarium_middle_4_asset{ "asset/jetpack_joyride/background/aquarium/glassTubeFG_3_TVOS.png"}; aquarium_middle_4.add_component(aquarium_middle_4_asset, @@ -419,10 +419,10 @@ public: }); begin_x += 600; - this->add_background_aquarium(mgr, begin_x); + this->add_background_aquarium(scn, begin_x); GameObject aquarium_end - = mgr.new_object("aquarium_end", "background", vec2(begin_x, 0)); + = scn.new_object("aquarium_end", "background", vec2(begin_x, 0)); Asset aquarium_end_asset{ "asset/jetpack_joyride/background/aquarium/glassTubeFG_2_TVOS.png"}; aquarium_end.add_component(aquarium_end_asset, Sprite::Data{ @@ -433,9 +433,9 @@ public: begin_x += 600; } - void add_background_aquarium(Scene & mgr, float begin_x) { + void add_background_aquarium(Scene & scn, float begin_x) { GameObject bg_1 - = mgr.new_object("aquarium_bg_1", "aquarium_background", vec2(begin_x, 0)); + = scn.new_object("aquarium_bg_1", "aquarium_background", vec2(begin_x, 0)); Asset bg_1_1_asset{"asset/jetpack_joyride/background/aquarium/AquariumBG1_1_TVOS.png"}; bg_1.add_component(bg_1_1_asset, Sprite::Data{ .sorting_in_layer = 3, @@ -451,7 +451,7 @@ public: .position_offset = vec2(200, 100), }); GameObject bg_2 - = mgr.new_object("aquarium_bg_2", "aquarium_background", vec2(begin_x, 0)); + = scn.new_object("aquarium_bg_2", "aquarium_background", vec2(begin_x, 0)); Asset bg_2_1_asset{"asset/jetpack_joyride/background/aquarium/AquariumBG2_1_TVOS.png"}; bg_2.add_component(bg_2_1_asset, Sprite::Data{ .sorting_in_layer = 3, @@ -467,7 +467,7 @@ public: .position_offset = vec2(-200, -50), }); GameObject bg_3 - = mgr.new_object("aquarium_bg_3", "aquarium_background", vec2(begin_x, 0)); + = scn.new_object("aquarium_bg_3", "aquarium_background", vec2(begin_x, 0)); Asset bg_3_1_asset{"asset/jetpack_joyride/background/aquarium/AquariumBG3_1_TVOS.png"}; bg_3.add_component(bg_3_1_asset, Sprite::Data{ .sorting_in_layer = 3, -- cgit v1.2.3 From 3615d56fba5f4933045e96f17f87d8d909a7e576 Mon Sep 17 00:00:00 2001 From: max-001 Date: Mon, 16 Dec 2024 18:02:12 +0100 Subject: Set correct velocity (after bug fix) --- src/example/game.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index fa5d3c5..d316729 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -346,10 +346,10 @@ public: }); bg_2.add_component(Rigidbody::Data{ - .linear_velocity = vec2(0.3, 0), + .linear_velocity = vec2(30, 0), }); bg_3.add_component(Rigidbody::Data{ - .linear_velocity = vec2(0.4, 0), + .linear_velocity = vec2(40, 0), }); } @@ -520,7 +520,7 @@ public: }); camera.add_component().set_script(); camera.add_component(Rigidbody::Data{ - .linear_velocity = vec2(2.5, 0), + .linear_velocity = vec2(100, 0), }); } -- cgit v1.2.3 From f9f0fbbd71f9f46c1ef2a7205ccef0772dba24cd Mon Sep 17 00:00:00 2001 From: max-001 Date: Mon, 16 Dec 2024 18:31:48 +0100 Subject: Split everything into seperate classes --- src/example/game.cpp | 122 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 75 insertions(+), 47 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index d316729..8d634fa 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -53,29 +53,9 @@ private: const std::string name; }; -class Background { +class Start { public: - Background(Scene & scn) { - this->start(scn); - - this->hallway(scn, 1, Color::YELLOW); - - this->forest(scn, "1"); - - this->hallway(scn, 2, Color::MAGENTA); - - this->aquarium(scn); - - this->hallway(scn, 3, Color::CYAN); - - this->forest(scn, "2"); - - this->hallway(scn, 4, Color::GREEN); - - this->aquarium(scn); - } - - void start(Scene & scn) { + float create(Scene & scn, float begin_x) { GameObject begin = scn.new_object("start_begin", "background", vec2(begin_x, 0)); Asset begin_asset{"asset/jetpack_joyride/background/start/titleFG_1_TVOS.png"}; begin.add_component(begin_asset, Sprite::Data{ @@ -94,10 +74,13 @@ public: }); begin_x += 100; - this->add_lamp_start(end, vec2(-350, -95)); + this->add_lamp(end, vec2(-350, -95)); + + return begin_x; } - void add_lamp_start(GameObject & obj, vec2 offset, unsigned int fps = 10) { +private: + void add_lamp(GameObject & obj, vec2 offset, unsigned int fps = 10) { Asset lamp_asset{"asset/jetpack_joyride/background/start/alarmLight_TVOS.png"}; obj.add_component(lamp_asset, Sprite::Data{ .sorting_in_layer = 5, @@ -119,8 +102,11 @@ public: .looping = true, }); } +}; - void hallway(Scene & scn, unsigned int sector_num, Color sector_color) { +class Hallway { +public: + float create(Scene & scn, float begin_x, unsigned int sector_num, Color sector_color) { GameObject begin = scn.new_object("hallway_begin", "background", vec2(begin_x, 0)); Asset begin_asset{"asset/jetpack_joyride/background/hallway/hallway1FG_1_TVOS.png"}; begin.add_component(begin_asset, Sprite::Data{ @@ -130,9 +116,9 @@ public: }); begin_x += 600; - this->add_sector_number_hallway(begin, vec2(-200, 0), sector_num, sector_color); - this->add_lamp_hallway(begin, vec2(-70, -120), 11); - this->add_lamp_hallway(begin, vec2(30, -120), 9); + 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); 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"}; @@ -161,7 +147,7 @@ public: }); begin_x += 400; - this->add_lamp_hallway(middle_3, vec2(0, -120)); + this->add_lamp(middle_3, vec2(0, -120)); GameObject middle_4 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0)); Asset middle_asset_4{"asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; @@ -180,9 +166,12 @@ public: .size = vec2(0, 800), }); begin_x += 600; + + return begin_x; } - void add_lamp_hallway(GameObject & obj, vec2 offset, unsigned int fps = 10) { +private: + void add_lamp(GameObject & obj, vec2 offset, unsigned int fps = 10) { Asset lamp_asset{"asset/jetpack_joyride/background/hallway/alarmLight_TVOS.png"}; obj.add_component(lamp_asset, Sprite::Data{ .sorting_in_layer = 5, @@ -205,8 +194,8 @@ public: }); } - void add_sector_number_hallway(GameObject & obj, vec2 offset, unsigned int sector_num, - Color sector_color) { + void add_sector_number(GameObject & obj, vec2 offset, unsigned int sector_num, + Color sector_color) { Asset sector_text_asset{ "asset/jetpack_joyride/background/hallway/sectorText_TVOS.png"}; obj.add_component(sector_text_asset, Sprite::Data{ @@ -236,13 +225,16 @@ public: } sector_num_anim.pause(); } +}; - void forest(Scene & scn, std::string unique_bg_name) { +class Forest { +public: + float create(Scene & scn, float begin_x, std::string unique_bg_name) { GameObject script = scn.new_object("forest_script", "background"); script.add_component().set_script( begin_x - 400, begin_x + 3000 + 400, unique_bg_name); - this->add_background_forest(scn, begin_x, unique_bg_name); + this->add_background(scn, begin_x, unique_bg_name); GameObject begin = scn.new_object("forest_begin", "background", vec2(begin_x, 0)); Asset begin_asset{"asset/jetpack_joyride/background/forest/forestFG_1_TVOS.png"}; @@ -253,7 +245,7 @@ public: }); begin_x += 800; - this->add_background_forest(scn, begin_x, unique_bg_name); + this->add_background(scn, begin_x, unique_bg_name); GameObject middle_1 = scn.new_object("forest_middle", "background", vec2(begin_x, 0)); Asset middle_1_asset{"asset/jetpack_joyride/background/forest/forestFG_3_TVOS.png"}; @@ -264,7 +256,7 @@ public: }); begin_x += 800; - this->add_background_forest(scn, begin_x, unique_bg_name); + this->add_background(scn, begin_x, unique_bg_name); GameObject middle_2 = scn.new_object("forest_middle", "background", vec2(begin_x, 0)); Asset middle_2_asset{"asset/jetpack_joyride/background/forest/forestFG_3_TVOS.png"}; @@ -275,7 +267,7 @@ public: }); begin_x += 800; - this->add_background_forest(scn, begin_x, unique_bg_name); + this->add_background(scn, begin_x, unique_bg_name); GameObject end = scn.new_object("forest_end", "background", vec2(begin_x, 0)); Asset end_asset{"asset/jetpack_joyride/background/forest/forestFG_2_TVOS.png"}; @@ -286,10 +278,13 @@ public: }); begin_x += 600; - this->add_background_forest(scn, begin_x + 200, unique_bg_name); + this->add_background(scn, begin_x + 200, unique_bg_name); + + return begin_x; } - void add_background_forest(Scene & scn, float begin_x, std::string name) { +private: + void add_background(Scene & scn, float begin_x, std::string name) { GameObject bg_1 = scn.new_object("forest_bg_1_" + name, "forest_background", vec2(begin_x, 0)); Asset bg_1_asset{"asset/jetpack_joyride/background/forest/forestBG1_1_TVOS.png"}; @@ -352,9 +347,12 @@ public: .linear_velocity = vec2(40, 0), }); } +}; - void aquarium(Scene & scn) { - this->add_background_aquarium(scn, begin_x); +class Aquarium { +public: + float create(Scene & scn, float begin_x) { + this->add_background(scn, begin_x); GameObject aquarium_begin = scn.new_object("aquarium_begin", "background", vec2(begin_x, 0)); @@ -379,7 +377,7 @@ public: }); begin_x += 400; - this->add_background_aquarium(scn, begin_x - 200); + this->add_background(scn, begin_x - 200); GameObject aquarium_middle_2 = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0)); @@ -405,7 +403,7 @@ public: }); begin_x += 400; - this->add_background_aquarium(scn, begin_x - 200); + this->add_background(scn, begin_x - 200); GameObject aquarium_middle_4 = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0)); @@ -419,7 +417,7 @@ public: }); begin_x += 600; - this->add_background_aquarium(scn, begin_x); + this->add_background(scn, begin_x); GameObject aquarium_end = scn.new_object("aquarium_end", "background", vec2(begin_x, 0)); @@ -431,9 +429,12 @@ public: .size = vec2(0, 800), }); begin_x += 600; + + return begin_x; } - void add_background_aquarium(Scene & scn, float begin_x) { +private: + void add_background(Scene & scn, float begin_x) { GameObject bg_1 = scn.new_object("aquarium_bg_1", "aquarium_background", vec2(begin_x, 0)); Asset bg_1_1_asset{"asset/jetpack_joyride/background/aquarium/AquariumBG1_1_TVOS.png"}; @@ -483,9 +484,36 @@ public: .position_offset = vec2(-200, -200), }); } +}; -private: - float begin_x = 0; +class Background { +public: + Background(Scene & scn) { + Start start; + Hallway hallway; + Forest forest; + Aquarium aquarium; + + float begin_x = 0; + + begin_x = start.create(scn, begin_x); + + begin_x = hallway.create(scn, begin_x, 1, Color::YELLOW); + + begin_x = forest.create(scn, begin_x, "1"); + + begin_x = hallway.create(scn, begin_x, 2, Color::MAGENTA); + + begin_x = aquarium.create(scn, begin_x); + + begin_x = hallway.create(scn, begin_x, 3, Color::CYAN); + + begin_x = forest.create(scn, begin_x, "2"); + + begin_x = hallway.create(scn, begin_x, 4, Color::GREEN); + + begin_x = aquarium.create(scn, begin_x); + } }; class MoveCameraScript : public Script { -- cgit v1.2.3 From 16f3aa77cfbfd3327a50a3f11f27e7d7dd303026 Mon Sep 17 00:00:00 2001 From: JAROWMR Date: Mon, 16 Dec 2024 21:14:46 +0100 Subject: Added util for position --- src/crepe/facade/SDLContext.cpp | 2 +- src/crepe/system/CollisionSystem.cpp | 79 +++++++++++++++--------------------- src/crepe/system/CollisionSystem.h | 2 +- src/crepe/system/RenderSystem.cpp | 5 ++- src/crepe/util/AbsoluutPosition.cpp | 21 ++++++++++ src/crepe/util/AbsoluutPosition.h | 17 ++++++++ src/crepe/util/CMakeLists.txt | 2 + src/example/game.cpp | 53 ++++++++++++++++-------- src/test/CollisionTest.cpp | 20 ++++----- 9 files changed, 123 insertions(+), 78 deletions(-) create mode 100644 src/crepe/util/AbsoluutPosition.cpp create mode 100644 src/crepe/util/AbsoluutPosition.h (limited to 'src/example/game.cpp') diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index 20bb030..ee7d149 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -235,7 +235,7 @@ SDL_FRect SDLContext::get_dst_rect(const DestinationRectangleData & ctx) const { } size *= cam_aux_data.render_scale * ctx.img_scale * data.scale_offset; - vec2 screen_pos = (ctx.pos + data.position_offset - cam_aux_data.cam_pos + vec2 screen_pos = (ctx.pos - cam_aux_data.cam_pos + (cam_aux_data.zoomed_viewport) / 2) * cam_aux_data.render_scale - size / 2 + cam_aux_data.bar_size; diff --git a/src/crepe/system/CollisionSystem.cpp b/src/crepe/system/CollisionSystem.cpp index fc8c430..294e7b3 100644 --- a/src/crepe/system/CollisionSystem.cpp +++ b/src/crepe/system/CollisionSystem.cpp @@ -15,31 +15,15 @@ #include "api/Rigidbody.h" #include "api/Transform.h" #include "api/Vector2.h" +#include "util/OptionalRef.h" +#include "util/AbsoluutPosition.h" #include "Collider.h" #include "CollisionSystem.h" #include "types.h" -#include "util/OptionalRef.h" using namespace crepe; -vec2 get_current_position(const Transform & transform,const vec2 & offset) { - // Get the rotation in radians - float radians1 = transform.rotation * (M_PI / 180.0); - - // Calculate total offset with scale - vec2 total_offset = offset * transform.scale; - - // Rotate - float rotated_total_offset_x1 - = total_offset.x * cos(radians1) - total_offset.y * sin(radians1); - float rotated_total_offset_y1 - = total_offset.x * sin(radians1) + total_offset.y * cos(radians1); - - // Final positions considering scaling and rotation - return (transform.position + vec2(rotated_total_offset_x1, rotated_total_offset_y1)); -} - void CollisionSystem::update() { std::vector all_colliders; game_object_id_t id = 0; @@ -155,8 +139,9 @@ CollisionSystem::collision_handler(CollisionInternal & data1, CollisionInternal = std::get>(data1.collider); const BoxCollider & collider2 = std::get>(data2.collider); - vec2 collider_pos1 = get_current_position(data1.transform,collider1.offset); - vec2 collider_pos2 = get_current_position(data2.transform,collider2.offset); + + vec2 collider_pos1 = AbsoluutPosition::get_position(data1.transform,collider1.offset); + vec2 collider_pos2 = AbsoluutPosition::get_position(data2.transform,collider2.offset); resolution = this->get_box_box_resolution(collider1, collider2, collider_pos1, collider_pos2); break; @@ -166,8 +151,8 @@ CollisionSystem::collision_handler(CollisionInternal & data1, CollisionInternal = std::get>(data1.collider); const CircleCollider & collider2 = std::get>(data2.collider); - vec2 collider_pos1 = get_current_position(data1.transform,collider1.offset); - vec2 collider_pos2 = get_current_position(data2.transform,collider2.offset); + vec2 collider_pos1 = AbsoluutPosition::get_position(data1.transform,collider1.offset); + vec2 collider_pos2 = AbsoluutPosition::get_position(data2.transform,collider2.offset); resolution = -this->get_circle_box_resolution(collider2, collider1, collider_pos2, collider_pos1); break; @@ -177,8 +162,8 @@ CollisionSystem::collision_handler(CollisionInternal & data1, CollisionInternal = std::get>(data1.collider); const CircleCollider & collider2 = std::get>(data2.collider); - vec2 collider_pos1 = get_current_position(data1.transform,collider1.offset); - vec2 collider_pos2 = get_current_position(data2.transform,collider2.offset); + vec2 collider_pos1 = AbsoluutPosition::get_position(data1.transform,collider1.offset); + vec2 collider_pos2 = AbsoluutPosition::get_position(data2.transform,collider2.offset); resolution = this->get_circle_circle_resolution(collider1, collider2, collider_pos1, collider_pos2); break; @@ -188,8 +173,8 @@ CollisionSystem::collision_handler(CollisionInternal & data1, CollisionInternal = std::get>(data1.collider); const BoxCollider & collider2 = std::get>(data2.collider); - vec2 collider_pos1 = get_current_position(data1.transform,collider1.offset); - vec2 collider_pos2 = get_current_position(data2.transform,collider2.offset); + vec2 collider_pos1 = AbsoluutPosition::get_position(data1.transform,collider1.offset); + vec2 collider_pos2 = AbsoluutPosition::get_position(data2.transform,collider2.offset); resolution = this->get_circle_box_resolution(collider1, collider2, collider_pos1, collider_pos2); break; @@ -311,15 +296,7 @@ vec2 CollisionSystem::get_circle_box_resolution(const CircleCollider & circle_co } void CollisionSystem::determine_collision_handler(CollisionInfo & info) { - // If both objects are static skip handle call collision script - if(info.this_rigidbody.data.body_type == Rigidbody::BodyType::STATIC && info.other_rigidbody.data.body_type == Rigidbody::BodyType::STATIC) return; - - // First body is not dynamic - if(info.this_rigidbody.data.body_type != Rigidbody::BodyType::DYNAMIC) - { - bool static_collision = info.this_rigidbody.data.body_type == Rigidbody::BodyType::STATIC && info.other_rigidbody.data.body_type == Rigidbody::BodyType::DYNAMIC; - bool kinematic_collision = info.this_rigidbody.data.body_type == Rigidbody::BodyType::KINEMATIC && info.other_rigidbody.data.body_type == Rigidbody::BodyType::DYNAMIC && info.this_rigidbody.data.kinematic_collision; - // Inverted collision info + // Inverted collision info CollisionInfo inverted = { .this_collider = info.other_collider, .this_transform = info.other_transform, @@ -332,13 +309,22 @@ void CollisionSystem::determine_collision_handler(CollisionInfo & info) { .resolution = -info.resolution, .resolution_direction = info.resolution_direction, }; + // If both objects are static skip handle call collision script + if(info.this_rigidbody.data.body_type == Rigidbody::BodyType::STATIC && info.other_rigidbody.data.body_type == Rigidbody::BodyType::STATIC) return; + + // First body is not dynamic + if(info.this_rigidbody.data.body_type != Rigidbody::BodyType::DYNAMIC) + { + bool static_collision = info.this_rigidbody.data.body_type == Rigidbody::BodyType::STATIC && info.other_rigidbody.data.body_type == Rigidbody::BodyType::DYNAMIC; + bool kinematic_collision = info.this_rigidbody.data.body_type == Rigidbody::BodyType::KINEMATIC && info.other_rigidbody.data.body_type == Rigidbody::BodyType::DYNAMIC && info.this_rigidbody.data.kinematic_collision; + if(static_collision || kinematic_collision){ // Static collision this->static_collision_handler(inverted); }; // Call scripts - this->call_collision_events(inverted); + this->call_collision_events(inverted,info); return; } @@ -348,20 +334,21 @@ void CollisionSystem::determine_collision_handler(CollisionInfo & info) { bool static_collision = info.other_rigidbody.data.body_type == Rigidbody::BodyType::STATIC; bool kinematic_collision = info.other_rigidbody.data.body_type == Rigidbody::BodyType::KINEMATIC && info.other_rigidbody.data.kinematic_collision; if(static_collision || kinematic_collision) this->static_collision_handler(info); - this->call_collision_events(info); + this->call_collision_events(info,inverted); return; } //dynamic this->dynamic_collision_handler(info); - this->call_collision_events(info); + this->call_collision_events(info,inverted); } -void CollisionSystem::call_collision_events(CollisionInfo & info){ +void CollisionSystem::call_collision_events(CollisionInfo & info,CollisionInfo & info_inverted){ CollisionEvent data(info); + CollisionEvent data_inverted(info_inverted); EventManager & emgr = this->mediator.event_manager; emgr.trigger_event(data, info.this_collider.game_object_id); - emgr.trigger_event(data, info.other_collider.game_object_id); + emgr.trigger_event(data_inverted, info_inverted.this_collider.game_object_id); } void CollisionSystem::static_collision_handler(CollisionInfo & info) { @@ -615,8 +602,8 @@ bool CollisionSystem::get_box_box_collision(const BoxCollider & box1, const BoxC const Rigidbody & rigidbody1, const Rigidbody & rigidbody2) const { // Get current positions of colliders - vec2 final_position1 = get_current_position(transform1,box1.offset); - vec2 final_position2 = get_current_position(transform2,box2.offset); + vec2 final_position1 = AbsoluutPosition::get_position(transform1,box1.offset); + vec2 final_position2 = AbsoluutPosition::get_position(transform2,box2.offset); // Scale dimensions vec2 scaled_box1 = box1.dimensions * transform1.scale; @@ -642,8 +629,8 @@ bool CollisionSystem::get_box_circle_collision(const BoxCollider & box1, const Rigidbody & rigidbody1, const Rigidbody & rigidbody2) const { // Get current positions of colliders - vec2 final_position1 = get_current_position(transform1,box1.offset); - vec2 final_position2 = get_current_position(transform2,circle2.offset); + vec2 final_position1 = AbsoluutPosition::get_position(transform1,box1.offset); + vec2 final_position2 = AbsoluutPosition::get_position(transform2,circle2.offset); // Scale dimensions vec2 scaled_box = box1.dimensions * transform1.scale; @@ -675,8 +662,8 @@ bool CollisionSystem::get_circle_circle_collision(const CircleCollider & circle1 const Rigidbody & rigidbody1, const Rigidbody & rigidbody2) const { // Get current positions of colliders - vec2 final_position1 = get_current_position(transform1,circle1.offset); - vec2 final_position2 = get_current_position(transform2,circle2.offset); + vec2 final_position1 = AbsoluutPosition::get_position(transform1,circle1.offset); + vec2 final_position2 = AbsoluutPosition::get_position(transform2,circle2.offset); // Scale dimensions float scaled_circle1 = circle1.radius * transform1.scale; diff --git a/src/crepe/system/CollisionSystem.h b/src/crepe/system/CollisionSystem.h index 78fce46..b802426 100644 --- a/src/crepe/system/CollisionSystem.h +++ b/src/crepe/system/CollisionSystem.h @@ -188,7 +188,7 @@ private: * * \param info Collision information containing data about both colliders. */ - void call_collision_events(CollisionInfo & info); + void call_collision_events(CollisionInfo & info,CollisionInfo & info_inverted); /** * \brief Handles collisions involving static objects. diff --git a/src/crepe/system/RenderSystem.cpp b/src/crepe/system/RenderSystem.cpp index afd9548..d14d78d 100644 --- a/src/crepe/system/RenderSystem.cpp +++ b/src/crepe/system/RenderSystem.cpp @@ -13,6 +13,7 @@ #include "../facade/Texture.h" #include "../manager/ComponentManager.h" #include "../manager/ResourceManager.h" +#include "util/AbsoluutPosition.h" #include "RenderSystem.h" #include "types.h" @@ -105,11 +106,11 @@ void RenderSystem::render_normal(const Sprite & sprite, const Transform & tm) { SDLContext & ctx = this->mediator.sdl_context; ResourceManager & resource_manager = this->mediator.resource_manager; const Texture & res = resource_manager.get(sprite.source); - + vec2 pos = AbsoluutPosition::get_position(tm,sprite.data.position_offset); ctx.draw(SDLContext::RenderContext{ .sprite = sprite, .texture = res, - .pos = tm.position, + .pos = pos, .angle = tm.rotation, .scale = tm.scale, }); diff --git a/src/crepe/util/AbsoluutPosition.cpp b/src/crepe/util/AbsoluutPosition.cpp new file mode 100644 index 0000000..8be625e --- /dev/null +++ b/src/crepe/util/AbsoluutPosition.cpp @@ -0,0 +1,21 @@ +#include "AbsoluutPosition.h" + +using namespace crepe; + +vec2 AbsoluutPosition::get_position(const Transform & transform,const vec2 & offset) { + // Get the rotation in radians + float radians1 = transform.rotation * (M_PI / 180.0); + + // Calculate total offset with scale + vec2 total_offset = offset * transform.scale; + + // Rotate + float rotated_total_offset_x1 + = total_offset.x * cos(radians1) - total_offset.y * sin(radians1); + float rotated_total_offset_y1 + = total_offset.x * sin(radians1) + total_offset.y * cos(radians1); + + // Final positions considering scaling and rotation + return (transform.position + vec2(rotated_total_offset_x1, rotated_total_offset_y1)); +} + diff --git a/src/crepe/util/AbsoluutPosition.h b/src/crepe/util/AbsoluutPosition.h new file mode 100644 index 0000000..4441f90 --- /dev/null +++ b/src/crepe/util/AbsoluutPosition.h @@ -0,0 +1,17 @@ +#pragma once + + +#include "api/Transform.h" + +#include "types.h" + +namespace crepe { + + +class AbsoluutPosition { +public: + static vec2 get_position(const Transform & transform,const vec2 & offset); + +}; + +} // namespace crepe diff --git a/src/crepe/util/CMakeLists.txt b/src/crepe/util/CMakeLists.txt index 94ed906..b4b9221 100644 --- a/src/crepe/util/CMakeLists.txt +++ b/src/crepe/util/CMakeLists.txt @@ -1,6 +1,7 @@ target_sources(crepe PUBLIC LogColor.cpp Log.cpp + AbsoluutPosition.cpp ) target_sources(crepe PUBLIC FILE_SET HEADERS FILES @@ -11,5 +12,6 @@ target_sources(crepe PUBLIC FILE_SET HEADERS FILES Proxy.hpp OptionalRef.h OptionalRef.hpp + AbsoluutPosition.h ) diff --git a/src/example/game.cpp b/src/example/game.cpp index 8ea50ea..3ba15d2 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -3,6 +3,7 @@ #include "manager/ComponentManager.h" #include "manager/Mediator.h" #include "types.h" +#include #include #include #include @@ -66,11 +67,6 @@ class MyScript1 : public Script { //add collider switch break; } - case Keycode::Q: { - Rigidbody & rg = this->get_component(); - rg.data.angular_velocity = 1; - break; - } default: break; } @@ -139,6 +135,31 @@ class MyScript2 : public Script { //add collider switch break; } + case Keycode::J: { + Rigidbody & tf = this->get_component(); + tf.data.linear_velocity.x = -10; + break; + } + case Keycode::I: { + Rigidbody & tf = this->get_component(); + tf.data.linear_velocity.y -= 1; + break; + } + case Keycode::K: { + Rigidbody & tf = this->get_component(); + tf.data.linear_velocity.y += 1; + break; + } + case Keycode::L: { + Rigidbody & tf = this->get_component(); + tf.data.linear_velocity.x = 10; + break; + } + case Keycode::O: { + Rigidbody & tf = this->get_component(); + tf.data.linear_velocity.x = 0; + break; + } default: break; } @@ -175,7 +196,6 @@ public: .mass = 0, .gravity_scale = 0, .body_type = Rigidbody::BodyType::STATIC, - .offset = {0, 0}, .collision_layers = {0}, }); world.add_component( @@ -198,24 +218,26 @@ public: }); GameObject game_object1 = new_object( - "Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 0, 1); + "Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 45, 1); game_object1.add_component(Rigidbody::Data{ .mass = 1, - .gravity_scale = 1, - .body_type = Rigidbody::BodyType::DYNAMIC, + .gravity_scale = 0, + .body_type = Rigidbody::BodyType::KINEMATIC, .linear_velocity = {0, 1}, .constraints = {0, 0, 0}, .elastisity_coefficient = 1, - .offset = {0, 0}, .collision_layers = {0}, }); // add box with boxcollider game_object1.add_component(vec2{0, 0}, vec2{20, 20}); game_object1.add_component().set_script(); - Asset img1{"asset/texture/square.png"}; + Asset img1{"asset/texture/test_ap43.png"}; game_object1.add_component(img1, Sprite::Data{ + .sorting_in_layer = 2, + .order_in_layer = 2, .size = {20, 20}, + .position_offset = {0,-10}, }); //add circle with cirlcecollider deactiveated @@ -233,16 +255,15 @@ public: "Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 0, 1); game_object2.add_component(Rigidbody::Data{ .mass = 1, - .gravity_scale = 0, - .body_type = Rigidbody::BodyType::STATIC, + .gravity_scale = 1, + .body_type = Rigidbody::BodyType::KINEMATIC, .linear_velocity = {0, 0}, .constraints = {0, 0, 0}, - .elastisity_coefficient = 1, - .offset = {0, 0}, + .elastisity_coefficient = 0.66, .collision_layers = {0}, }); // add box with boxcollider - game_object2.add_component(vec2{0, 0}, vec2{20, 20}); + game_object2.add_component(vec2{0, 0}, vec2{INFINITY, 20}); game_object2.add_component().set_script(); game_object2.add_component(img1, Sprite::Data{ diff --git a/src/test/CollisionTest.cpp b/src/test/CollisionTest.cpp index 2ad65fa..43bf77d 100644 --- a/src/test/CollisionTest.cpp +++ b/src/test/CollisionTest.cpp @@ -66,7 +66,6 @@ public: world.add_component(Rigidbody::Data{ // TODO: remove unrelated properties: .body_type = Rigidbody::BodyType::STATIC, - .offset = {0, 0}, }); // Create a box with an inner size of 10x10 units world.add_component(vec2{0, -100}, vec2{100, 100}); // Top @@ -81,7 +80,6 @@ public: .linear_velocity = {0, 0}, .constraints = {0, 0, 0}, .elastisity_coefficient = 1, - .offset = {0, 0}, .collision_layers = {0}, }); game_object1.add_component(vec2{0, 0}, vec2{10, 10}); @@ -97,7 +95,6 @@ public: .linear_velocity = {0, 0}, .constraints = {0, 0, 0}, .elastisity_coefficient = 1, - .offset = {0, 0}, .collision_layers = {0}, }); game_object2.add_component(vec2{0, 0}, vec2{10, 10}); @@ -138,8 +135,8 @@ TEST_F(CollisionTest, collision_box_box_dynamic_both_no_velocity) { script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { collision_happend = true; EXPECT_EQ(ev.info.this_collider.game_object_id, 2); - EXPECT_EQ(ev.info.resolution.x, 10); - EXPECT_EQ(ev.info.resolution.y, 10); + EXPECT_EQ(ev.info.resolution.x, -10); + EXPECT_EQ(ev.info.resolution.y, -10); EXPECT_EQ(ev.info.resolution_direction, crepe::CollisionSystem::Direction::BOTH); }; EXPECT_FALSE(collision_happend); @@ -211,8 +208,8 @@ TEST_F(CollisionTest, collision_box_box_dynamic_both) { script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { collision_happend = true; EXPECT_EQ(ev.info.this_collider.game_object_id, 2); - EXPECT_EQ(ev.info.resolution.x, 10); - EXPECT_EQ(ev.info.resolution.y, 10); + EXPECT_EQ(ev.info.resolution.x, -10); + EXPECT_EQ(ev.info.resolution.y, -10); EXPECT_EQ(ev.info.resolution_direction, crepe::CollisionSystem::Direction::BOTH); }; EXPECT_FALSE(collision_happend); @@ -294,8 +291,7 @@ TEST_F(CollisionTest, collision_box_box_static_both) { EXPECT_EQ(ev.info.resolution_direction, crepe::CollisionSystem::Direction::BOTH); }; script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { - // is static should not be called - FAIL(); + collision_happend = true; }; EXPECT_FALSE(collision_happend); Transform & tf = this->mgr.get_components_by_id(1).front().get(); @@ -318,7 +314,7 @@ TEST_F(CollisionTest, collision_box_box_static_x_direction) { }; script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { // is static should not be called - FAIL(); + //FAIL(); }; EXPECT_FALSE(collision_happend); Transform & tf = this->mgr.get_components_by_id(1).front().get(); @@ -343,7 +339,7 @@ TEST_F(CollisionTest, collision_box_box_static_y_direction) { }; script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { // is static should not be called - FAIL(); + //FAIL(); }; EXPECT_FALSE(collision_happend); Transform & tf = this->mgr.get_components_by_id(1).front().get(); @@ -368,7 +364,7 @@ TEST_F(CollisionTest, collision_box_box_static_multiple) { //todo check visually }; script_object2_ref->test_fn = [&](const CollisionEvent & ev) { // is static should not be called - FAIL(); + //FAIL(); }; EXPECT_FALSE(collision_happend); Transform & tf = this->mgr.get_components_by_id(1).front().get(); -- cgit v1.2.3 From 5bece30f9ad495a0e82097b2c5668e979856fb69 Mon Sep 17 00:00:00 2001 From: JAROWMR Date: Mon, 16 Dec 2024 21:22:35 +0100 Subject: make format --- src/crepe/facade/SDLContext.cpp | 3 +- src/crepe/system/CollisionSystem.cpp | 123 +++++++++++++++++++---------------- src/crepe/system/CollisionSystem.h | 2 +- src/crepe/system/ParticleSystem.cpp | 2 +- src/crepe/system/RenderSystem.cpp | 2 +- src/crepe/util/AbsoluutPosition.cpp | 3 +- src/crepe/util/AbsoluutPosition.h | 5 +- src/example/game.cpp | 2 +- src/test/CollisionTest.cpp | 5 +- src/test/Profiling.cpp | 26 ++++---- 10 files changed, 90 insertions(+), 83 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index ee7d149..a1a6f97 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -235,8 +235,7 @@ SDL_FRect SDLContext::get_dst_rect(const DestinationRectangleData & ctx) const { } size *= cam_aux_data.render_scale * ctx.img_scale * data.scale_offset; - vec2 screen_pos = (ctx.pos - cam_aux_data.cam_pos - + (cam_aux_data.zoomed_viewport) / 2) + vec2 screen_pos = (ctx.pos - cam_aux_data.cam_pos + (cam_aux_data.zoomed_viewport) / 2) * cam_aux_data.render_scale - size / 2 + cam_aux_data.bar_size; diff --git a/src/crepe/system/CollisionSystem.cpp b/src/crepe/system/CollisionSystem.cpp index 294e7b3..9604543 100644 --- a/src/crepe/system/CollisionSystem.cpp +++ b/src/crepe/system/CollisionSystem.cpp @@ -15,8 +15,8 @@ #include "api/Rigidbody.h" #include "api/Transform.h" #include "api/Vector2.h" -#include "util/OptionalRef.h" #include "util/AbsoluutPosition.h" +#include "util/OptionalRef.h" #include "Collider.h" #include "CollisionSystem.h" @@ -139,9 +139,11 @@ CollisionSystem::collision_handler(CollisionInternal & data1, CollisionInternal = std::get>(data1.collider); const BoxCollider & collider2 = std::get>(data2.collider); - - vec2 collider_pos1 = AbsoluutPosition::get_position(data1.transform,collider1.offset); - vec2 collider_pos2 = AbsoluutPosition::get_position(data2.transform,collider2.offset); + + vec2 collider_pos1 + = AbsoluutPosition::get_position(data1.transform, collider1.offset); + vec2 collider_pos2 + = AbsoluutPosition::get_position(data2.transform, collider2.offset); resolution = this->get_box_box_resolution(collider1, collider2, collider_pos1, collider_pos2); break; @@ -151,8 +153,10 @@ CollisionSystem::collision_handler(CollisionInternal & data1, CollisionInternal = std::get>(data1.collider); const CircleCollider & collider2 = std::get>(data2.collider); - vec2 collider_pos1 = AbsoluutPosition::get_position(data1.transform,collider1.offset); - vec2 collider_pos2 = AbsoluutPosition::get_position(data2.transform,collider2.offset); + vec2 collider_pos1 + = AbsoluutPosition::get_position(data1.transform, collider1.offset); + vec2 collider_pos2 + = AbsoluutPosition::get_position(data2.transform, collider2.offset); resolution = -this->get_circle_box_resolution(collider2, collider1, collider_pos2, collider_pos1); break; @@ -162,8 +166,10 @@ CollisionSystem::collision_handler(CollisionInternal & data1, CollisionInternal = std::get>(data1.collider); const CircleCollider & collider2 = std::get>(data2.collider); - vec2 collider_pos1 = AbsoluutPosition::get_position(data1.transform,collider1.offset); - vec2 collider_pos2 = AbsoluutPosition::get_position(data2.transform,collider2.offset); + vec2 collider_pos1 + = AbsoluutPosition::get_position(data1.transform, collider1.offset); + vec2 collider_pos2 + = AbsoluutPosition::get_position(data2.transform, collider2.offset); resolution = this->get_circle_circle_resolution(collider1, collider2, collider_pos1, collider_pos2); break; @@ -173,8 +179,10 @@ CollisionSystem::collision_handler(CollisionInternal & data1, CollisionInternal = std::get>(data1.collider); const BoxCollider & collider2 = std::get>(data2.collider); - vec2 collider_pos1 = AbsoluutPosition::get_position(data1.transform,collider1.offset); - vec2 collider_pos2 = AbsoluutPosition::get_position(data2.transform,collider2.offset); + vec2 collider_pos1 + = AbsoluutPosition::get_position(data1.transform, collider1.offset); + vec2 collider_pos2 + = AbsoluutPosition::get_position(data2.transform, collider2.offset); resolution = this->get_circle_box_resolution(collider1, collider2, collider_pos1, collider_pos2); break; @@ -297,58 +305,67 @@ vec2 CollisionSystem::get_circle_box_resolution(const CircleCollider & circle_co void CollisionSystem::determine_collision_handler(CollisionInfo & info) { // Inverted collision info - CollisionInfo inverted = { - .this_collider = info.other_collider, - .this_transform = info.other_transform, - .this_rigidbody = info.other_rigidbody, - .this_metadata = info.other_metadata, - .other_collider = info.this_collider, - .other_transform = info.this_transform, - .other_rigidbody = info.this_rigidbody, - .other_metadata = info.this_metadata, - .resolution = -info.resolution, - .resolution_direction = info.resolution_direction, - }; + CollisionInfo inverted = { + .this_collider = info.other_collider, + .this_transform = info.other_transform, + .this_rigidbody = info.other_rigidbody, + .this_metadata = info.other_metadata, + .other_collider = info.this_collider, + .other_transform = info.this_transform, + .other_rigidbody = info.this_rigidbody, + .other_metadata = info.this_metadata, + .resolution = -info.resolution, + .resolution_direction = info.resolution_direction, + }; // If both objects are static skip handle call collision script - if(info.this_rigidbody.data.body_type == Rigidbody::BodyType::STATIC && info.other_rigidbody.data.body_type == Rigidbody::BodyType::STATIC) return; + if (info.this_rigidbody.data.body_type == Rigidbody::BodyType::STATIC + && info.other_rigidbody.data.body_type == Rigidbody::BodyType::STATIC) + return; // First body is not dynamic - if(info.this_rigidbody.data.body_type != Rigidbody::BodyType::DYNAMIC) - { - bool static_collision = info.this_rigidbody.data.body_type == Rigidbody::BodyType::STATIC && info.other_rigidbody.data.body_type == Rigidbody::BodyType::DYNAMIC; - bool kinematic_collision = info.this_rigidbody.data.body_type == Rigidbody::BodyType::KINEMATIC && info.other_rigidbody.data.body_type == Rigidbody::BodyType::DYNAMIC && info.this_rigidbody.data.kinematic_collision; - - - if(static_collision || kinematic_collision){ + if (info.this_rigidbody.data.body_type != Rigidbody::BodyType::DYNAMIC) { + bool static_collision + = info.this_rigidbody.data.body_type == Rigidbody::BodyType::STATIC + && info.other_rigidbody.data.body_type == Rigidbody::BodyType::DYNAMIC; + bool kinematic_collision + = info.this_rigidbody.data.body_type == Rigidbody::BodyType::KINEMATIC + && info.other_rigidbody.data.body_type == Rigidbody::BodyType::DYNAMIC + && info.this_rigidbody.data.kinematic_collision; + + if (static_collision || kinematic_collision) { // Static collision this->static_collision_handler(inverted); }; // Call scripts - this->call_collision_events(inverted,info); + this->call_collision_events(inverted, info); return; } // Second body is not dynamic - if(info.other_rigidbody.data.body_type != Rigidbody::BodyType::DYNAMIC) - { - bool static_collision = info.other_rigidbody.data.body_type == Rigidbody::BodyType::STATIC; - bool kinematic_collision = info.other_rigidbody.data.body_type == Rigidbody::BodyType::KINEMATIC && info.other_rigidbody.data.kinematic_collision; - if(static_collision || kinematic_collision) this->static_collision_handler(info); - this->call_collision_events(info,inverted); + if (info.other_rigidbody.data.body_type != Rigidbody::BodyType::DYNAMIC) { + bool static_collision + = info.other_rigidbody.data.body_type == Rigidbody::BodyType::STATIC; + bool kinematic_collision + = info.other_rigidbody.data.body_type == Rigidbody::BodyType::KINEMATIC + && info.other_rigidbody.data.kinematic_collision; + if (static_collision || kinematic_collision) this->static_collision_handler(info); + this->call_collision_events(info, inverted); return; } //dynamic this->dynamic_collision_handler(info); - this->call_collision_events(info,inverted); + this->call_collision_events(info, inverted); } -void CollisionSystem::call_collision_events(CollisionInfo & info,CollisionInfo & info_inverted){ +void CollisionSystem::call_collision_events(CollisionInfo & info, + CollisionInfo & info_inverted) { CollisionEvent data(info); CollisionEvent data_inverted(info_inverted); EventManager & emgr = this->mediator.event_manager; emgr.trigger_event(data, info.this_collider.game_object_id); - emgr.trigger_event(data_inverted, info_inverted.this_collider.game_object_id); + emgr.trigger_event(data_inverted, + info_inverted.this_collider.game_object_id); } void CollisionSystem::static_collision_handler(CollisionInfo & info) { @@ -400,9 +417,9 @@ void CollisionSystem::static_collision_handler(CollisionInfo & info) { } } -void CollisionSystem::dynamic_collision_handler(CollisionInfo & info){ - info.this_transform.position += info.resolution/2; - info.other_transform.position += -(info.resolution/2); +void CollisionSystem::dynamic_collision_handler(CollisionInfo & info) { + info.this_transform.position += info.resolution / 2; + info.other_transform.position += -(info.resolution / 2); switch (info.resolution_direction) { case Direction::BOTH: @@ -410,8 +427,7 @@ void CollisionSystem::dynamic_collision_handler(CollisionInfo & info){ info.this_rigidbody.data.linear_velocity = -info.this_rigidbody.data.linear_velocity * info.this_rigidbody.data.elastisity_coefficient; - } - else { + } else { info.this_rigidbody.data.linear_velocity = {0, 0}; } @@ -419,8 +435,7 @@ void CollisionSystem::dynamic_collision_handler(CollisionInfo & info){ info.other_rigidbody.data.linear_velocity = -info.other_rigidbody.data.linear_velocity * info.other_rigidbody.data.elastisity_coefficient; - } - else { + } else { info.other_rigidbody.data.linear_velocity = {0, 0}; } break; @@ -602,8 +617,8 @@ bool CollisionSystem::get_box_box_collision(const BoxCollider & box1, const BoxC const Rigidbody & rigidbody1, const Rigidbody & rigidbody2) const { // Get current positions of colliders - vec2 final_position1 = AbsoluutPosition::get_position(transform1,box1.offset); - vec2 final_position2 = AbsoluutPosition::get_position(transform2,box2.offset); + vec2 final_position1 = AbsoluutPosition::get_position(transform1, box1.offset); + vec2 final_position2 = AbsoluutPosition::get_position(transform2, box2.offset); // Scale dimensions vec2 scaled_box1 = box1.dimensions * transform1.scale; @@ -629,8 +644,8 @@ bool CollisionSystem::get_box_circle_collision(const BoxCollider & box1, const Rigidbody & rigidbody1, const Rigidbody & rigidbody2) const { // Get current positions of colliders - vec2 final_position1 = AbsoluutPosition::get_position(transform1,box1.offset); - vec2 final_position2 = AbsoluutPosition::get_position(transform2,circle2.offset); + vec2 final_position1 = AbsoluutPosition::get_position(transform1, box1.offset); + vec2 final_position2 = AbsoluutPosition::get_position(transform2, circle2.offset); // Scale dimensions vec2 scaled_box = box1.dimensions * transform1.scale; @@ -662,8 +677,8 @@ bool CollisionSystem::get_circle_circle_collision(const CircleCollider & circle1 const Rigidbody & rigidbody1, const Rigidbody & rigidbody2) const { // Get current positions of colliders - vec2 final_position1 = AbsoluutPosition::get_position(transform1,circle1.offset); - vec2 final_position2 = AbsoluutPosition::get_position(transform2,circle2.offset); + vec2 final_position1 = AbsoluutPosition::get_position(transform1, circle1.offset); + vec2 final_position2 = AbsoluutPosition::get_position(transform2, circle2.offset); // Scale dimensions float scaled_circle1 = circle1.radius * transform1.scale; @@ -679,5 +694,3 @@ bool CollisionSystem::get_circle_circle_collision(const CircleCollider & circle1 // Check if the distance between the centers is less than or equal to the sum of the radii return distance_squared < radius_sum * radius_sum; } - - diff --git a/src/crepe/system/CollisionSystem.h b/src/crepe/system/CollisionSystem.h index b802426..23752e1 100644 --- a/src/crepe/system/CollisionSystem.h +++ b/src/crepe/system/CollisionSystem.h @@ -188,7 +188,7 @@ private: * * \param info Collision information containing data about both colliders. */ - void call_collision_events(CollisionInfo & info,CollisionInfo & info_inverted); + void call_collision_events(CollisionInfo & info, CollisionInfo & info_inverted); /** * \brief Handles collisions involving static objects. diff --git a/src/crepe/system/ParticleSystem.cpp b/src/crepe/system/ParticleSystem.cpp index fb6cfd7..56f1dfd 100644 --- a/src/crepe/system/ParticleSystem.cpp +++ b/src/crepe/system/ParticleSystem.cpp @@ -48,7 +48,7 @@ void ParticleSystem::update() { void ParticleSystem::emit_particle(ParticleEmitter & emitter, const Transform & transform) { constexpr float DEG_TO_RAD = M_PI / 180.0; - + vec2 initial_position = AbsoluutPosition::get_position(transform, emitter.data.offset); float random_angle = this->generate_random_angle(emitter.data.min_angle, emitter.data.max_angle); diff --git a/src/crepe/system/RenderSystem.cpp b/src/crepe/system/RenderSystem.cpp index fcb52c3..c0717fc 100644 --- a/src/crepe/system/RenderSystem.cpp +++ b/src/crepe/system/RenderSystem.cpp @@ -106,7 +106,7 @@ void RenderSystem::render_normal(const Sprite & sprite, const Transform & tm) { SDLContext & ctx = this->mediator.sdl_context; ResourceManager & resource_manager = this->mediator.resource_manager; const Texture & res = resource_manager.get(sprite.source); - vec2 pos = AbsoluutPosition::get_position(tm,sprite.data.position_offset); + vec2 pos = AbsoluutPosition::get_position(tm, sprite.data.position_offset); ctx.draw(SDLContext::RenderContext{ .sprite = sprite, .texture = res, diff --git a/src/crepe/util/AbsoluutPosition.cpp b/src/crepe/util/AbsoluutPosition.cpp index 8be625e..296cc09 100644 --- a/src/crepe/util/AbsoluutPosition.cpp +++ b/src/crepe/util/AbsoluutPosition.cpp @@ -2,7 +2,7 @@ using namespace crepe; -vec2 AbsoluutPosition::get_position(const Transform & transform,const vec2 & offset) { +vec2 AbsoluutPosition::get_position(const Transform & transform, const vec2 & offset) { // Get the rotation in radians float radians1 = transform.rotation * (M_PI / 180.0); @@ -18,4 +18,3 @@ vec2 AbsoluutPosition::get_position(const Transform & transform,const vec2 & off // Final positions considering scaling and rotation return (transform.position + vec2(rotated_total_offset_x1, rotated_total_offset_y1)); } - diff --git a/src/crepe/util/AbsoluutPosition.h b/src/crepe/util/AbsoluutPosition.h index 4441f90..30a7f93 100644 --- a/src/crepe/util/AbsoluutPosition.h +++ b/src/crepe/util/AbsoluutPosition.h @@ -1,17 +1,14 @@ #pragma once - #include "api/Transform.h" #include "types.h" namespace crepe { - class AbsoluutPosition { public: - static vec2 get_position(const Transform & transform,const vec2 & offset); - + static vec2 get_position(const Transform & transform, const vec2 & offset); }; } // namespace crepe diff --git a/src/example/game.cpp b/src/example/game.cpp index b30166e..01a509f 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -238,7 +238,7 @@ public: .sorting_in_layer = 2, .order_in_layer = 2, .size = {20, 20}, - .position_offset = {0,-10}, + .position_offset = {0, -10}, }); //add circle with cirlcecollider deactiveated diff --git a/src/test/CollisionTest.cpp b/src/test/CollisionTest.cpp index 43bf77d..3cb7f33 100644 --- a/src/test/CollisionTest.cpp +++ b/src/test/CollisionTest.cpp @@ -290,9 +290,8 @@ TEST_F(CollisionTest, collision_box_box_static_both) { EXPECT_EQ(ev.info.resolution.y, 10); EXPECT_EQ(ev.info.resolution_direction, crepe::CollisionSystem::Direction::BOTH); }; - script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { - collision_happend = true; - }; + script_object2_ref->test_fn + = [&collision_happend](const CollisionEvent & ev) { collision_happend = true; }; EXPECT_FALSE(collision_happend); Transform & tf = this->mgr.get_components_by_id(1).front().get(); tf.position = {50, 30}; diff --git a/src/test/Profiling.cpp b/src/test/Profiling.cpp index 1585061..16736b8 100644 --- a/src/test/Profiling.cpp +++ b/src/test/Profiling.cpp @@ -219,19 +219,19 @@ TEST_F(DISABLED_ProfilingTest, Profiling_3) { .order_in_layer = 1, .size = {.y = 500}, }); - auto & test = gameobject.add_component(test_sprite,ParticleEmitter::Data{ - .max_particles = 10, - .emission_rate = 100, - .end_lifespan = 100000, - .boundary{ - .width = 1000, - .height = 1000, - .offset = vec2{0, 0}, - .reset_on_exit = false, - }, - - } - ); + auto & test = gameobject.add_component( + test_sprite, ParticleEmitter::Data{ + .max_particles = 10, + .emission_rate = 100, + .end_lifespan = 100000, + .boundary{ + .width = 1000, + .height = 1000, + .offset = vec2{0, 0}, + .reset_on_exit = false, + }, + + }); } render_sys.update(); this->game_object_count++; -- cgit v1.2.3 From 00f3ee853d94b607646e311d6bc9aca1736ab259 Mon Sep 17 00:00:00 2001 From: max-001 Date: Tue, 17 Dec 2024 08:24:56 +0100 Subject: Modified includes --- src/example/game.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'src/example/game.cpp') diff --git a/src/example/game.cpp b/src/example/game.cpp index 8d634fa..71dd42b 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -1,22 +1,20 @@ -#include "api/Animator.h" -#include "api/BehaviorScript.h" -#include "api/CircleCollider.h" -#include "api/Scene.h" -#include "manager/ComponentManager.h" -#include "manager/Mediator.h" -#include "types.h" +#include #include +#include #include #include +#include #include #include #include #include #include +#include #include #include #include #include +#include #include using namespace crepe; -- cgit v1.2.3 From 72f04cc18113785b8f57d95254d28e7d64d584aa Mon Sep 17 00:00:00 2001 From: max-001 Date: Tue, 17 Dec 2024 08:53:03 +0100 Subject: Placed every class into seperate file --- src/example/AITest.cpp | 90 ------- src/example/Aquarium.cpp | 148 +++++++++++ src/example/Aquarium.h | 13 + src/example/Background.cpp | 54 ++++ src/example/Background.h | 10 + src/example/CMakeLists.txt | 36 ++- src/example/Forest.cpp | 172 +++++++++++++ src/example/Forest.h | 15 ++ src/example/Hallway.cpp | 140 +++++++++++ src/example/Hallway.h | 21 ++ src/example/Start.cpp | 69 ++++++ src/example/Start.h | 16 ++ src/example/button.cpp | 54 ---- src/example/game.cpp | 496 +------------------------------------ src/example/rendering_particle.cpp | 95 ------- 15 files changed, 677 insertions(+), 752 deletions(-) delete mode 100644 src/example/AITest.cpp create mode 100644 src/example/Aquarium.cpp create mode 100644 src/example/Aquarium.h create mode 100644 src/example/Background.cpp create mode 100644 src/example/Background.h create mode 100644 src/example/Forest.cpp create mode 100644 src/example/Forest.h create mode 100644 src/example/Hallway.cpp create mode 100644 src/example/Hallway.h create mode 100644 src/example/Start.cpp create mode 100644 src/example/Start.h delete mode 100644 src/example/button.cpp delete mode 100644 src/example/rendering_particle.cpp (limited to 'src/example/game.cpp') diff --git a/src/example/AITest.cpp b/src/example/AITest.cpp deleted file mode 100644 index 93ba500..0000000 --- a/src/example/AITest.cpp +++ /dev/null @@ -1,90 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace crepe; -using namespace std; - -class Script1 : public Script { - bool shutdown(const ShutDownEvent & event) { - // Very dirty way of shutting down the game - throw "ShutDownEvent"; - return true; - } - - bool mousemove(const MouseMoveEvent & event) { - /*RefVector aivec = this->get_components(); - AI & ai = aivec.front().get(); - ai.flee_target - = vec2{static_cast(event.mouse_x), static_cast(event.mouse_y)};*/ - return true; - } - - void init() { - subscribe( - [this](const ShutDownEvent & ev) -> bool { return this->shutdown(ev); }); - subscribe( - [this](const MouseMoveEvent & ev) -> bool { return this->mousemove(ev); }); - } -}; - -class Scene1 : public Scene { -public: - void load_scene() override { - Mediator & mediator = this->mediator; - ComponentManager & mgr = mediator.component_manager; - - GameObject game_object1 = mgr.new_object("", "", vec2{0, 0}, 0, 1); - GameObject game_object2 = mgr.new_object("", "", vec2{0, 0}, 0, 1); - - Asset img{"asset/texture/test_ap43.png"}; - - Sprite & test_sprite = game_object1.add_component( - img, Sprite::Data{ - .color = Color::MAGENTA, - .flip = Sprite::FlipSettings{false, false}, - .sorting_in_layer = 2, - .order_in_layer = 2, - .size = {0, 100}, - .angle_offset = 0, - .position_offset = {0, 0}, - }); - - AI & ai = game_object1.add_component(3000); - // ai.arrive_on(); - // ai.flee_on(); - ai.path_follow_on(); - ai.make_oval_path(500, 1000, {0, -1000}, 1.5708, true); - ai.make_oval_path(1000, 500, {0, 500}, 4.7124, false); - game_object1.add_component(Rigidbody::Data{ - .mass = 0.1f, - .max_linear_velocity = 40, - }); - game_object1.add_component().set_script(); - - game_object2.add_component(ivec2{1080, 720}, vec2{5000, 5000}, - Camera::Data{ - .bg_color = Color::WHITE, - .zoom = 1, - }); - } - - string get_name() const override { return "Scene1"; } -}; - -int main() { - LoopManager engine; - engine.add_scene(); - engine.start(); - - return 0; -} diff --git a/src/example/Aquarium.cpp b/src/example/Aquarium.cpp new file mode 100644 index 0000000..7cd9017 --- /dev/null +++ b/src/example/Aquarium.cpp @@ -0,0 +1,148 @@ +#include "Aquarium.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace crepe; +using namespace std; + +float Aquarium::create(Scene & scn, float begin_x) { + this->add_background(scn, begin_x); + + GameObject aquarium_begin + = scn.new_object("aquarium_begin", "background", vec2(begin_x, 0)); + Asset aquarium_begin_asset{ + "asset/jetpack_joyride/background/aquarium/glassTubeFG_1_TVOS.png"}; + aquarium_begin.add_component(aquarium_begin_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 0, + .size = vec2(0, 800), + }); + begin_x += 600; + + GameObject aquarium_middle_1 + = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0)); + Asset aquarium_middle_1_asset{ + "asset/jetpack_joyride/background/aquarium/glassTubeFG_3_TVOS.png"}; + aquarium_middle_1.add_component(aquarium_middle_1_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 2, + .size = vec2(0, 800), + }); + begin_x += 400; + + this->add_background(scn, begin_x - 200); + + GameObject aquarium_middle_2 + = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0)); + Asset aquarium_middle_2_asset{ + "asset/jetpack_joyride/background/aquarium/glassTubeFG_3_TVOS.png"}; + aquarium_middle_2.add_component(aquarium_middle_2_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 3, + .size = vec2(0, 800), + }); + begin_x += 400; + + GameObject aquarium_middle_3 + = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0)); + Asset aquarium_middle_3_asset{ + "asset/jetpack_joyride/background/aquarium/glassTubeFG_3_TVOS.png"}; + aquarium_middle_3.add_component(aquarium_middle_3_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 4, + .size = vec2(0, 800), + }); + begin_x += 400; + + this->add_background(scn, begin_x - 200); + + GameObject aquarium_middle_4 + = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0)); + Asset aquarium_middle_4_asset{ + "asset/jetpack_joyride/background/aquarium/glassTubeFG_3_TVOS.png"}; + aquarium_middle_4.add_component(aquarium_middle_4_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 5, + .size = vec2(0, 800), + }); + begin_x += 600; + + this->add_background(scn, begin_x); + + GameObject aquarium_end = scn.new_object("aquarium_end", "background", vec2(begin_x, 0)); + Asset aquarium_end_asset{ + "asset/jetpack_joyride/background/aquarium/glassTubeFG_2_TVOS.png"}; + aquarium_end.add_component(aquarium_end_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 1, + .size = vec2(0, 800), + }); + begin_x += 600; + + return begin_x; +} + +void Aquarium::add_background(Scene & scn, float begin_x) { + GameObject bg_1 = scn.new_object("aquarium_bg_1", "aquarium_background", vec2(begin_x, 0)); + Asset bg_1_1_asset{"asset/jetpack_joyride/background/aquarium/AquariumBG1_1_TVOS.png"}; + bg_1.add_component(bg_1_1_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 2, + .size = vec2(0, 400), + .position_offset = vec2(-200, 100), + }); + Asset bg_1_2_asset{"asset/jetpack_joyride/background/aquarium/AquariumBG1_2_TVOS.png"}; + bg_1.add_component(bg_1_2_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 2, + .size = vec2(0, 400), + .position_offset = vec2(200, 100), + }); + GameObject bg_2 = scn.new_object("aquarium_bg_2", "aquarium_background", vec2(begin_x, 0)); + Asset bg_2_1_asset{"asset/jetpack_joyride/background/aquarium/AquariumBG2_1_TVOS.png"}; + bg_2.add_component(bg_2_1_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 1, + .size = vec2(0, 400), + .position_offset = vec2(200, -50), + }); + Asset bg_2_2_asset{"asset/jetpack_joyride/background/aquarium/AquariumBG2_2_TVOS.png"}; + bg_2.add_component(bg_2_2_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 1, + .size = vec2(0, 400), + .position_offset = vec2(-200, -50), + }); + GameObject bg_3 = scn.new_object("aquarium_bg_3", "aquarium_background", vec2(begin_x, 0)); + Asset bg_3_1_asset{"asset/jetpack_joyride/background/aquarium/AquariumBG3_1_TVOS.png"}; + bg_3.add_component(bg_3_1_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 0, + .size = vec2(0, 400), + .position_offset = vec2(200, -200), + }); + Asset bg_3_2_asset{"asset/jetpack_joyride/background/aquarium/AquariumBG3_2_TVOS.png"}; + bg_3.add_component(bg_3_2_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 0, + .size = vec2(0, 400), + .position_offset = vec2(-200, -200), + }); +} diff --git a/src/example/Aquarium.h b/src/example/Aquarium.h new file mode 100644 index 0000000..8815e9c --- /dev/null +++ b/src/example/Aquarium.h @@ -0,0 +1,13 @@ +#pragma once + +namespace crepe { +class Scene; +} + +class Aquarium { +public: + float create(crepe::Scene & scn, float begin_x); + +private: + void add_background(crepe::Scene & scn, float begin_x); +}; diff --git a/src/example/Background.cpp b/src/example/Background.cpp new file mode 100644 index 0000000..f935d90 --- /dev/null +++ b/src/example/Background.cpp @@ -0,0 +1,54 @@ +#include "Background.h" +#include "Aquarium.h" +#include "Forest.h" +#include "Hallway.h" +#include "Start.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace crepe; +using namespace std; + +Background::Background(Scene & scn) { + Start start; + Hallway hallway; + Forest forest; + Aquarium aquarium; + + float begin_x = 0; + + begin_x = start.create(scn, begin_x); + + begin_x = hallway.create(scn, begin_x, 1, Color::YELLOW); + + begin_x = forest.create(scn, begin_x, "1"); + + begin_x = hallway.create(scn, begin_x, 2, Color::MAGENTA); + + begin_x = aquarium.create(scn, begin_x); + + begin_x = hallway.create(scn, begin_x, 3, Color::CYAN); + + begin_x = forest.create(scn, begin_x, "2"); + + begin_x = hallway.create(scn, begin_x, 4, Color::GREEN); + + begin_x = aquarium.create(scn, begin_x); +} diff --git a/src/example/Background.h b/src/example/Background.h new file mode 100644 index 0000000..7c5a2bb --- /dev/null +++ b/src/example/Background.h @@ -0,0 +1,10 @@ +#pragma once + +namespace crepe { +class Scene; +} + +class Background { +public: + Background(crepe::Scene & scn); +}; diff --git a/src/example/CMakeLists.txt b/src/example/CMakeLists.txt index 187ed46..911a99c 100644 --- a/src/example/CMakeLists.txt +++ b/src/example/CMakeLists.txt @@ -1,22 +1,20 @@ -# all examples -add_custom_target(examples) +set(GAME_HEADERS + Aquarium.h + Background.h + Forest.h + Hallway.h + Start.h +) -# add_example(target_name [SOURCES...]) -function(add_example target_name) - # if SOURCES is not specified - if(NOT ARGV1) - # A .cpp file with target_name exists, and should be used - set(sources ${target_name}.cpp) - else() - set(sources ${ARGV}) - endif() +set(GAME_SOURCES + game.cpp + Aquarium.cpp + Background.cpp + Forest.cpp + Hallway.cpp + Start.cpp +) - add_executable(${target_name} EXCLUDE_FROM_ALL ${sources}) - target_link_libraries(${target_name} PUBLIC crepe) - add_dependencies(examples ${target_name}) -endfunction() +add_executable(game ${GAME_SOURCES} ${GAME_HEADERS}) -add_example(rendering_particle) -add_example(game) -add_example(button) -add_example(AITest) +target_link_libraries(game PUBLIC crepe) diff --git a/src/example/Forest.cpp b/src/example/Forest.cpp new file mode 100644 index 0000000..3f1f5d8 --- /dev/null +++ b/src/example/Forest.cpp @@ -0,0 +1,172 @@ +#include "Forest.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace crepe; +using namespace std; + +class ParallaxScript : public Script { +public: + ParallaxScript(float begin_x, float end_x, std::string unique_bg_name) + : begin_x(begin_x), + end_x(end_x), + name(unique_bg_name) {} + + void update() { + RefVector vec_2 + = this->get_components_by_name("forest_bg_2_" + name); + RefVector vec_3 + = this->get_components_by_name("forest_bg_3_" + name); + + for (Transform & t : vec_2) { + if (t.position.x > end_x - 400) { + t.position.x = begin_x - 400; + } + } + for (Transform & t : vec_3) { + if (t.position.x > end_x - 400) { + t.position.x = begin_x - 400; + } + } + } + +private: + const float begin_x; + const float end_x; + const std::string name; +}; + +float Forest::create(Scene & scn, float begin_x, std::string unique_bg_name) { + GameObject script = scn.new_object("forest_script", "background"); + script.add_component().set_script( + begin_x - 400, begin_x + 3000 + 400, unique_bg_name); + + this->add_background(scn, begin_x, unique_bg_name); + + GameObject begin = scn.new_object("forest_begin", "background", vec2(begin_x, 0)); + Asset begin_asset{"asset/jetpack_joyride/background/forest/forestFG_1_TVOS.png"}; + begin.add_component(begin_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 0, + .size = vec2(0, 800), + }); + begin_x += 800; + + this->add_background(scn, begin_x, unique_bg_name); + + GameObject middle_1 = scn.new_object("forest_middle", "background", vec2(begin_x, 0)); + Asset middle_1_asset{"asset/jetpack_joyride/background/forest/forestFG_3_TVOS.png"}; + middle_1.add_component(middle_1_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 2, + .size = vec2(0, 800), + }); + begin_x += 800; + + this->add_background(scn, begin_x, unique_bg_name); + + GameObject middle_2 = scn.new_object("forest_middle", "background", vec2(begin_x, 0)); + Asset middle_2_asset{"asset/jetpack_joyride/background/forest/forestFG_3_TVOS.png"}; + middle_2.add_component(middle_2_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 3, + .size = vec2(0, 800), + }); + begin_x += 800; + + this->add_background(scn, begin_x, unique_bg_name); + + GameObject end = scn.new_object("forest_end", "background", vec2(begin_x, 0)); + Asset end_asset{"asset/jetpack_joyride/background/forest/forestFG_2_TVOS.png"}; + end.add_component(end_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 1, + .size = vec2(0, 800), + }); + begin_x += 600; + + this->add_background(scn, begin_x + 200, unique_bg_name); + + return begin_x; +} + +void Forest::add_background(Scene & scn, float begin_x, std::string name) { + GameObject bg_1 + = scn.new_object("forest_bg_1_" + name, "forest_background", vec2(begin_x, 0)); + Asset bg_1_asset{"asset/jetpack_joyride/background/forest/forestBG1_1_TVOS.png"}; + bg_1.add_component(bg_1_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 2, + .size = vec2(0, 800), + }); + GameObject bg_2 + = scn.new_object("forest_bg_2_" + name, "forest_background", vec2(begin_x, 0)); + Asset bg_2_1_asset{"asset/jetpack_joyride/background/forest/forestBG2_1_TVOS.png"}; + bg_2.add_component(bg_2_1_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 1, + .size = vec2(0, 400), + .position_offset = vec2(200, 0), + }); + Asset bg_2_2_asset{"asset/jetpack_joyride/background/forest/forestBG2_2_TVOS.png"}; + bg_2.add_component(bg_2_2_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 1, + .size = vec2(0, 400), + .position_offset = vec2(-200, 0), + }); + GameObject bg_3 + = scn.new_object("forest_bg_3_" + name, "forest_background", vec2(begin_x, 0)); + Asset bg_3_1_asset{"asset/jetpack_joyride/background/forest/forestBG3_1_TVOS.png"}; + bg_3.add_component(bg_3_1_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 0, + .size = vec2(0, 200), + .position_offset = vec2(300, 0), + }); + Asset bg_3_2_asset{"asset/jetpack_joyride/background/forest/forestBG3_2_TVOS.png"}; + bg_3.add_component(bg_3_2_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 0, + .size = vec2(0, 200), + .position_offset = vec2(100, 0), + }); + Asset bg_3_3_asset{"asset/jetpack_joyride/background/forest/forestBG3_3_TVOS.png"}; + bg_3.add_component(bg_3_3_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 0, + .size = vec2(0, 200), + .position_offset = vec2(-100, 0), + }); + Asset bg_3_4_asset{"asset/jetpack_joyride/background/forest/forestBG3_4_TVOS.png"}; + bg_3.add_component(bg_3_4_asset, Sprite::Data{ + .sorting_in_layer = 3, + .order_in_layer = 0, + .size = vec2(0, 200), + .position_offset = vec2(-300, 0), + }); + + bg_2.add_component(Rigidbody::Data{ + .linear_velocity = vec2(30, 0), + }); + bg_3.add_component(Rigidbody::Data{ + .linear_velocity = vec2(40, 0), + }); +} diff --git a/src/example/Forest.h b/src/example/Forest.h new file mode 100644 index 0000000..f612c91 --- /dev/null +++ b/src/example/Forest.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +namespace crepe { +class Scene; +} + +class Forest { +public: + float create(crepe::Scene & scn, float begin_x, std::string unique_bg_name); + +private: + void add_background(crepe::Scene & scn, float begin_x, std::string name); +}; diff --git a/src/example/Hallway.cpp b/src/example/Hallway.cpp new file mode 100644 index 0000000..5d01a96 --- /dev/null +++ b/src/example/Hallway.cpp @@ -0,0 +1,140 @@ +#include "Hallway.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace crepe; +using namespace std; + +float Hallway::create(Scene & scn, float begin_x, unsigned int sector_num, + Color sector_color) { + GameObject begin = scn.new_object("hallway_begin", "background", vec2(begin_x, 0)); + Asset begin_asset{"asset/jetpack_joyride/background/hallway/hallway1FG_1_TVOS.png"}; + begin.add_component(begin_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 0, + .size = vec2(0, 800), + }); + 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); + + 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"}; + middle_1.add_component(middle_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 2, + .size = vec2(0, 800), + }); + begin_x += 600; + + GameObject middle_2 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0)); + Asset middle_asset_2{"asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; + middle_2.add_component(middle_asset_2, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 3, + .size = vec2(0, 800), + }); + begin_x += 200; + + GameObject middle_3 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0)); + Asset middle_asset_3{"asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; + middle_3.add_component(middle_asset_3, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 4, + .size = vec2(0, 800), + }); + begin_x += 400; + + this->add_lamp(middle_3, vec2(0, -120)); + + GameObject middle_4 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0)); + Asset middle_asset_4{"asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"}; + middle_4.add_component(middle_asset_4, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 5, + .size = vec2(0, 800), + }); + begin_x += 600; + + GameObject end = scn.new_object("hallway_end", "background", vec2(begin_x, 0)); + Asset end_asset{"asset/jetpack_joyride/background/hallway/hallway1FG_1_TVOS.png"}; + end.add_component(end_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 1, + .size = vec2(0, 800), + }); + begin_x += 600; + + return begin_x; +} + +void Hallway::add_lamp(GameObject & obj, vec2 offset, unsigned int fps) { + Asset lamp_asset{"asset/jetpack_joyride/background/hallway/alarmLight_TVOS.png"}; + obj.add_component(lamp_asset, Sprite::Data{ + .sorting_in_layer = 5, + .order_in_layer = 0, + .size = vec2(0, 100), + .position_offset = offset, + }); + Asset lamp_glow_asset{"asset/jetpack_joyride/background/hallway/alarmGlow_TVOS.png"}; + Sprite & lamp_glow_sprite = obj.add_component( + lamp_glow_asset, Sprite::Data{ + .sorting_in_layer = 5, + .order_in_layer = 1, + .size = vec2(0, 300), + .position_offset = offset - vec2(65, -30), + }); + obj.add_component(lamp_glow_sprite, ivec2(422, 384), uvec2(6, 1), + Animator::Data{ + .fps = fps, + .looping = true, + }); +} + +void Hallway::add_sector_number(GameObject & obj, vec2 offset, unsigned int sector_num, + Color sector_color) { + Asset sector_text_asset{"asset/jetpack_joyride/background/hallway/sectorText_TVOS.png"}; + obj.add_component(sector_text_asset, Sprite::Data{ + .color = sector_color, + .sorting_in_layer = 5, + .order_in_layer = 0, + .size = vec2(0, 100), + .position_offset = offset, + }); + Asset sector_num_asset{"asset/jetpack_joyride/background/hallway/sectorNumbers_TVOS.png"}; + Sprite & sector_num_sprite = obj.add_component( + sector_num_asset, Sprite::Data{ + .color = sector_color, + .sorting_in_layer = 5, + .order_in_layer = 0, + .size = vec2(0, 100), + .position_offset = offset + vec2(200, 0), + }); + Animator & sector_num_anim = obj.add_component( + sector_num_sprite, ivec2(256, 128), uvec2(4, 4), Animator::Data{}); + int column = (sector_num - 1) / 4; + int row = (sector_num - 1) % 4; + sector_num_anim.set_anim(column); + for (int i = 0; i < row; i++) { + sector_num_anim.next_anim(); + } + sector_num_anim.pause(); +} diff --git a/src/example/Hallway.h b/src/example/Hallway.h new file mode 100644 index 0000000..f173313 --- /dev/null +++ b/src/example/Hallway.h @@ -0,0 +1,21 @@ +#pragma once + +#include + +namespace crepe { +class Scene; +class GameObject; +class Color; +} // namespace crepe + +class Hallway { +public: + float create(crepe::Scene & scn, float begin_x, unsigned int sector_num, + crepe::Color sector_color); + +private: + void add_lamp(crepe::GameObject & obj, crepe::vec2 offset, unsigned int fps = 10); + + void add_sector_number(crepe::GameObject & obj, crepe::vec2 offset, + unsigned int sector_num, crepe::Color sector_color); +}; diff --git a/src/example/Start.cpp b/src/example/Start.cpp new file mode 100644 index 0000000..a8d86ec --- /dev/null +++ b/src/example/Start.cpp @@ -0,0 +1,69 @@ +#include "Start.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace crepe; +using namespace std; + +float Start::create(Scene & scn, float begin_x) { + GameObject begin = scn.new_object("start_begin", "background", vec2(begin_x, 0)); + Asset begin_asset{"asset/jetpack_joyride/background/start/titleFG_1_TVOS.png"}; + begin.add_component(begin_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 0, + .size = vec2(0, 800), + }); + begin_x += 700; + + GameObject end = scn.new_object("start_end", "background", vec2(begin_x, 0)); + Asset end_asset{"asset/jetpack_joyride/background/start/titleFG_2_TVOS.png"}; + end.add_component(end_asset, Sprite::Data{ + .sorting_in_layer = 4, + .order_in_layer = 1, + .size = vec2(0, 800), + }); + begin_x += 100; + + this->add_lamp(end, vec2(-350, -95)); + + return begin_x; +} + +void Start::add_lamp(GameObject & obj, vec2 offset, unsigned int fps) { + Asset lamp_asset{"asset/jetpack_joyride/background/start/alarmLight_TVOS.png"}; + obj.add_component(lamp_asset, Sprite::Data{ + .sorting_in_layer = 5, + .order_in_layer = 0, + .size = vec2(0, 100), + .position_offset = offset, + }); + Asset lamp_glow_asset{"asset/jetpack_joyride/background/start/alarmGlow_TVOS.png"}; + Sprite & lamp_glow_sprite = obj.add_component( + lamp_glow_asset, Sprite::Data{ + .sorting_in_layer = 5, + .order_in_layer = 1, + .size = vec2(0, 300), + .position_offset = offset - vec2(65, -55), + }); + obj.add_component(lamp_glow_sprite, ivec2(422, 384), uvec2(6, 1), + Animator::Data{ + .fps = fps, + .looping = true, + }); +} diff --git a/src/example/Start.h b/src/example/Start.h new file mode 100644 index 0000000..37d1141 --- /dev/null +++ b/src/example/Start.h @@ -0,0 +1,16 @@ +#pragma once + +#include + +namespace crepe { +class Scene; +class GameObject; +} // namespace crepe + +class Start { +public: + float create(crepe::Scene & scn, float begin_x); + +private: + void add_lamp(crepe::GameObject & obj, crepe::vec2 offset, unsigned int fps = 10); +}; diff --git a/src/example/button.cpp b/src/example/button.cpp deleted file mode 100644 index 00bdc28..0000000 --- a/src/example/button.cpp +++ /dev/null @@ -1,54 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -using namespace crepe; -using namespace std; - -int main(int argc, char * argv[]) { - ComponentManager mgr; - RenderSystem sys{mgr}; - EventManager & event_mgr = EventManager::get_instance(); - InputSystem input_sys{mgr}; - AnimatorSystem asys{mgr}; - GameObject camera_obj = mgr.new_object("", "", vec2{1000, 1000}, 0, 1); - camera_obj.add_component(Color::WHITE, ivec2{1080, 720}, vec2{2000, 2000}, 1.0f); - - GameObject button_obj = mgr.new_object("body", "person", vec2{0, 0}, 0, 1); - auto s2 = Texture("asset/texture/test_ap43.png"); - bool button_clicked = false; - auto & sprite2 = button_obj.add_component( - s2, Color::GREEN, Sprite::FlipSettings{false, false}, 2, 1, 100); - std::function on_click = [&]() { std::cout << "button clicked" << std::endl; }; - std::function on_enter = [&]() { std::cout << "enter" << std::endl; }; - std::function on_exit = [&]() { std::cout << "exit" << std::endl; }; - auto & button - = button_obj.add_component