#pragma once #include "libtcod.hpp" #include "Persistance.h" class Actor; class Ai : public Persistent { public: virtual void update(Actor* owner) = 0; virtual ~Ai() {}; static Ai* create(TCODZip& zip); protected: enum AiType { MONSTER, CONFUSED_MONSTER, PLAYER }; }; class PlayerAi : public Ai { public: void update(Actor* owner); void load(TCODZip& zip); void save(TCODZip& zip); int xpLevel; PlayerAi(); int getNextLevelXp(); protected: bool moveOrAttack(Actor* owner, int targetx, int targety); void handleActionKey(Actor* owner, int sdlkey, int mod); Actor* choseFromInventory(Actor* owner); }; class MonsterAi : public Ai { public: void update(Actor* owner); void load(TCODZip& zip); void save(TCODZip& zip); protected: int moveCount; void moveOrAttack(Actor* owner, int targetx, int targety); }; class ConfusedMonsterAi : public Ai { public: ConfusedMonsterAi(int nbTurns, Ai* oldAi); void update(Actor* owner); void load(TCODZip& zip); void save(TCODZip& zip); protected: int nbTurns; Ai* oldAi; };