Fixed exceptions if a character is removed when an AI character is attacking it

This commit is contained in:
Regalis
2017-04-17 17:59:22 +03:00
parent b24f0877a1
commit 7df4bff249
4 changed files with 17 additions and 16 deletions
@@ -196,23 +196,23 @@ namespace Barotrauma
private void UpdateAttack(float deltaTime) private void UpdateAttack(float deltaTime)
{ {
if (selectedAiTarget == null) if (selectedAiTarget == null || selectedAiTarget.Entity == null || selectedAiTarget.Entity.Removed)
{ {
state = AiState.None; state = AiState.None;
return; return;
} }
selectedTargetMemory.Priority -= deltaTime; 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) if (wallAttackPos != Vector2.Zero && targetEntity != null)
{ {
attackSimPosition = wallAttackPos; 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); UpdateCoolDown(attackSimPosition, deltaTime);
return; return;
+1 -7
View File
@@ -1,11 +1,5 @@
using Lidgren.Network; using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework;
using Barotrauma.Networking;
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FarseerPhysics;
namespace Barotrauma namespace Barotrauma
{ {
@@ -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) 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); SetStun(stun);
Limb closestLimb = null; Limb closestLimb = null;
+8 -3
View File
@@ -16,9 +16,13 @@ namespace Barotrauma
private ushort id; private ushort id;
protected AITarget aiTarget; protected AITarget aiTarget;
//protected float soundRange;
//protected float sightRange; public bool Removed
{
get;
private set;
}
public ushort ID public ushort ID
{ {
get get
@@ -125,6 +129,7 @@ namespace Barotrauma
public virtual void Remove() public virtual void Remove()
{ {
dictionary.Remove(ID); dictionary.Remove(ID);
Removed = true;
} }
public static void DumpIds(int count) public static void DumpIds(int count)