#include "common.hpp" namespace game { class unit_t : public world::entity_t { }; struct { struct { render::oriented_sprite_4M_t head_idle, body_idle; render::oriented_sprite_4M2_t legs_idle, legs_walking; } human; } assets; bool load_assets(void) { assets.human.head_idle.load("assets/units/human/head_idle", 1, 1, 1); assets.human.body_idle.load("assets/units/human/body_idle", 2, 2, 2); assets.human.legs_idle.load("assets/units/human/legs_idle", 2, 2); assets.human.legs_walking.load("assets/units/human/legs_walking", 2, 2); return true; } class human_t : public unit_t { public: float angle = 0.0f; bool walking = false; void render_to(render::state_t *render) { render->render((walking ? &assets.human.legs_walking : &assets.human.legs_idle), bounds, angle); render->render(&assets.human.body_idle, bounds, angle); render->render(&assets.human.head_idle, bounds, angle); } }; static human_t *human; void state_t::start(void) { human = new human_t; human->bounds.left = 0.33f; human->bounds.top = 0.0f; human->bounds.width = 0.66f; human->bounds.height = 1.0f; human->link(&world); } void state_t::tick(void) { static float stalin = 2.0f; stalin -= ((float)rand() / RAND_MAX) * 0.1f; human->walking = false; if (stalin < 0) { human->walking = true; human->angle += (rand() & 2 ? 0.2f : -0.2f); human->unlink(); human->bounds.left += cos(human->angle) * 0.04; human->bounds.top += sin(human->angle) * 0.04; human->link(&world); } if (stalin < -4.0f) stalin = 2.0f; } } //namespace game