#include #include "libtcod.hpp" #include "Actor.h" #include "Map.h" #include "Engine.h" Engine::Engine(tcod::Context *context, tcod::Console *console) { this->context = context; this->console = console; map = nullptr; player = nullptr; fovRadius = 10; computeFov = true; } void Engine::init() { player = new Actor(40, 25, "@", TCOD_ColorRGB(255, 255, 255)); actors.push(player); map = new Map(80, 45); } Engine::~Engine() { actors.clearAndDelete(); delete map; } bool Engine::update() { SDL_Event event; while (SDL_PollEvent(&event)) { context->convert_event_coordinates(event); switch (event.type) { case SDL_EVENT_KEY_DOWN: switch (event.key.key) { case SDLK_UP: if (!map->isWall(player->x, player->y - 1)) { player->y--; computeFov = true; } break; case SDLK_DOWN: if (!map->isWall(player->x, player->y + 1)) { player->y++; computeFov = true; } break; case SDLK_LEFT: if (!map->isWall(player->x - 1, player->y)) { player->x--; computeFov = true; } break; case SDLK_RIGHT: if (!map->isWall(player->x + 1, player->y)) { player->x++; computeFov = true; } break; default: break; } break; case SDL_EVENT_QUIT: return false; default: break; } if (computeFov) { map->computeFov(); computeFov = false; } } return true; } void Engine::render() { console->clear(); // draw the map map->render(*console); // draw the actors for (Actor** iterator = actors.begin(); iterator != actors.end(); iterator++) { Actor* actor = *iterator; if (map->isInFov(actor->x, actor->y)) { actor->render(*console); } } context->present(*console); }