diff options
Diffstat (limited to 'src/example/demo.cpp')
-rw-r--r-- | src/example/demo.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
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(); +} + |