00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _TMWSERV_TRIGGER
00023 #define _TMWSERV_TRIGGER
00024
00025 #include "point.h"
00026 #include "game-server/thing.hpp"
00027 #include "scripting/script.hpp"
00028
00029 class Actor;
00030
00031 class TriggerAction
00032 {
00033 public:
00034 virtual ~TriggerAction() {}
00035 virtual void process(Actor *obj) = 0;
00036 };
00037
00038 class WarpAction : public TriggerAction
00039 {
00040 public:
00041 WarpAction(MapComposite *m, int x, int y)
00042 : mMap(m), mX(x), mY(y) {}
00043
00044 virtual void process(Actor *obj);
00045
00046 private:
00047 MapComposite *mMap;
00048 unsigned short mX, mY;
00049 };
00050
00051 class ScriptAction : public TriggerAction
00052 {
00053 public:
00054 ScriptAction(Script *script, const std::string &function, int arg)
00055 : mScript(script), mFunction(function), mArg(arg) {}
00056
00057 virtual void process(Actor *obj);
00058
00059 private:
00060 Script *mScript;
00061 std::string mFunction;
00062 int mArg;
00063 };
00064
00065 class TriggerArea : public Thing
00066 {
00067 public:
00071 TriggerArea(MapComposite *m, const Rectangle &r, TriggerAction *ptr, bool once)
00072 : Thing(OBJECT_OTHER, m), mZone(r), mAction(ptr), mOnce(once) {}
00073
00074 virtual void update();
00075
00076 private:
00077 Rectangle mZone;
00078 TriggerAction *mAction;
00079 bool mOnce;
00080 std::set<Actor *> mInside;
00081 };
00082
00083 #endif