Files
aee-arcade/source/game/entities/entity.cpp
T

44 lines
1.4 KiB
C++

#include "game/entities/entity.hpp"
#include <utility>
Entity::Entity(std::string name, TilePos tile, SDL_FRect pixel_rect)
: name_(std::move(name)),
tile_(tile),
pixel_rect_(pixel_rect) {}
void Entity::update(float delta_time) {
if (anim_.has_value()) { anim_->tick(delta_time); }
}
void Entity::render() {
// No-op de base. El dibuix real el fa `EntityManager::renderAll` (viu
// a `entity_manager_loadlevel.cpp`, que sí depèn de `Surface`). Així
// `entity.cpp` no arrossega el pipeline de render al smoke test
// stand-alone. Les subclasses futures poden sobreescriure si volen
// lògica pròpia (p.ex. render condicional segons estat).
}
void Entity::onPlayerContact(Player* /*player*/) {
// No-op per defecte.
}
void Entity::notifyTileEntered(int /*col*/, int /*row*/) {
// No-op per defecte; només `Sarcophagus` l'usa.
}
auto Entity::getCollisionRect() const -> SDL_FRect {
if (!collision_box_.has_value()) { return pixel_rect_; }
return {
.x = pixel_rect_.x + static_cast<float>(collision_box_->offset_x),
.y = pixel_rect_.y + static_cast<float>(collision_box_->offset_y),
.w = static_cast<float>(collision_box_->width),
.h = static_cast<float>(collision_box_->height),
};
}
auto Entity::getFeetY() const -> float {
const auto RECT = getCollisionRect();
return RECT.y + RECT.h;
}