summaryrefslogtreecommitdiff
path: root/src/render.cpp
diff options
context:
space:
mode:
authorPaweł Redman <pawel.redman@gmail.com>2017-10-09 22:51:50 +0200
committerPaweł Redman <pawel.redman@gmail.com>2017-10-09 22:51:50 +0200
commitff4929c650e6ed446b6faff9f6b0f078d0a3644c (patch)
tree932671a8f9e06d0add2fb2ae9c0f542bd3980304 /src/render.cpp
parent8d6cb03cd83b9f6576909058601af54f16c8acfe (diff)
Initial work on entities.
Diffstat (limited to 'src/render.cpp')
-rw-r--r--src/render.cpp47
1 files changed, 34 insertions, 13 deletions
diff --git a/src/render.cpp b/src/render.cpp
index 05785ae..d63ca6f 100644
--- a/src/render.cpp
+++ b/src/render.cpp
@@ -1,4 +1,5 @@
#include "common.hpp"
+#include <list>
static sf::RectangleShape wot_rect;
@@ -12,35 +13,35 @@ static void draw_tile(sf::RenderWindow *window, float x, float y,
window->draw(wot_rect);
}
-static void draw_sector(sf::RenderWindow *window, world::world_t *world,
- world::sector_index_t index)
+static void draw_sector(sf::RenderWindow *window, world::sector_t *sector)
{
- world::sector_t *sector;
-
- sector = world->get_sector(index);
-
for (ssize_t y = 0; y < SECTOR_SIZE; y++)
- for (ssize_t x = 0; x < SECTOR_SIZE; x++) {
+ for (ssize_t x = 0; x < SECTOR_SIZE; x++)
draw_tile(window,
- index.x * SECTOR_SIZE + x,
- index.y * SECTOR_SIZE + y,
+ sector->bounds.left + x, sector->bounds.top + y,
sector->tiles + y * SECTOR_SIZE + x);
- }
wot_rect.setSize(sf::Vector2f(SECTOR_SIZE, SECTOR_SIZE));
- wot_rect.setPosition(sf::Vector2f(index.x * SECTOR_SIZE, index.y * SECTOR_SIZE));
+ wot_rect.setPosition(sf::Vector2f(sector->bounds.left, sector->bounds.top));
wot_rect.setOutlineColor(sf::Color::Yellow);
wot_rect.setOutlineThickness(0.06f);
wot_rect.setFillColor(sf::Color::Transparent);
window->draw(wot_rect);
}
+static void draw_sector_entities(sf::RenderWindow *window, world::sector_t *sector)
+{
+ for (world::entity_t *ent : sector->ents)
+ ent->render(window);
+}
+
void game::state_t::render(sf::RenderWindow *window)
{
sf::Vector2u size = window->getSize();
sf::Vector2f A, B, C, D;
sf::Rect<float> bbox;
sf::Rect<ssize_t> index_box;
+ std::list<world::sector_t*> sectors;
A = window->mapPixelToCoords(sf::Vector2i(0, 0));
B = window->mapPixelToCoords(sf::Vector2i(size.x, 0));
@@ -58,8 +59,28 @@ void game::state_t::render(sf::RenderWindow *window)
index_box.height = ceil(bbox.height / SECTOR_SIZE);
for (ssize_t y = index_box.top; y < index_box.height; y++)
- for (ssize_t x = index_box.left; x < index_box.width; x++)
- draw_sector(window, &world, world::sector_index_t(x, y));
+ for (ssize_t x = index_box.left; x < index_box.width; x++) {
+ world::sector_index_t index(x, y);
+ world::sector_t *sector;
+
+ sector = world.get_sector(index);
+ sectors.push_back(sector);
+ }
+
+ for (auto *sector : sectors)
+ draw_sector(window, sector);
+
+ for (auto *sector : sectors)
+ draw_sector_entities(window, sector);
+}
+
+void game::human_t::render(sf::RenderWindow *window)
+{
+ wot_rect.setPosition(bounds.left, bounds.top);
+ wot_rect.setSize(sf::Vector2f(bounds.width, bounds.height));
+ wot_rect.setFillColor(sf::Color::Red);
+ wot_rect.setOutlineColor(sf::Color::Transparent);
+ window->draw(wot_rect);
}
void interface::state_t::render()