aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Time/UpdateTime.h
diff options
context:
space:
mode:
authorxinef1 <w.szyszko2@gmail.com>2017-03-02 02:19:25 +0100
committerariel- <ariel-@users.noreply.github.com>2017-03-01 22:19:25 -0300
commit7567cafec84080d26ea513242a1f540a823b8f9d (patch)
treef6f37a7cc4d06db0dbb0e08a01f8a18cf47ac955 /src/server/game/Time/UpdateTime.h
parent7011aabb56f061fc889ec42ce32b7605ceb35b53 (diff)
Ensure that all actions are compared to fixed point in time (ie. world update start) (#18910)
- Actions will not be dependent on processing moment - Increased GameObjects cooldown resolution to milliseconds, fixes arming time of traps to be exactly one second and not something from range (1000, 1999) - Created GameTime namespace and UpdateTime class and moved there some code out of world
Diffstat (limited to 'src/server/game/Time/UpdateTime.h')
-rw-r--r--src/server/game/Time/UpdateTime.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/server/game/Time/UpdateTime.h b/src/server/game/Time/UpdateTime.h
new file mode 100644
index 00000000000..32ddf49c8a4
--- /dev/null
+++ b/src/server/game/Time/UpdateTime.h
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2008-2017 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program 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 (at your
+ * option) any later version.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __UPDATETIME_H
+#define __UPDATETIME_H
+
+#include "Define.h"
+
+#define AVG_DIFF_COUNT 500
+
+class TC_GAME_API UpdateTime
+{
+ using DiffTableArray = std::array<uint32, AVG_DIFF_COUNT>;
+
+ public:
+ uint32 GetAverageUpdateTime() const;
+ uint32 GetTimeWeightedAverageUpdateTime() const;
+ uint32 GetMaxUpdateTime() const;
+ uint32 GetMaxUpdateTimeOfCurrentTable() const;
+ uint32 GetLastUpdateTime() const;
+
+ void UpdateWithDiff(uint32 diff);
+
+ void RecordUpdateTimeReset();
+
+ protected:
+ UpdateTime();
+
+ void _RecordUpdateTimeDuration(std::string const& text, uint32 minUpdateTime);
+
+ private:
+ DiffTableArray _updateTimeDataTable;
+ uint32 _averageUpdateTime;
+ uint32 _totalUpdateTime;
+ uint32 _updateTimeTableIndex;
+ uint32 _maxUpdateTime;
+ uint32 _maxUpdateTimeOfLastTable;
+ uint32 _maxUpdateTimeOfCurrentTable;
+
+ uint32 _recordedTime;
+};
+
+class WorldUpdateTime : public UpdateTime
+{
+ public:
+ WorldUpdateTime() : UpdateTime(), _recordUpdateTimeInverval(0), _recordUpdateTimeMin(0), _lastRecordTime(0) { }
+ void LoadFromConfig();
+ void SetRecordUpdateTimeInterval(uint32 t);
+ void RecordUpdateTime(uint32 gameTimeMs, uint32 diff, uint32 sessionCount);
+ void RecordUpdateTimeDuration(std::string const& text);
+
+ private:
+ uint32 _recordUpdateTimeInverval;
+ uint32 _recordUpdateTimeMin;
+ uint32 _lastRecordTime;
+};
+
+TC_GAME_API extern WorldUpdateTime sWorldUpdateTime;
+
+#endif