#ifndef SUPERTUX_TRIGGER_BASE_H
#define SUPERTUX_TRIGGER_BASE_H
+#include <list>
#include "moving_object.hpp"
#include "math/rect.hpp"
#include "sprite/sprite.hpp"
+#include "object_remove_listener.hpp"
class Player;
/** This class is the base class for all objects you can interact with in some
* way. There are several interaction types defined like touch and activate
*/
-class TriggerBase : public MovingObject
+class TriggerBase : public MovingObject, public ObjectRemoveListener
{
public:
enum EventType {
- EVENT_TOUCH, EVENT_ACTIVATE
+ EVENT_TOUCH, /**< Object came into contact */
+ EVENT_LOSETOUCH, /**< Lost contact with object */
+ EVENT_ACTIVATE /**< Action button pressed */
};
-
+
TriggerBase();
~TriggerBase();
void update(float elapsed_time);
void draw(DrawingContext& context);
HitResponse collision(GameObject& other, const CollisionHit& hit);
-
+
/**
* Receive trigger events
*/
virtual void event(Player& player, EventType type) = 0;
+
+ /**
+ * Called by GameObject destructor of an object in losetouch_listeners
+ */
+ virtual void object_removed(GameObject* object);
private:
Sprite* sprite;
bool lasthit;
bool hit;
+
+ std::list<Player*> losetouch_listeners; /**< Players that will be informed when we lose touch with them */
};
#endif /*SUPERTUX_INTERACTIVE_OBJECT_H*/
-