From f31142b7540448f1116f90efa082f464fd08bda1 Mon Sep 17 00:00:00 2001 From: Evil Factory <36804725+evilfactory@users.noreply.github.com> Date: Thu, 24 Feb 2022 16:06:08 -0300 Subject: [PATCH] Fix Map Entity Updates --- .../SharedSource/Lua/LuaClasses.cs | 13 ++++- .../SharedSource/Map/MapEntity.cs | 52 +++++++++++++------ 2 files changed, 48 insertions(+), 17 deletions(-) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs index 7d476bda6..ba52d9363 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs @@ -134,7 +134,18 @@ namespace Barotrauma public bool disableDisconnectCharacter = false; public bool enableControlHusk = false; - public int mapEntityUpdateRate = 1; + public int mapEntityUpdateInterval + { + get { return MapEntity.MapEntityUpdateInterval; } + set { MapEntity.MapEntityUpdateInterval = value; } + } + + public int gapUpdateInterval + { + get { return MapEntity.GapUpdateInterval; } + set { MapEntity.GapUpdateInterval = value; } + } + public HashSet updatePriorityItems = new HashSet(); public void AddPriorityItem(Item item) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/MapEntity.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/MapEntity.cs index e1abb2329..982bdf6f0 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/MapEntity.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/MapEntity.cs @@ -19,8 +19,9 @@ namespace Barotrauma protected List linkedToID; public List unresolvedLinkedToID; - private const int GapUpdateInterval = 4; - private static int gapUpdateTimer; + public static int MapEntityUpdateInterval = 1; + public static int GapUpdateInterval = 4; + private static int mapEntityUpdateTick; /// /// List of upgrades this item has @@ -560,42 +561,61 @@ namespace Barotrauma /// public static void UpdateAll(float deltaTime, Camera cam) { - foreach (Hull hull in Hull.hullList) + mapEntityUpdateTick++; + + if (mapEntityUpdateTick % MapEntityUpdateInterval == 0) { - hull.Update(deltaTime, cam); - } + + foreach (Hull hull in Hull.hullList) + { + hull.Update(deltaTime * MapEntityUpdateInterval, cam); + } #if CLIENT - Hull.UpdateCheats(deltaTime, cam); + Hull.UpdateCheats(deltaTime * MapEntityUpdateInterval, cam); #endif - foreach (Structure structure in Structure.WallList) - { - structure.Update(deltaTime, cam); + foreach (Structure structure in Structure.WallList) + { + structure.Update(deltaTime * MapEntityUpdateInterval, cam); + } } //update gaps in random order, because otherwise in rooms with multiple gaps //the water/air will always tend to flow through the first gap in the list, //which may lead to weird behavior like water draining down only through //one gap in a room even if there are several - gapUpdateTimer++; - if (gapUpdateTimer >= GapUpdateInterval) + if (mapEntityUpdateTick % GapUpdateInterval == 0) { foreach (Gap gap in Gap.GapList.OrderBy(g => Rand.Int(int.MaxValue))) { gap.Update(deltaTime * GapUpdateInterval, cam); } - gapUpdateTimer = 0; } - Powered.UpdatePower(deltaTime); - foreach (Item item in Item.ItemList) + if (mapEntityUpdateTick % MapEntityUpdateInterval == 0) { + Powered.UpdatePower(deltaTime * MapEntityUpdateInterval); + foreach (Item item in Item.ItemList) + { + if (GameMain.Lua.game.updatePriorityItems.Contains(item)) continue; + item.Update(deltaTime * MapEntityUpdateInterval, cam); + } + } + + foreach (var item in GameMain.Lua.game.updatePriorityItems) + { + if (item.Removed) continue; + item.Update(deltaTime, cam); } - UpdateAllProjSpecific(deltaTime); + if (mapEntityUpdateTick % MapEntityUpdateInterval == 0) + { - Spawner?.Update(); + UpdateAllProjSpecific(deltaTime * MapEntityUpdateInterval); + + Spawner?.Update(); + } } static partial void UpdateAllProjSpecific(float deltaTime);