79 lines
1.6 KiB
C++
79 lines
1.6 KiB
C++
class TargetSelector {
|
|
public:
|
|
enum SelectorType {
|
|
CLOSEST_MONSTER,
|
|
SELECTED_MONSTER,
|
|
WEARER_RANGE,
|
|
SELECTED_RANGE
|
|
};
|
|
TargetSelector(SelectorType type, float range);
|
|
void selectTargets(Actor *wearer, TCODList<Actor *>& list);
|
|
protected:
|
|
SelectorType type;
|
|
float range;
|
|
};
|
|
|
|
class Effect {
|
|
public:
|
|
virtual bool applyTo(Actor *actor) = 0;
|
|
};
|
|
|
|
class Pickable : public Persistent {
|
|
public:
|
|
bool pick(Actor *owner, Actor *wearer);
|
|
void drop(Actor *owner, Actor *wearer);
|
|
virtual bool use(Actor *owner, Actor *wearer);
|
|
static Pickable *create(TCODZip &zip);
|
|
protected:
|
|
enum PickableType {
|
|
HEALER, LIGHTNING_BOLT, CONFUSER, FIREBALL
|
|
};
|
|
};
|
|
|
|
/* Sub-Pickables */
|
|
class Healer : public Pickable {
|
|
public:
|
|
float amount; // how much?
|
|
Healer(float amount);
|
|
bool use(Actor *owner, Actor *wearer);
|
|
void load(TCODZip &zip);
|
|
void save(TCODZip &zip);
|
|
};
|
|
|
|
/* Aggro Spells */
|
|
class LightningBolt: public Pickable {
|
|
public:
|
|
float range, damage;
|
|
LightningBolt(float range, float damage);
|
|
bool use(Actor *owner, Actor *wearer);
|
|
void load(TCODZip &zip);
|
|
void save(TCODZip &zip);
|
|
};
|
|
|
|
class Fireball : public LightningBolt {
|
|
public:
|
|
Fireball(float range, float damage);
|
|
bool use(Actor *owner, Actor *wearer);
|
|
void save(TCODZip &zip);
|
|
};
|
|
|
|
class Confuser : public Pickable {
|
|
public:
|
|
int nbTurns;
|
|
float range;
|
|
Confuser(int nbTurns, float range);
|
|
bool use(Actor *owner, Actor *wearer);
|
|
void load(TCODZip &zip);
|
|
void save(TCODZip &zip);
|
|
};
|
|
|
|
/* Effects */
|
|
class HealthEffect : public Effect {
|
|
public:
|
|
float amount;
|
|
const char *message;
|
|
HealthEffect(float amount, const char *message);
|
|
bool applyTo(Actor *actor);
|
|
};
|
|
|