diff options
Diffstat (limited to 'src/render.cpp')
-rw-r--r-- | src/render.cpp | 47 |
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() |