50 lines
1.5 KiB
C++
50 lines
1.5 KiB
C++
#include <cmath>
|
|
|
|
#include <boundard.hpp>
|
|
|
|
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();
|
|
actor.set_facing({
|
|
std::cos(t * 1.5F),
|
|
std::sin(t * 1.5F),
|
|
});
|
|
|
|
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();
|
|
const 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);
|
|
});
|
|
}
|
|
|
|
} // namespace
|
|
|
|
int main(int argc, char** argv) {
|
|
register_square_behaviors();
|
|
return boundard::run_engine(argc, argv, "examples/square/config.ceg");
|
|
}
|