summaryrefslogtreecommitdiff
path: root/src/mapcomposite.h
diff options
context:
space:
mode:
authorGuillaume Melquiond <guillaume.melquiond@gmail.com>2006-09-02 18:29:30 +0000
committerGuillaume Melquiond <guillaume.melquiond@gmail.com>2006-09-02 18:29:30 +0000
commit8fe0239f5a369b63c43345e5078a52dbbe98dd9d (patch)
tree86004c0e453a8aa5b3f3ae8ee84e0aa57d67f309 /src/mapcomposite.h
parentc5b2f8c8f4794b87018f94a0cdb369d8668c6aa0 (diff)
downloadmanaserv-8fe0239f5a369b63c43345e5078a52dbbe98dd9d.tar.gz
manaserv-8fe0239f5a369b63c43345e5078a52dbbe98dd9d.tar.bz2
manaserv-8fe0239f5a369b63c43345e5078a52dbbe98dd9d.tar.xz
manaserv-8fe0239f5a369b63c43345e5078a52dbbe98dd9d.zip
Implemented unique public IDs.
Diffstat (limited to 'src/mapcomposite.h')
-rw-r--r--src/mapcomposite.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/src/mapcomposite.h b/src/mapcomposite.h
new file mode 100644
index 00000000..a6b8b40b
--- /dev/null
+++ b/src/mapcomposite.h
@@ -0,0 +1,97 @@
+/*
+ * The Mana World Server
+ * Copyright 2006 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * The Mana World is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * The Mana World is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with The Mana World; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id: $
+ */
+
+#ifndef _TMW_SERVER_MAPCOMPOSITE_
+#define _TMW_SERVER_MAPCOMPOSITE_
+
+#include "object.h"
+
+class Player;
+class Map;
+
+/**
+ * Pool of MovingObject.
+ */
+struct ObjectBucket
+{
+ unsigned bitmap[256 / sizeof(unsigned)]; /**< Bitmap of free locations. */
+ short free; /**< Number of empty places. */
+ short next_object; /**< Next object to look at. */
+ MovingObject *objects[256];
+
+ ObjectBucket();
+ int allocate();
+ void deallocate(int);
+};
+
+/**
+ * Combined map/entity structure.
+ */
+class MapComposite {
+
+ public:
+ MapComposite();
+ ~MapComposite();
+
+ /**
+ * Actual map.
+ */
+ Map *map;
+
+ /**
+ * Objects (items, players, monsters, etc) located on the map.
+ */
+ Objects objects;
+
+ /**
+ * Players located on the map. Already owned by the objects field.
+ */
+ std::vector< Player * > players;
+
+ /**
+ * Allocates a unique ID for a moving object on this map.
+ */
+ void allocate(MovingObject *);
+
+ /**
+ * Deallocates an ID.
+ */
+ void deallocate(MovingObject *);
+
+ /**
+ * Gets an object given its ID.
+ */
+ MovingObject *getObjectByID(int) const;
+
+ private:
+ MapComposite(MapComposite const &);
+
+ /**
+ * Buckets of MovingObject located on the map, referenced by ID.
+ */
+ ObjectBucket *buckets[256];
+
+ int last_bucket; /**< Last bucket acted upon. */
+};
+
+#endif