#include #include #include #include #include #include #include #include #include using namespace crepe; using namespace std; class PlayerController : public Script { void update() { Rigidbody & body = get_component(); if (get_key_state(Keycode::SPACE)) body.add_force_linear({ 0, -1 }); body.data.linear_velocity.x = -5 * get_key_state(Keycode::A) + 5 * get_key_state(Keycode::D); } }; class DemoScene : public Scene { void load_scene() override { GameObject camera = new_object("camera"); camera.add_component(vec2{10, 10}, Camera::Data{ .bg_color = {0x22, 0x22, 0x22}, }); GameObject ground = new_object("ground"); Sprite & ground_sprite = ground.add_component( Asset{"asset/demo/floor.png"}, Sprite::Data{ .size = {10, 2}, } ); ground.transform.position = {0, 4}; ground.add_component(Rigidbody::Data{ .body_type = Rigidbody::BodyType::STATIC, }); ground.add_component(ground_sprite.data.size); GameObject player = new_object("player"); Sprite & player_sprite = player.add_component( Asset{"asset/demo/player.png"}, Sprite::Data{ .size = { 1, 1 }, } ); player.add_component(Rigidbody::Data{ }); player.add_component(player_sprite.data.size); player.add_component().set_script(); } }; int main() { Config::get_instance() = { .physics = { .gravity = 20, }, .window = { .size = {800, 800}, }, }; Engine demo; demo.add_scene(); return demo.main(); }