From e102154f5ff711010da5d5e15f0601fecd0d8261 Mon Sep 17 00:00:00 2001 From: Regalis Date: Wed, 6 Jan 2016 22:50:55 +0200 Subject: [PATCH] IndoorsSteering works outside now --- .../Source/Characters/AI/HumanAIController.cs | 10 +++------- Subsurface/Source/Characters/AI/ISteerable.cs | 2 ++ .../Characters/AI/IndoorsSteeringManager.cs | 18 +++++++++++++++--- .../AI/Objectives/AIObjectiveGoTo.cs | 6 +++++- Subsurface/Source/Characters/AI/PathFinder.cs | 16 ++++++++-------- Subsurface_Solution.v12.suo | Bin 849408 -> 846848 bytes 6 files changed, 33 insertions(+), 19 deletions(-) diff --git a/Subsurface/Source/Characters/AI/HumanAIController.cs b/Subsurface/Source/Characters/AI/HumanAIController.cs index 55f64059b..b0dc59834 100644 --- a/Subsurface/Source/Characters/AI/HumanAIController.cs +++ b/Subsurface/Source/Characters/AI/HumanAIController.cs @@ -12,10 +12,7 @@ namespace Barotrauma const float UpdateObjectiveInterval = 0.5f; private AIObjectiveManager objectiveManager; - - private IndoorsSteeringManager indoorsSteeringManager; - private SteeringManager outdoorsSteeringManager; - + private AITarget selectedAiTarget; private float updateObjectiveTimer; @@ -34,8 +31,7 @@ namespace Barotrauma public HumanAIController(Character c) : base(c) { - indoorsSteeringManager = new IndoorsSteeringManager(this, true); - outdoorsSteeringManager = new SteeringManager(this); + steeringManager = new IndoorsSteeringManager(this, true); objectiveManager = new AIObjectiveManager(c); objectiveManager.AddObjective(new AIObjectiveFindSafety(c)); @@ -48,7 +44,7 @@ namespace Barotrauma { Character.ClearInputs(); - steeringManager = Character.AnimController.CurrentHull == null ? outdoorsSteeringManager : indoorsSteeringManager; + //steeringManager = Character.AnimController.CurrentHull == null ? outdoorsSteeringManager : indoorsSteeringManager; if (updateObjectiveTimer>0.0f) { diff --git a/Subsurface/Source/Characters/AI/ISteerable.cs b/Subsurface/Source/Characters/AI/ISteerable.cs index efafca9d9..561d363f8 100644 --- a/Subsurface/Source/Characters/AI/ISteerable.cs +++ b/Subsurface/Source/Characters/AI/ISteerable.cs @@ -21,5 +21,7 @@ namespace Barotrauma get; } + + } } diff --git a/Subsurface/Source/Characters/AI/IndoorsSteeringManager.cs b/Subsurface/Source/Characters/AI/IndoorsSteeringManager.cs index 4c1f53109..d4b0f0b95 100644 --- a/Subsurface/Source/Characters/AI/IndoorsSteeringManager.cs +++ b/Subsurface/Source/Characters/AI/IndoorsSteeringManager.cs @@ -72,7 +72,13 @@ namespace Barotrauma if (findPathTimer > 0.0f) return Vector2.Zero; currentTarget = target; - currentPath = pathFinder.FindPath(host.SimPosition, target); + Vector2 pos = host.SimPosition; + if (character!=null && character.Submarine==null) + { + pos -= Submarine.Loaded.SimPosition; + } + + currentPath = pathFinder.FindPath(pos, target); findPathTimer = Rand.Range(1.0f,1.2f); @@ -95,7 +101,13 @@ namespace Barotrauma float allowedDistance = character.AnimController.InWater ? 1.0f : 0.6f; if (currentPath.CurrentNode!=null && currentPath.CurrentNode.SimPosition.Y > character.SimPosition.Y+1.0f) allowedDistance*=0.5f; - currentPath.CheckProgress(host.SimPosition, allowedDistance); + Vector2 pos = host.SimPosition; + if (character != null && character.Submarine == null) + { + pos -= Submarine.Loaded.SimPosition; + } + + currentPath.CheckProgress(pos, allowedDistance); if (currentPath.CurrentNode == null) return Vector2.Zero; @@ -104,7 +116,7 @@ namespace Barotrauma // return currentPath.PrevNode.SimPosition - host.SimPosition; //} - return currentPath.CurrentNode.SimPosition - host.SimPosition; + return currentPath.CurrentNode.SimPosition - pos; } private void CheckDoorsInPath() diff --git a/Subsurface/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs b/Subsurface/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs index c8a38af87..d1f771847 100644 --- a/Subsurface/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs +++ b/Subsurface/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs @@ -76,7 +76,11 @@ namespace Barotrauma //if character is outside the sub and target isn't, transform the position if (character.Submarine == null && target.Submarine != null) { - currTargetPos += target.Submarine.SimPosition; + //currTargetPos += target.Submarine.SimPosition; + } + else if (target.Submarine==null) + { + currTargetPos -= Submarine.Loaded.SimPosition; } } diff --git a/Subsurface/Source/Characters/AI/PathFinder.cs b/Subsurface/Source/Characters/AI/PathFinder.cs index f76c31ba4..8f0c0d99a 100644 --- a/Subsurface/Source/Characters/AI/PathFinder.cs +++ b/Subsurface/Source/Characters/AI/PathFinder.cs @@ -103,10 +103,10 @@ namespace Barotrauma Vector2 nodePos = node.Position; //if node waypoint is one of submarine waypoints outside the sub, transform position - if (node.Waypoint != null && node.Waypoint.Submarine != null && node.Waypoint.CurrentHull == null) - { - nodePos -= node.Waypoint.Submarine.Position; - } + //if (node.Waypoint != null && node.Waypoint.Submarine != null && node.Waypoint.CurrentHull == null) + //{ + // nodePos -= node.Waypoint.Submarine.Position; + //} float dist = System.Math.Abs(start.X-nodePos.X)+ System.Math.Abs(start.Y - nodePos.Y)*10.0f + @@ -135,10 +135,10 @@ namespace Barotrauma Vector2 nodePos = node.Position; //if node waypoint is one of submarine waypoints outside the sub, transform position - if (node.Waypoint!=null && node.Waypoint.Submarine != null && node.Waypoint.CurrentHull==null) - { - nodePos -= node.Waypoint.Submarine.Position; - } + //if (node.Waypoint!=null && node.Waypoint.Submarine != null && node.Waypoint.CurrentHull==null) + //{ + // nodePos -= node.Waypoint.Submarine.Position; + //} float dist = Vector2.Distance(end, nodePos); if (dist < closestDist || endNode == null) diff --git a/Subsurface_Solution.v12.suo b/Subsurface_Solution.v12.suo index 4f23039e965b9cb81628159740c5787eeedcd2fe..3f194edd7cd30f39f8e2ca1ac2b0fc5078b378d3 100644 GIT binary patch delta 7756 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 W``wNO-dG+*l`ZZ44R};M{eJ-d_*fqR delta 9097 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 P%3reuxcnQx(&qawko#Ey