summaryrefslogtreecommitdiff
path: root/src/game-server/state.cpp
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <thorbjorn@lindeijer.nl>2012-03-27 00:18:31 +0200
committerThorbjørn Lindeijer <thorbjorn@lindeijer.nl>2012-04-14 12:21:58 +0200
commit387a04cf3c38e19fd8050e39d0f219e5f07257fd (patch)
tree0dbdeb2679a5c58303b6e48766bee7fa4520a174 /src/game-server/state.cpp
parentdcd66debbe519403d3b8f7bf30313fbdee71fe6c (diff)
downloadmanaserv-387a04cf3c38e19fd8050e39d0f219e5f07257fd.tar.gz
manaserv-387a04cf3c38e19fd8050e39d0f219e5f07257fd.tar.bz2
manaserv-387a04cf3c38e19fd8050e39d0f219e5f07257fd.tar.xz
manaserv-387a04cf3c38e19fd8050e39d0f219e5f07257fd.zip
Introduced a Timeout class for counting down without counting
The timeout remembers a reference point of time against which it can check how much time is remaining. Reviewed-by: Erik Schilling Reviewed-by: Yohann Ferreira
Diffstat (limited to 'src/game-server/state.cpp')
-rw-r--r--src/game-server/state.cpp28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/game-server/state.cpp b/src/game-server/state.cpp
index 843bfadb..249040a8 100644
--- a/src/game-server/state.cpp
+++ b/src/game-server/state.cpp
@@ -18,8 +18,6 @@
* along with The Mana Server. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <cassert>
-
#include "game-server/state.h"
#include "common/configuration.h"
@@ -42,6 +40,8 @@
#include "utils/point.h"
#include "utils/speedconv.h"
+#include <cassert>
+
enum
{
EVENT_REMOVE = 0,
@@ -61,6 +61,11 @@ struct DelayedEvent
typedef std::map< Actor *, DelayedEvent > DelayedEvents;
/**
+ * The current world time in ticks since server start.
+ */
+static int currentTick;
+
+/**
* List of delayed events.
*/
static DelayedEvents delayedEvents;
@@ -123,7 +128,7 @@ static void serializeLooks(Character *ch, MessageOut &msg)
/**
* Informs a player of what happened around the character.
*/
-static void informPlayer(MapComposite *map, Character *p, int worldTime)
+static void informPlayer(MapComposite *map, Character *p)
{
MessageOut moveMsg(GPMSG_BEINGS_MOVE);
MessageOut damageMsg(GPMSG_BEINGS_DAMAGE);
@@ -273,7 +278,7 @@ static void informPlayer(MapComposite *map, Character *p, int worldTime)
if (opos != oold)
{
// Add position check coords every 5 seconds.
- if (worldTime % 50 == 0)
+ if (currentTick % 50 == 0)
flags |= MOVING_POSITION;
flags |= MOVING_DESTINATION;
@@ -411,11 +416,13 @@ static void informPlayer(MapComposite *map, Character *p, int worldTime)
static bool dbgLockObjects;
#endif
-void GameState::update(int worldTime)
+void GameState::update(int tick)
{
-# ifndef NDEBUG
+ currentTick = tick;
+
+#ifndef NDEBUG
dbgLockObjects = true;
-# endif
+#endif
ScriptManager::currentState()->update();
@@ -432,7 +439,7 @@ void GameState::update(int worldTime)
for (CharacterIterator p(map->getWholeMapIterator()); p; ++p)
{
- informPlayer(map, *p, worldTime);
+ informPlayer(map, *p);
}
for (ActorIterator it(map->getWholeMapIterator()); it; ++it)
@@ -573,6 +580,11 @@ bool GameState::insert(Entity *ptr)
return true;
}
+int GameState::getCurrentTick()
+{
+ return currentTick;
+}
+
bool GameState::insertOrDelete(Entity *ptr)
{
if (insert(ptr)) return true;