summaryrefslogtreecommitdiff
path: root/src/state.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/state.cpp')
-rw-r--r--src/state.cpp53
1 files changed, 46 insertions, 7 deletions
diff --git a/src/state.cpp b/src/state.cpp
index 919f1817..ec027531 100644
--- a/src/state.cpp
+++ b/src/state.cpp
@@ -25,10 +25,22 @@
#include <iostream>
#include "messageout.h"
#include "utils/logger.h"
+#include "mapreader.h"
namespace tmwserv
{
+State::State() throw() {
+}
+
+State::~State() throw() {
+ for (std::map<std::string, MapComposite>::iterator i = maps.begin();
+ i != maps.end();
+ i++) {
+ delete i->second.map;
+ }
+}
+
void State::update(ConnectionHandler &connectionHandler)
{
// update game state (update AI, etc.)
@@ -71,11 +83,13 @@ void State::update(ConnectionHandler &connectionHandler)
}
void State::addBeing(Being *being, const std::string &map) {
- if (!mapExists(map))
- return;
+ if (!beingExists(being)) {
+ if (!mapExists(map))
+ if (!loadMap(map))
+ return;
- if (!beingExists(being))
maps[map].beings.push_back(tmwserv::BeingPtr(being));
+ }
}
void State::removeBeing(Being *being) {
@@ -114,17 +128,42 @@ bool State::beingExists(Being *being) {
return false;
}
-void State::loadMap(const std::string &map) {
- // load map
+bool State::loadMap(const std::string &map) {
+ // load map (FAILS)
+ Map *tmp = NULL; //MapReader::readMap("maps/" + map);
+ //if (!tmp)
+ // return false;
+
maps[map] = MapComposite();
+ maps[map].map = tmp;
+
+ // will need to load extra map related resources here also
+
+ return true;
}
void State::addObject(Object *object, const std::string &map) {
- //
+ if (!objectExists(object)) {
+ if (!mapExists(map))
+ if (!loadMap(map))
+ return;
+ maps[map].objects.push_back(object);
+ }
}
void State::removeObject(Object *object) {
- //
+ for (std::map<std::string, MapComposite>::iterator i = maps.begin();
+ i != maps.end();
+ i++) {
+ for (std::vector<Object*>::iterator b = i->second.objects.begin();
+ b != i->second.objects.end();
+ b++) {
+ if (*b == object) {
+ i->second.objects.erase(b);
+ return;
+ }
+ }
+ }
}
bool State::objectExists(Object *object) {