#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; } 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--; break; case SDLK_DOWN: if (!map->isWall(player->x, player->y + 1)) player->y++; break; case SDLK_LEFT: if (!map->isWall(player->x - 1, player->y)) player->x--; break; case SDLK_RIGHT: if (!map->isWall(player->x + 1, player->y)) player->x++; break; default: break; } break; case SDL_EVENT_QUIT: return false; default: break; } } 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++) { (*iterator)->render(*console); } context->present(*console); }