diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs index 47874398f..17269f919 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs @@ -28,6 +28,9 @@ namespace Barotrauma { public static List CharacterList = new List(); + public static int CharacterUpdateInterval = 1; + private static int characterUpdateTick = 1; + partial void UpdateLimbLightSource(Limb limb); private bool enabled = true; @@ -2667,9 +2670,23 @@ namespace Barotrauma } } - for (int i = 0; i < CharacterList.Count; i++) + characterUpdateTick++; + + if (characterUpdateTick % CharacterUpdateInterval == 0) { - CharacterList[i].Update(deltaTime, cam); + for (int i = 0; i < CharacterList.Count; i++) + { + if (GameMain.Lua.game.updatePriorityCharacters.Contains(CharacterList[i])) continue; + + CharacterList[i].Update(deltaTime * CharacterUpdateInterval, cam); + } + } + + foreach (Character character in GameMain.Lua.game.updatePriorityCharacters) + { + if (character.Removed) continue; + + character.Update(deltaTime, cam); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses/LuaGame.cs b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses/LuaGame.cs index b197f41c2..10e2cd882 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses/LuaGame.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses/LuaGame.cs @@ -62,7 +62,14 @@ namespace Barotrauma set { MapEntity.GapUpdateInterval = value; } } + public int characterUpdateInterval + { + get { return Character.CharacterUpdateInterval; } + set { Character.CharacterUpdateInterval = value; } + } + public HashSet updatePriorityItems = new HashSet(); + public HashSet updatePriorityCharacters = new HashSet(); public void AddPriorityItem(Item item) { @@ -79,6 +86,21 @@ namespace Barotrauma updatePriorityItems.Clear(); } + public void AddPriorityCharacter(Character character) + { + updatePriorityCharacters.Add(character); + } + + public void RemovePriorityCharacter(Character character) + { + updatePriorityCharacters.Remove(character); + } + + public void ClearPriorityCharacter() + { + updatePriorityCharacters.Clear(); + } + public bool RoundStarted { @@ -476,6 +498,7 @@ namespace Barotrauma { mapEntityUpdateInterval = 1; gapUpdateInterval = 4; + characterUpdateInterval = 1; foreach (var cmd in luaAddedCommand) {