summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game.cpp47
-rw-r--r--src/render.cpp11
2 files changed, 37 insertions, 21 deletions
diff --git a/src/game.cpp b/src/game.cpp
index bb04ee7..58b56c6 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -26,6 +26,7 @@ class human_t : public unit_t {
public:
float angle = 0.0f;
bool walking = false;
+ float stalin = 0.0f;
void render_to(render::state_t *render)
{
@@ -36,37 +37,43 @@ public:
}
};
-static human_t *human;
+static std::list<human_t> humans;
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;
+ if (rand() % 5 == 0) {
+ humans.emplace(humans.end());
- stalin -= ((float)rand() / RAND_MAX) * 0.1f;
+ human_t &human = *(--humans.end());
- 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);
+ human.bounds.left = 0.33f;
+ human.bounds.top = 0;
+ human.bounds.width = 0.66f;
+ human.bounds.height = 1.0f;
+ human.link(&world);
}
- if (stalin < -4.0f)
- stalin = 2.0f;
+ for (human_t &human : humans) {
+ human.stalin -= ((float)rand() / RAND_MAX) * 0.1f;
+
+ human.walking = false;
+
+ if (human.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 (human.stalin < -4.0f)
+ human.stalin = 2.0f;
+ }
}
} //namespace game
diff --git a/src/render.cpp b/src/render.cpp
index f56cb37..ce9b837 100644
--- a/src/render.cpp
+++ b/src/render.cpp
@@ -79,6 +79,7 @@ void state_t::render(game::state_t *game)
sf::Vector2u size = window->getSize();
sf::Vector2f A, B, C, D;
sf::Rect<float> bbox;
+ std::list<world::entity_t*> ents;
A = window->mapPixelToCoords(sf::Vector2i(0, 0));
B = window->mapPixelToCoords(sf::Vector2i(size.x, 0));
@@ -93,7 +94,15 @@ void state_t::render(game::state_t *game)
for (world::sector_t *sector : game->world.get_sectors(bbox))
draw_sector(window, sector);
- for (world::entity_t *ent : game->world.get_entities(bbox))
+ ents = game->world.get_entities(bbox);
+ ents.sort(
+ [](const world::entity_t *x, const world::entity_t *y) -> bool
+ {
+ return x->bounds.top + x->bounds.height
+ < y->bounds.top + y->bounds.height;
+ });
+
+ for (world::entity_t *ent : ents)
ent->render_to(this);
}