From e1da92454d096c28292699f64d891a3af292a204 Mon Sep 17 00:00:00 2001 From: Paweł Redman Date: Thu, 12 Oct 2017 13:20:06 +0200 Subject: Initial work on animations. --- src/render.cpp | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 59 insertions(+), 8 deletions(-) (limited to 'src/render.cpp') diff --git a/src/render.cpp b/src/render.cpp index 1baf0e0..08a4524 100644 --- a/src/render.cpp +++ b/src/render.cpp @@ -52,7 +52,29 @@ static void draw_sector(sf::RenderWindow *window, world::sector_t *sector) } } -void game::state_t::render(sf::RenderWindow *window) +void interface::state_t::render() +{ +} + +namespace render { + +state_t::state_t(sf::RenderWindow *window_) +{ + window = window_; +} + +void state_t::begin_frame(double time_) +{ + now = time_; + window->clear(); +} + +void state_t::end_frame(void) +{ + window->display(); +} + +void state_t::render(game::state_t *game) { sf::Vector2u size = window->getSize(); sf::Vector2f A, B, C, D; @@ -68,22 +90,51 @@ void game::state_t::render(sf::RenderWindow *window) bbox.width = std::max({A.x, B.x, C.x, D.x}) - bbox.left; bbox.height = std::max({A.y, B.y, C.y, D.y}) - bbox.top; - for (world::sector_t *sector : world.get_sectors(bbox)) + for (world::sector_t *sector : game->world.get_sectors(bbox)) draw_sector(window, sector); - for (world::entity_t *ent : world.get_entities(bbox)) - ent->render(window); + for (world::entity_t *ent : game->world.get_entities(bbox)) + ent->render(this); } -void game::human_t::render(sf::RenderWindow *window) +void state_t::render(animated_texture_t *anim, sf::FloatRect bounds) { + size_t frame; + + frame = floor(fmod(now * 20.0, anim->frame_count)); + + wot_rect.setTexture(anim->frames + frame, true); + wot_rect.setFillColor(sf::Color::White); 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); + wot_rect.setTexture(NULL); } -void interface::state_t::render() +animated_texture_t::~animated_texture_t(void) { + //delete[] frames; } + +bool animated_texture_t::load(std::string prefix, size_t frame_count_) +{ + frame_count = frame_count_; + frames = new sf::Texture[frame_count]; + + for (size_t i = 0; i < frame_count; i++) { + std::string path; + + path = prefix + std::to_string(i) + ".png"; + std::cout << "load " << path << "\n"; + + if (!frames[i].loadFromFile(path)) { + // FIXME + //delete[] frames; + return false; + } + } + + return true; +} + +} // namespace render -- cgit