summaryrefslogtreecommitdiffstats
path: root/src/game-server/mapcomposite.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game-server/mapcomposite.cpp')
-rw-r--r--src/game-server/mapcomposite.cpp63
1 files changed, 50 insertions, 13 deletions
diff --git a/src/game-server/mapcomposite.cpp b/src/game-server/mapcomposite.cpp
index a1e4781..d684fd7 100644
--- a/src/game-server/mapcomposite.cpp
+++ b/src/game-server/mapcomposite.cpp
@@ -460,8 +460,9 @@ Script::Ref MapComposite::mInitializeCallback;
Script::Ref MapComposite::mUpdateCallback;
MapComposite::MapComposite(int id, const std::string &name):
- mMap(NULL),
- mContent(NULL),
+ mActive(false),
+ mMap(0),
+ mContent(0),
mName(name),
mID(id)
{
@@ -473,13 +474,18 @@ MapComposite::~MapComposite()
delete mContent;
}
-bool MapComposite::activate()
+bool MapComposite::readMap()
{
- assert(!isActive());
-
std::string file = "maps/" + mName + ".tmx";
mMap = MapReader::readMap(file);
+ return mMap;
+}
+
+bool MapComposite::activate()
+{
+ assert(!isActive());
+
if (!mMap)
return false;
@@ -506,6 +512,8 @@ bool MapComposite::activate()
s->execute();
}
+ mActive = true;
+
return true;
}
@@ -728,7 +736,7 @@ void MapComposite::initializeContent()
{
mContent = new MapContent(mMap);
- const std::vector<MapObject*> &objects = mMap->getObjects();
+ const std::vector<MapObject *> &objects = mMap->getObjects();
for (size_t i = 0; i < objects.size(); ++i)
{
@@ -738,20 +746,49 @@ void MapComposite::initializeContent()
if (utils::compareStrI(type, "WARP") == 0)
{
std::string destMapName = object->getProperty("DEST_MAP");
- int destX = utils::stringToInt(object->getProperty("DEST_X"));
- int destY = utils::stringToInt(object->getProperty("DEST_Y"));
+ std::string destMapObjectName = object->getProperty("DEST_NAME");
- if (!destMapName.empty() && destX && destY)
+ MapComposite *destMap = MapManager::getMap(destMapName);
+ int destX = 0;
+ int destY = 0;
+
+ if (destMap && !destMapObjectName.empty())
{
- if (MapComposite *destMap = MapManager::getMap(destMapName))
+ const std::vector<MapObject *> &destObjects =
+ destMap->getMap()->getObjects();
+
+ std::vector<MapObject *>::const_iterator it, it_end;
+ for (it = destObjects.begin(), it_end = destObjects.end();
+ it != it_end; ++it)
{
- WarpAction *action = new WarpAction(destMap, destX, destY);
- insert(new TriggerArea(this, object->getBounds(),
- action, false));
+ const MapObject *destObject = *it;
+ if (utils::compareStrI(destObject->getType(),
+ "WARP_DEST") == 0 &&
+ utils::compareStrI(destObject->getName(),
+ destMapObjectName) == 0)
+ {
+ const Rectangle &rect = destObject->getBounds();
+ destX = rect.x + rect.w / 2;
+ destY = rect.y + rect.h / 2;
+ break;
+ }
}
}
else
{
+ destX = utils::stringToInt(object->getProperty("DEST_X"));
+ destY = utils::stringToInt(object->getProperty("DEST_Y"));
+ }
+
+
+ if (destMap && destX && destY)
+ {
+ WarpAction *action = new WarpAction(destMap, destX, destY);
+ insert(new TriggerArea(this, object->getBounds(),
+ action, false));
+ }
+ else
+ {
LOG_WARN("Unrecognized warp format");
}
}