51 lines
1.3 KiB
C++
51 lines
1.3 KiB
C++
#include "Pickable.h"
|
|
#include "Actor.h"
|
|
#include "Engine.h"
|
|
#include "Container.h"
|
|
#include "Gui.h"
|
|
#include "Healer.h"
|
|
#include "LightningBolt.h"
|
|
#include "Confuser.h"
|
|
#include "Fireball.h"
|
|
|
|
|
|
bool Pickable::pick(Actor* owner, Actor* wearer) {
|
|
if (wearer->container && wearer->container->add(owner)) {
|
|
engine->actors.remove(owner);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool Pickable::use(Actor* owner, Actor* wearer) {
|
|
if (wearer->container) {
|
|
wearer->container->remove(owner);
|
|
delete owner;
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void Pickable::drop(Actor* owner, Actor* wearer) {
|
|
if (wearer->container) {
|
|
wearer->container->remove(owner);
|
|
engine->actors.push(owner);
|
|
owner->x = wearer->x;
|
|
owner->y = wearer->y;
|
|
engine->gui->message(engine->gui->lightGrey, "%s drops a %s.",
|
|
wearer->name.c_str(), owner->name.c_str());
|
|
}
|
|
}
|
|
|
|
Pickable* Pickable::create(TCODZip& zip) {
|
|
PickableType type = (PickableType)zip.getInt();
|
|
Pickable* pickable = NULL;
|
|
switch (type) {
|
|
case HEALER: pickable = new Healer(0); break;
|
|
case LIGHTNING_BOLT: pickable = new LightningBolt(0, 0); break;
|
|
case CONFUSER: pickable = new Confuser(0, 0); break;
|
|
case FIREBALL: pickable = new Fireball(0, 0); break;
|
|
}
|
|
pickable->load(zip);
|
|
return pickable;
|
|
} |