37 lines
1.3 KiB
C++
37 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <vector>
|
|
|
|
#include "external/fkyaml_node.hpp"
|
|
#include "game/entities/hazard.hpp"
|
|
|
|
// Mòmia: perill dinàmic que deambula pels passadís. A cada intersecció
|
|
// tria una direcció vàlida; l'algoritme per triar-la és un hook virtual
|
|
// (`chooseDirection`) que la base implementa com a aleatori uniforme
|
|
// sobre les direccions admissibles. Futurs derivats poden sesgar cap al
|
|
// jugador sense tocar la lògica de moviment.
|
|
//
|
|
// Andamiatge: el concepte d'"intersecció" i la validació de direcció
|
|
// requereixen conèixer el mapa. De moment l'exposem com un conjunt de
|
|
// direccions admissibles que l'EntityManager injecta; la implementació
|
|
// real arribarà quan cablegem l'entitat al game loop.
|
|
class Mummy : public DynamicHazard {
|
|
public:
|
|
enum class Direction : std::uint8_t { NONE,
|
|
UP,
|
|
DOWN,
|
|
LEFT,
|
|
RIGHT };
|
|
|
|
explicit Mummy(const fkyaml::node& yaml);
|
|
|
|
// Hook d'IA. Donat un conjunt de direccions admissibles, decideix la
|
|
// següent direcció a prendre. La implementació de la base tria una
|
|
// aleatoria; si `allowed` està buit, retorna `NONE`.
|
|
virtual auto chooseDirection(const std::vector<Direction>& allowed) -> Direction;
|
|
|
|
// Contacte amb el jugador: publica `player_hit` amb el dany.
|
|
void onPlayerContact(Player* player) override;
|
|
};
|