diff --git a/Subsurface/Source/Characters/AI/EnemyAIController.cs b/Subsurface/Source/Characters/AI/EnemyAIController.cs index d38ed38ca..ac2fd83c7 100644 --- a/Subsurface/Source/Characters/AI/EnemyAIController.cs +++ b/Subsurface/Source/Characters/AI/EnemyAIController.cs @@ -196,23 +196,23 @@ namespace Barotrauma private void UpdateAttack(float deltaTime) { - if (selectedAiTarget == null) + if (selectedAiTarget == null || selectedAiTarget.Entity == null || selectedAiTarget.Entity.Removed) { state = AiState.None; return; } - + selectedTargetMemory.Priority -= deltaTime; - - Vector2 attackSimPosition = Character.Submarine==null ? ConvertUnits.ToSimUnits(selectedAiTarget.WorldPosition) : selectedAiTarget.SimPosition; + + Vector2 attackSimPosition = Character.Submarine == null ? ConvertUnits.ToSimUnits(selectedAiTarget.WorldPosition) : selectedAiTarget.SimPosition; if (wallAttackPos != Vector2.Zero && targetEntity != null) { attackSimPosition = wallAttackPos; - if (selectedAiTarget.Entity != null && Character.Submarine==null && selectedAiTarget.Entity.Submarine != null) attackSimPosition += ConvertUnits.ToSimUnits(selectedAiTarget.Entity.Submarine.Position); + if (selectedAiTarget.Entity != null && Character.Submarine == null && selectedAiTarget.Entity.Submarine != null) attackSimPosition += ConvertUnits.ToSimUnits(selectedAiTarget.Entity.Submarine.Position); } - if (coolDownTimer>0.0f) + if (coolDownTimer > 0.0f) { UpdateCoolDown(attackSimPosition, deltaTime); return; diff --git a/Subsurface/Source/Characters/AICharacter.cs b/Subsurface/Source/Characters/AICharacter.cs index e95d72a76..03541a015 100644 --- a/Subsurface/Source/Characters/AICharacter.cs +++ b/Subsurface/Source/Characters/AICharacter.cs @@ -1,11 +1,5 @@ -using Lidgren.Network; -using Microsoft.Xna.Framework; -using Barotrauma.Networking; +using Microsoft.Xna.Framework; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using FarseerPhysics; namespace Barotrauma { diff --git a/Subsurface/Source/Characters/Character.cs b/Subsurface/Source/Characters/Character.cs index 9d3acbeeb..58fa6faeb 100644 --- a/Subsurface/Source/Characters/Character.cs +++ b/Subsurface/Source/Characters/Character.cs @@ -1728,6 +1728,8 @@ namespace Barotrauma public AttackResult AddDamage(Vector2 worldPosition, DamageType damageType, float amount, float bleedingAmount, float stun, bool playSound, float attackForce = 0.0f) { + if (Removed) return new AttackResult(); + SetStun(stun); Limb closestLimb = null; diff --git a/Subsurface/Source/Map/Entity.cs b/Subsurface/Source/Map/Entity.cs index d811c6ab0..67696b105 100644 --- a/Subsurface/Source/Map/Entity.cs +++ b/Subsurface/Source/Map/Entity.cs @@ -16,9 +16,13 @@ namespace Barotrauma private ushort id; protected AITarget aiTarget; - //protected float soundRange; - //protected float sightRange; - + + public bool Removed + { + get; + private set; + } + public ushort ID { get @@ -125,6 +129,7 @@ namespace Barotrauma public virtual void Remove() { dictionary.Remove(ID); + Removed = true; } public static void DumpIds(int count)