adg5/Engine.cpp
2025-04-20 10:05:21 +10:00

75 lines
1.4 KiB
C++

#include <SDL3/SDL.h>
#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);
}