59 lines
1.3 KiB
C++
59 lines
1.3 KiB
C++
class TargetSelector : public Persistent {
|
|
public:
|
|
enum SelectorType {
|
|
CLOSEST_MONSTER,
|
|
SELECTED_MONSTER,
|
|
WEARER_RANGE,
|
|
SELECTED_RANGE
|
|
};
|
|
TargetSelector(SelectorType type, float range);
|
|
void selectTargets(Actor *wearer, TCODList<Actor *>& list);
|
|
void save(TCODZip &zip);
|
|
void load(TCODZip &zip);
|
|
|
|
protected:
|
|
SelectorType type;
|
|
float range;
|
|
};
|
|
|
|
class Effect /*: public Persistent */{
|
|
public:
|
|
virtual bool applyTo(Actor *actor) = 0;
|
|
// void save(TCODZip &zip);
|
|
// void load(TCODZip &zip);
|
|
};
|
|
|
|
class Pickable : public Persistent {
|
|
public:
|
|
Pickable(TargetSelector *selector, Effect *effect);
|
|
virtual ~Pickable();
|
|
bool pick(Actor *owner, Actor *wearer);
|
|
void drop(Actor *owner, Actor *wearer);
|
|
bool use(Actor *owner, Actor *wearer);
|
|
static Pickable *create(TCODZip &zip);
|
|
void save(TCODZip &zip);
|
|
void load(TCODZip &zip);
|
|
|
|
protected:
|
|
TargetSelector *selector;
|
|
Effect *effect;
|
|
};
|
|
|
|
/* Effects */
|
|
class HealthEffect : public Effect {
|
|
public:
|
|
float amount;
|
|
const char *message;
|
|
HealthEffect(float amount, const char *message);
|
|
bool applyTo(Actor *actor);
|
|
};
|
|
|
|
class AiChangeEffect : public Effect {
|
|
public:
|
|
TemporaryAi *newAi;
|
|
const char *message;
|
|
|
|
AiChangeEffect(TemporaryAi *newAi, const char *message);
|
|
bool applyTo(Actor *actor);
|
|
};
|