#include #include namespace { void register_square_behaviors() { auto& behaviors = boundard::BehaviorRegistry::getInstance(); behaviors.register_init("square_init", [](boundard::Actor& actor) { actor.set_position({0.0F, 0.0F}); actor.set_facing({1.0F, 0.0F}); if (actor.mesh() != nullptr) { actor.mesh()->set_color({0.2F, 0.8F, 0.9F, 1.0F}); } }); behaviors.register_tick( "square_tick", [](boundard::Actor& actor, float dt, const boundard::render::InputMap& input) { const float t = actor.age(); if (actor.mesh() != nullptr) { actor.mesh()->set_color({ 0.5F + 0.5F * std::sin(t * 2.0F), 0.5F + 0.5F * std::sin(t * 2.0F + 2.094F), 0.5F + 0.5F * std::sin(t * 2.0F + 4.189F), 1.0F, }); } auto position = actor.position(); constexpr float move_speed = 0.7F; position[0] += input.get_axis("move_left", "move_right") * move_speed * dt; position[1] += input.get_axis("move_up", "move_down") * move_speed * dt; actor.set_position(position); if (input.is_action_just_pressed("switch_scene")) { boundard::Game::getInstance().switch_scene("square_alt"); } }); behaviors.register_init("square_alt_init", [](boundard::Actor& actor) { actor.set_position({0.0F, 0.0F}); actor.set_facing({0.0F, 1.0F}); if (actor.mesh() != nullptr) { actor.mesh()->set_color({0.9F, 0.3F, 0.2F, 1.0F}); } }); behaviors.register_tick( "square_alt_tick", [](boundard::Actor& actor, const float dt, const boundard::render::InputMap& input) { const float t = actor.age(); if (actor.mesh() != nullptr) { actor.mesh()->set_color({ 0.5F + 0.5F * std::sin(t * 2.0F + 4.189F), 0.5F + 0.5F * std::sin(t * 2.0F), 0.5F + 0.5F * std::sin(t * 2.0F + 2.094F), 1.0F, }); } auto position = actor.position(); constexpr float move_speed = 0.7F; position[0] += input.get_axis("move_left", "move_right") * move_speed * dt; position[1] += input.get_axis("move_up", "move_down") * move_speed * dt; actor.set_position(position); if (input.is_action_just_pressed("switch_scene")) { boundard::Game::getInstance().switch_scene("square"); } }); } } // namespace int main(int argc, char** argv) { register_square_behaviors(); return boundard::run_engine(argc, argv, "examples/square/config.ceg"); }