diff options
Diffstat (limited to 'src/example')
-rw-r--r-- | src/example/AITest.cpp | 90 | ||||
-rw-r--r-- | src/example/CMakeLists.txt | 5 | ||||
-rw-r--r-- | src/example/button.cpp | 53 | ||||
-rw-r--r-- | src/example/demo.cpp | 72 | ||||
-rw-r--r-- | src/example/game.cpp | 272 | ||||
-rw-r--r-- | src/example/rendering_particle.cpp | 95 |
6 files changed, 73 insertions, 514 deletions
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 <crepe/api/AI.h> -#include <crepe/api/BehaviorScript.h> -#include <crepe/api/Camera.h> -#include <crepe/api/Color.h> -#include <crepe/api/GameObject.h> -#include <crepe/api/LoopManager.h> -#include <crepe/api/Rigidbody.h> -#include <crepe/api/Scene.h> -#include <crepe/api/Script.h> -#include <crepe/api/Sprite.h> -#include <crepe/manager/Mediator.h> -#include <crepe/types.h> - -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<AI> aivec = this->get_components<AI>(); - AI & ai = aivec.front().get(); - ai.flee_target - = vec2{static_cast<float>(event.mouse_x), static_cast<float>(event.mouse_y)};*/ - return true; - } - - void init() { - subscribe<ShutDownEvent>( - [this](const ShutDownEvent & ev) -> bool { return this->shutdown(ev); }); - subscribe<MouseMoveEvent>( - [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<Sprite>( - 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<AI>(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>(Rigidbody::Data{ - .mass = 0.1f, - .max_linear_velocity = 40, - }); - game_object1.add_component<BehaviorScript>().set_script<Script1>(); - - game_object2.add_component<Camera>(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<Scene1>(); - engine.start(); - - return 0; -} diff --git a/src/example/CMakeLists.txt b/src/example/CMakeLists.txt index 187ed46..f35f38f 100644 --- a/src/example/CMakeLists.txt +++ b/src/example/CMakeLists.txt @@ -16,7 +16,4 @@ function(add_example target_name) add_dependencies(examples ${target_name}) endfunction() -add_example(rendering_particle) -add_example(game) -add_example(button) -add_example(AITest) +add_example(demo) diff --git a/src/example/button.cpp b/src/example/button.cpp deleted file mode 100644 index f2e77f6..0000000 --- a/src/example/button.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include <SDL2/SDL_timer.h> -#include <chrono> -#include <crepe/Component.h> -#include <crepe/ComponentManager.h> -#include <crepe/api/Animator.h> -#include <crepe/api/Button.h> -#include <crepe/api/Camera.h> -#include <crepe/api/Color.h> -#include <crepe/api/EventManager.h> -#include <crepe/api/GameObject.h> -#include <crepe/api/Sprite.h> -#include <crepe/api/Texture.h> -#include <crepe/api/Transform.h> -#include <crepe/system/AnimatorSystem.h> -#include <crepe/system/InputSystem.h> -#include <crepe/system/RenderSystem.h> -#include <crepe/types.h> -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<Camera>(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<Sprite>( - s2, Color::GREEN, Sprite::FlipSettings{false, false}, 2, 1, 100); - std::function<void()> on_click = [&]() { std::cout << "button clicked" << std::endl; }; - std::function<void()> on_enter = [&]() { std::cout << "enter" << std::endl; }; - std::function<void()> on_exit = [&]() { std::cout << "exit" << std::endl; }; - auto & button - = button_obj.add_component<Button>(vec2{100, 100}, vec2{0, 0}, on_click, false); - button.on_mouse_enter = on_enter; - button.on_mouse_exit = on_exit; - button.is_toggle = true; - button.active = true; - auto start = std::chrono::steady_clock::now(); - while (true) { - input_sys.update(); - sys.update(); - asys.update(); - event_mgr.dispatch_events(); - SDL_Delay(30); - } - return 0; -} diff --git a/src/example/demo.cpp b/src/example/demo.cpp new file mode 100644 index 0000000..33f4d74 --- /dev/null +++ b/src/example/demo.cpp @@ -0,0 +1,72 @@ +#include <crepe/util/Log.h> +#include <crepe/api/Engine.h> +#include <crepe/api/Scene.h> +#include <crepe/api/Camera.h> +#include <crepe/api/BehaviorScript.h> +#include <crepe/api/Rigidbody.h> +#include <crepe/api/Config.h> + +using namespace crepe; +using namespace std; + +class PlayerController : public Script { + void update() { + Rigidbody & body = get_component<Rigidbody>(); + + if (get_key_state(Keycode::SPACE)) { + body.add_force_linear({ 0, -1 }); + } + } +}; + +class DemoScene : public Scene { + string get_name() const override { return "DemoScene"; } + void load_scene() override { + GameObject camera = new_object("camera"); + camera.add_component<Camera>(vec2{10, 10}, Camera::Data{ + .bg_color = {0x22, 0x22, 0x22}, + }); + + + GameObject ground = new_object("ground"); + Sprite & ground_sprite = ground.add_component<Sprite>( + Asset{"asset/demo/floor.png"}, + Sprite::Data{ + .size = {10, 2}, + } + ); + ground.transform.position = {0, 4}; + ground.add_component<Rigidbody>(Rigidbody::Data{ + .body_type = Rigidbody::BodyType::STATIC, + }); + ground.add_component<BoxCollider>(ground_sprite.data.size); + + + GameObject player = new_object("player"); + Sprite & player_sprite = player.add_component<Sprite>( + Asset{"asset/demo/player.png"}, + Sprite::Data{ + .size = { 1, 1 }, + } + ); + player.add_component<Rigidbody>(Rigidbody::Data{}); + player.add_component<BoxCollider>(player_sprite.data.size); + player.add_component<BehaviorScript>().set_script<PlayerController>(); + } +}; + +int main() { + Config::get_instance() = { + .physics = { + .gravity = 20, + }, + .window = { + .size = {800, 800}, + }, + }; + + Engine demo; + demo.add_scene<DemoScene>(); + return demo.main(); +} + diff --git a/src/example/game.cpp b/src/example/game.cpp deleted file mode 100644 index 5361f3a..0000000 --- a/src/example/game.cpp +++ /dev/null @@ -1,272 +0,0 @@ -#include "api/CircleCollider.h" -#include "api/Scene.h" -#include "manager/ComponentManager.h" -#include "manager/Mediator.h" -#include "types.h" -#include <crepe/api/BoxCollider.h> -#include <crepe/api/Camera.h> -#include <crepe/api/Color.h> -#include <crepe/api/Event.h> -#include <crepe/api/GameObject.h> -#include <crepe/api/LoopManager.h> -#include <crepe/api/Rigidbody.h> -#include <crepe/api/Script.h> -#include <crepe/api/Sprite.h> -#include <crepe/api/Transform.h> -#include <crepe/api/Vector2.h> - -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<Transform>(); - tf.position.x -= 1; - break; - } - case Keycode::W: { - Transform & tf = this->get_component<Transform>(); - tf.position.y -= 1; - break; - } - case Keycode::S: { - Transform & tf = this->get_component<Transform>(); - tf.position.y += 1; - break; - } - case Keycode::D: { - Transform & tf = this->get_component<Transform>(); - tf.position.x += 1; - break; - } - case Keycode::E: { - if (flip) { - flip = false; - this->get_component<BoxCollider>().active = true; - this->get_components<Sprite>()[0].get().active = true; - this->get_component<CircleCollider>().active = false; - this->get_components<Sprite>()[1].get().active = false; - } else { - flip = true; - this->get_component<BoxCollider>().active = false; - this->get_components<Sprite>()[0].get().active = false; - this->get_component<CircleCollider>().active = true; - this->get_components<Sprite>()[1].get().active = true; - } - - //add collider switch - break; - } - case Keycode::Q: { - Rigidbody & rg = this->get_component<Rigidbody>(); - rg.data.angular_velocity = 1; - break; - } - default: - break; - } - return false; - } - - void init() { - Log::logf("init"); - subscribe<CollisionEvent>( - [this](const CollisionEvent & ev) -> bool { return this->oncollision(ev); }); - subscribe<KeyPressEvent>( - [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<Transform>(); - tf.position.x -= 1; - break; - } - case Keycode::UP: { - Transform & tf = this->get_component<Transform>(); - tf.position.y -= 1; - break; - } - case Keycode::DOWN: { - Transform & tf = this->get_component<Transform>(); - tf.position.y += 1; - break; - } - case Keycode::RIGHT: { - Transform & tf = this->get_component<Transform>(); - tf.position.x += 1; - break; - } - case Keycode::PAUSE: { - if (flip) { - flip = false; - this->get_component<BoxCollider>().active = true; - this->get_components<Sprite>()[0].get().active = true; - this->get_component<CircleCollider>().active = false; - this->get_components<Sprite>()[1].get().active = false; - } else { - flip = true; - this->get_component<BoxCollider>().active = false; - this->get_components<Sprite>()[0].get().active = false; - this->get_component<CircleCollider>().active = true; - this->get_components<Sprite>()[1].get().active = true; - } - - //add collider switch - break; - } - default: - break; - } - return false; - } - - void init() { - Log::logf("init"); - subscribe<CollisionEvent>( - [this](const CollisionEvent & ev) -> bool { return this->oncollision(ev); }); - subscribe<KeyPressEvent>( - [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 { -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>(Rigidbody::Data{ - .mass = 0, - .gravity_scale = 0, - .body_type = Rigidbody::BodyType::STATIC, - .offset = {0, 0}, - .collision_layers = {0}, - }); - world.add_component<BoxCollider>( - vec2{0, 0 - (screen_size_height / 2 + world_collider / 2)}, - vec2{world_collider, world_collider}); - ; // Top - world.add_component<BoxCollider>(vec2{0, screen_size_height / 2 + world_collider / 2}, - vec2{world_collider, world_collider}); // Bottom - world.add_component<BoxCollider>( - vec2{0 - (screen_size_width / 2 + world_collider / 2), 0}, - vec2{world_collider, world_collider}); // Left - world.add_component<BoxCollider>(vec2{screen_size_width / 2 + world_collider / 2, 0}, - vec2{world_collider, world_collider}); // right - world.add_component<Camera>( - ivec2{static_cast<int>(screen_size_width), static_cast<int>(screen_size_height)}, - vec2{screen_size_width, screen_size_height}, - Camera::Data{ - .bg_color = Color::WHITE, - .zoom = 1, - }); - - GameObject game_object1 = mgr.new_object( - "Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 0, 1); - game_object1.add_component<Rigidbody>(Rigidbody::Data{ - .mass = 1, - .gravity_scale = 1, - .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<BoxCollider>(vec2{0, 0}, vec2{20, 20}); - game_object1.add_component<BehaviorScript>().set_script<MyScript1>(); - - Asset img1{"asset/texture/square.png"}; - game_object1.add_component<Sprite>(img1, Sprite::Data{ - .size = {20, 20}, - }); - - //add circle with cirlcecollider deactiveated - game_object1.add_component<CircleCollider>(vec2{0, 0}, 10).active = false; - Asset img2{"asset/texture/circle.png"}; - game_object1 - .add_component<Sprite>(img2, - Sprite::Data{ - .size = {20, 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>(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<BoxCollider>(vec2{0, 0}, vec2{20, 20}); - game_object2.add_component<BehaviorScript>().set_script<MyScript2>(); - - game_object2.add_component<Sprite>(img1, Sprite::Data{ - .size = {20, 20}, - }); - - //add circle with cirlcecollider deactiveated - game_object2.add_component<CircleCollider>(vec2{0, 0}, 10).active = false; - - game_object2 - .add_component<Sprite>(img2, - Sprite::Data{ - .size = {20, 20}, - }) - .active - = false; - } - - string get_name() const { return "scene1"; } -}; - -int main(int argc, char * argv[]) { - - LoopManager gameloop; - gameloop.add_scene<ConcreteScene1>(); - gameloop.start(); - return 0; -} diff --git a/src/example/rendering_particle.cpp b/src/example/rendering_particle.cpp deleted file mode 100644 index 13e625f..0000000 --- a/src/example/rendering_particle.cpp +++ /dev/null @@ -1,95 +0,0 @@ -#include "api/Asset.h" -#include <crepe/Component.h> -#include <crepe/api/Animator.h> -#include <crepe/api/Button.h> -#include <crepe/api/Camera.h> -#include <crepe/api/Color.h> -#include <crepe/api/GameObject.h> -#include <crepe/api/LoopManager.hpp> -#include <crepe/api/ParticleEmitter.h> -#include <crepe/api/Rigidbody.h> -#include <crepe/api/Sprite.h> -#include <crepe/api/Transform.h> -#include <crepe/manager/ComponentManager.h> -#include <crepe/manager/Mediator.h> -#include <crepe/types.h> -#include <iostream> - -using namespace crepe; -using namespace std; - -/* - auto & test = game_object.add_component<ParticleEmitter>(ParticleEmitter::Data{ - .position = {0, 0}, - .max_particles = 10, - .emission_rate = 0.1, - .min_speed = 6, - .max_speed = 20, - .min_angle = -20, - .max_angle = 20, - .begin_lifespan = 0, - .end_lifespan = 60, - .force_over_time = vec2{0, 0}, - .boundary{ - .width = 1000, - .height = 1000, - .offset = vec2{0, 0}, - .reset_on_exit = false, - }, - .sprite = test_sprite, - }); - */ - -class TestScene : public Scene { -public: - void load_scene() { - - cout << "TestScene" << endl; - Mediator & mediator = this->mediator; - ComponentManager & mgr = mediator.component_manager; - GameObject game_object = mgr.new_object("", "", vec2{0, 0}, 0, 1); - - Color color(255, 255, 255, 255); - - Asset img{"asset/spritesheet/spritesheet_test.png"}; - - Sprite & test_sprite = game_object.add_component<Sprite>( - img, Sprite::Data{ - .color = color, - .flip = Sprite::FlipSettings{false, false}, - .sorting_in_layer = 2, - .order_in_layer = 2, - .size = {0, 100}, - .angle_offset = 0, - .position_offset = {0, 0}, - }); - - //auto & anim = game_object.add_component<Animator>(test_sprite,ivec2{32, 64}, uvec2{4,1}, Animator::Data{}); - //anim.set_anim(0); - - auto & cam = game_object.add_component<Camera>(ivec2{720, 1280}, vec2{400, 400}, - Camera::Data{ - .bg_color = Color::WHITE, - }); - - function<void()> on_click = [&]() { cout << "button clicked" << std::endl; }; - function<void()> on_enter = [&]() { cout << "enter" << std::endl; }; - function<void()> on_exit = [&]() { cout << "exit" << std::endl; }; - - auto & button - = game_object.add_component<Button>(vec2{200, 200}, vec2{0, 0}, on_click, false); - button.on_mouse_enter = on_enter; - button.on_mouse_exit = on_exit; - button.is_toggle = true; - button.active = true; - } - - string get_name() const { return "TestScene"; }; -}; - -int main(int argc, char * argv[]) { - LoopManager engine; - engine.add_scene<TestScene>(); - engine.start(); - return 0; -} |