Core/Objects: implement internal heartbeat timer for WorldObjects

Port From (https://github.com/TrinityCore/TrinityCore/commit/bf9cd88cebf752ce8614fbac8a7c6d1f0de7fee8)
This commit is contained in:
Hondacrx
2024-08-19 11:41:31 -04:00
parent 5508d53db2
commit 676a6cf84a
2 changed files with 14 additions and 0 deletions
@@ -245,6 +245,7 @@ namespace Framework.Constants
public const float DefaultVisibilityInstance = 170.0f; // default visible distance in instances, 170 yards public const float DefaultVisibilityInstance = 170.0f; // default visible distance in instances, 170 yards
public const float DefaultVisibilityBGAreans = 533.0f; // default visible distance in BG/Arenas, roughly 533 yards public const float DefaultVisibilityBGAreans = 533.0f; // default visible distance in BG/Arenas, roughly 533 yards
public const int DefaultVisibilityNotifyPeriod = 1000; public const int DefaultVisibilityNotifyPeriod = 1000;
public static TimeSpan HeartbeatInterval = TimeSpan.FromSeconds(5.2);
public const int WorldTrigger = 12999; public const int WorldTrigger = 12999;
@@ -41,6 +41,8 @@ namespace Game.Entities
m_objectData = new ObjectFieldData(); m_objectData = new ObjectFieldData();
m_staticFloorZ = MapConst.VMAPInvalidHeightValue; m_staticFloorZ = MapConst.VMAPInvalidHeightValue;
_heartbeatTimer = SharedConst.HeartbeatInterval;
} }
public virtual void Dispose() public virtual void Dispose()
@@ -992,8 +994,17 @@ namespace Game.Entities
public virtual void Update(uint diff) public virtual void Update(uint diff)
{ {
m_Events.Update(diff); m_Events.Update(diff);
_heartbeatTimer -= TimeSpan.FromMilliseconds(diff);
while (_heartbeatTimer <= TimeSpan.Zero)
{
_heartbeatTimer += SharedConst.HeartbeatInterval;
Heartbeat();
}
} }
public virtual void Heartbeat() { }
public void SetIsStoredInWorldObjectGridContainer(bool on) public void SetIsStoredInWorldObjectGridContainer(bool on)
{ {
if (!IsInWorld) if (!IsInWorld)
@@ -3859,6 +3870,8 @@ namespace Game.Entities
SmoothPhasing _smoothPhasing; SmoothPhasing _smoothPhasing;
TimeSpan _heartbeatTimer;
public FlaggedArray32<StealthType> m_stealth = new(2); public FlaggedArray32<StealthType> m_stealth = new(2);
public FlaggedArray32<StealthType> m_stealthDetect = new(2); public FlaggedArray32<StealthType> m_stealthDetect = new(2);