52 lines
1.1 KiB
C++
52 lines
1.1 KiB
C++
#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;
|
|
}; |