lightsprite = sprite_manager->create("images/objects/lightmap_light/lightmap_light.sprite");
lightsprite->set_blend(Blend(GL_SRC_ALPHA, GL_ONE));
updateColor();
+ sound_manager->preload("sounds/willocatch.wav");
+}
+
+Lantern::Lantern(const Vector& pos)
+ : Rock(pos, "images/objects/lantern/lantern.sprite"),
+ lightcolor(0.0f, 0.0f, 0.0f)
+{
+ lightsprite = sprite_manager->create("images/objects/lightmap_light/lightmap_light.sprite");
+ lightsprite->set_blend(Blend(GL_SRC_ALPHA, GL_ONE));
+ updateColor();
+ sound_manager->preload("sounds/willocatch.wav");
}
Lantern::~Lantern()
}
HitResponse Lantern::collision(GameObject& other, const CollisionHit& hit) {
- if ((grabbed) && lightcolor.red == 0 && lightcolor.green == 0 && lightcolor.blue == 0){
+ if (is_open()) {
WillOWisp* wow = dynamic_cast<WillOWisp*>(&other);
if (wow) {
// collided with WillOWisp while grabbed and unlit
+ sound_manager->play("sounds/willocatch.wav");
lightcolor = Color(0,1,0);
updateColor();
wow->vanish();
TreeWillOWisp* twow = dynamic_cast<TreeWillOWisp*>(&other);
if (twow) {
// collided with TreeWillOWisp while grabbed and unlit
+ sound_manager->play("sounds/willocatch.wav");
lightcolor = twow->get_color();
updateColor();
twow->vanish();
Rock::grab(object, pos, dir);
// if lantern is not lit, draw it as opened
- if(lightcolor.red == 0 && lightcolor.green == 0 && lightcolor.blue == 0){
+ if (is_open()) {
sprite->set_action("off-open");
}
void
Lantern::ungrab(MovingObject& object, Direction dir)
{
- Rock::ungrab(object, dir);
-
// if lantern is not lit, it was drawn as opened while grabbed. Now draw it as closed again
- if(lightcolor.red == 0 && lightcolor.green == 0 && lightcolor.blue == 0){
+ if (is_open()) {
sprite->set_action("off");
}
+
+ Rock::ungrab(object, dir);
+}
+
+bool
+Lantern::is_open()
+{
+ return ((grabbed) && lightcolor.red == 0 && lightcolor.green == 0 && lightcolor.blue == 0);
}
IMPLEMENT_FACTORY(Lantern, "lantern");