Files
aee-arcade/source/game/entities/concrete/mummy.cpp
T

46 lines
1.4 KiB
C++

#include "game/entities/concrete/mummy.hpp"
#include <random>
#include <string>
#include "game/entities/entity_factory.hpp"
#include "game/entities/event_bus.hpp"
namespace {
// RNG local al mòdul: compartit per totes les mòmies (no cal reproducció
// determinista a l'andamiatge). Es reinicialitza amb una llavor fixa
// per facilitar la depuració — si algun dia volem aleatoritat real,
// llegir-la de std::random_device.
auto rng() -> std::mt19937& {
static std::mt19937 k_rng_{1337};
return k_rng_;
}
} // namespace
Mummy::Mummy(const fkyaml::node& yaml) {
name_ = yaml.contains("name") ? yaml["name"].get_value<std::string>() : std::string("mummy");
collides_ = true;
interactable_ = false;
// Velocitat i dany des del bloc `stats` (si existeix).
if (yaml.contains("stats")) {
const auto& s = yaml["stats"];
if (s.contains("speed")) { setSpeed(s["speed"].get_value<float>()); }
if (s.contains("damage")) { setDamage(s["damage"].get_value<int>()); }
}
}
auto Mummy::chooseDirection(const std::vector<Direction>& allowed) -> Direction {
if (allowed.empty()) { return Direction::NONE; }
std::uniform_int_distribution<std::size_t> dist(0, allowed.size() - 1);
return allowed[dist(rng())];
}
void Mummy::onPlayerContact(Player* /*player*/) {
if (bus_ != nullptr) { bus_->publish("player_hit", getDamage()); }
}
REGISTER_ENTITY("mummy", Mummy)