00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "game-server/trigger.hpp"
00023
00024 #include "game-server/character.hpp"
00025 #include "game-server/mapcomposite.hpp"
00026 #include "game-server/actor.hpp"
00027 #include "game-server/state.hpp"
00028
00029 #include "utils/logger.h"
00030
00031 void WarpAction::process(Actor *obj)
00032 {
00033 if (obj->getType() == OBJECT_CHARACTER)
00034 {
00035 GameState::enqueueWarp(static_cast< Character * >(obj), mMap, mX, mY);
00036 }
00037 }
00038
00039 void ScriptAction::process(Actor *obj)
00040 {
00041 LOG_DEBUG("Script trigger area activated: " << mFunction
00042 << "(" << obj << ", " << mArg << ")");
00043 if (!mScript || mFunction.empty())
00044 return;
00045 mScript->prepare(mFunction);
00046 mScript->push(obj);
00047 mScript->push(mArg);
00048 mScript->execute();
00049 }
00050
00051 void TriggerArea::update()
00052 {
00053 std::set<Actor*> insideNow;
00054 for (BeingIterator i(getMap()->getInsideRectangleIterator(mZone)); i; ++i)
00055 {
00056 if (mZone.contains((*i)->getPosition()))
00057 {
00058 insideNow.insert(*i);
00059
00060 if (!mOnce || mInside.find(*i) == mInside.end())
00061 {
00062 mAction->process(*i);
00063 }
00064 }
00065 }
00066 mInside.swap(insideNow);
00067 }