// $Id$
//
// SuperTux
-// Copyright (C) 2004 Ingo Ruhnke <grumbel@gmx.de>
-// Copyright (C) 2006 Christoph Sommer <christoph.sommer@2006.expires.deltadevelopment.de>
+// Copyright (C) 2006 Matthias Braun <matze@braunis.de>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
lisp->get("x", pos.x);
lisp->get("y", pos.y);
lisp->get("change-on-touch", change_on_touch);
-
+
std::string spritefile = "";
lisp->get("sprite", spritefile);
sprite.reset(sprite_manager->create(spritefile));
lisp->get("stay-action", stay_action);
lisp->get("initial-stay-action", in_stay_action);
+
+ lisp->get("stay-group", stay_group);
+
+ all_sprite_changes.push_back(this);
}
SpriteChange::~SpriteChange()
{
+ all_sprite_changes.remove(this);
}
void
{
if(in_stay_action && stay_action != "") {
sprite->set_action(stay_action);
- sprite->draw(context, pos * 32 + Vector(16, 16), LAYER_OBJECTS-1);
+ sprite->draw(context, pos * 32, LAYER_OBJECTS-1);
}
}
{
}
+void
+SpriteChange::set_stay_action()
+{
+ in_stay_action = true;
+}
+
+void
+SpriteChange::clear_stay_action()
+{
+ in_stay_action = false;
+
+ // if we are in a stay_group, also clear all stay actions in this group
+ if (stay_group != "") {
+ for (std::list<SpriteChange*>::iterator i = all_sprite_changes.begin(); i != all_sprite_changes.end(); i++) {
+ SpriteChange* sc = *i;
+ if (sc->stay_group != stay_group) continue;
+ sc->in_stay_action = false;
+ }
+ }
+}
+
+std::list<SpriteChange*> SpriteChange::all_sprite_changes;
+
}