From 3c3c530b4437b23f034cc2a90022715ecc5bce57 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Tue, 13 Jun 2017 17:08:23 +0300 Subject: [PATCH] Enemies move faster when attacking/fleeing --- .../Source/Characters/AI/EnemyAIController.cs | 35 +++++++++++-------- Barotrauma/Source/Characters/Character.cs | 2 +- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/Barotrauma/Source/Characters/AI/EnemyAIController.cs b/Barotrauma/Source/Characters/AI/EnemyAIController.cs index db741c14e..c7b68ff88 100644 --- a/Barotrauma/Source/Characters/AI/EnemyAIController.cs +++ b/Barotrauma/Source/Characters/AI/EnemyAIController.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.Xml.Linq; using FarseerPhysics; -using Lidgren.Network; using Microsoft.Xna.Framework; using FarseerPhysics.Dynamics; using Microsoft.Xna.Framework.Graphics; @@ -158,22 +156,33 @@ namespace Barotrauma steeringManager = Character.Submarine == null ? outsideSteering : insideSteering; + bool run = false; switch (state) { case AiState.None: UpdateNone(deltaTime); break; case AiState.Attack: + run = coolDownTimer <= 0.0f; UpdateAttack(deltaTime); break; case AiState.Escape: + run = true; UpdateEscape(deltaTime); break; default: throw new NotImplementedException(); } - steeringManager.Update(); + if (run) + { + steeringManager.Update(Character.AnimController.InWater ? + Character.AnimController.SwimSpeedMultiplier : Character.AnimController.RunSpeedMultiplier); + } + else + { + steeringManager.Update(); + } } private void UpdateNone(float deltaTime) @@ -259,7 +268,7 @@ namespace Barotrauma } if (attackLimb != null) { - steeringManager.SteeringSeek(attackSimPosition - (attackLimb.SimPosition - SimPosition)); + steeringManager.SteeringSeek(attackSimPosition - (attackLimb.SimPosition - SimPosition), 3); if (steeringManager is IndoorsSteeringManager) { @@ -276,7 +285,7 @@ namespace Barotrauma private void UpdateEscape(float deltaTime) { - SteeringManager.SteeringManual(deltaTime, Vector2.Normalize(SimPosition - selectedAiTarget.SimPosition)); + SteeringManager.SteeringManual(deltaTime, Vector2.Normalize(SimPosition - selectedAiTarget.SimPosition) * 5); SteeringManager.SteeringWander(1.0f); SteeringManager.SteeringAvoid(deltaTime, 2f); } @@ -285,18 +294,16 @@ namespace Barotrauma { coolDownTimer -= deltaTime; attackingLimb = null; - - if (selectedAiTarget.Entity is Hull || - Vector2.Distance(attackPosition, Character.AnimController.Limbs[0].SimPosition) < ConvertUnits.ToSimUnits(500.0f)) + + float dist = Vector2.Distance(attackPosition, Character.SimPosition); + + if (dist < ConvertUnits.ToSimUnits(500.0f)) { steeringManager.SteeringSeek(attackPosition, -0.8f); - steeringManager.SteeringAvoid(deltaTime, 1.0f); - } - else - { - steeringManager.SteeringSeek(attackPosition, -0.5f); - steeringManager.SteeringAvoid(deltaTime, 1.0f); + steeringManager.SteeringManual(deltaTime, Vector2.Normalize(Character.SimPosition - attackPosition) * (1.0f - (dist / 500.0f))); } + + steeringManager.SteeringAvoid(deltaTime, 1.0f); } private void GetTargetEntity() diff --git a/Barotrauma/Source/Characters/Character.cs b/Barotrauma/Source/Characters/Character.cs index 5f6230d2d..0611d161f 100644 --- a/Barotrauma/Source/Characters/Character.cs +++ b/Barotrauma/Source/Characters/Character.cs @@ -789,7 +789,7 @@ namespace Barotrauma // - crouching // - moving backwards if (selectedCharacter == null && - !((HumanoidAnimController)AnimController).Crouching && + (!(AnimController is HumanoidAnimController) || !((HumanoidAnimController)AnimController).Crouching) && Math.Sign(targetMovement.X) != -Math.Sign(AnimController.Dir)) { targetMovement *= AnimController.InWater ? AnimController.SwimSpeedMultiplier : AnimController.RunSpeedMultiplier;