From c4c49dfb1076b847ff3191338e8f42bba46a71f0 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Mon, 15 Apr 2019 12:08:11 +0300 Subject: [PATCH] (5f6bab490) Fixed AI characters being unable to open doors w/ the built-in buttons --- .../Characters/AI/IndoorsSteeringManager.cs | 28 ++++++++++++++----- .../BarotraumaShared/Source/Map/Hull.cs | 19 +++++++++++++ 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/IndoorsSteeringManager.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/IndoorsSteeringManager.cs index da327ea2d..e1109f83f 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/AI/IndoorsSteeringManager.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/IndoorsSteeringManager.cs @@ -388,13 +388,25 @@ namespace Barotrauma buttonPressCooldown = ButtonPressInterval; break; } + else + { + if (!door.HasRequiredItems(character, false) && shouldBeOpen) + { + currentPath.Unreachable = true; + return; + } + + door.Item.TryInteract(character, false, true, true); + buttonPressCooldown = ButtonPressInterval; + break; + } } } } private float? GetNodePenalty(PathNode node, PathNode nextNode) { - if (character == null) return 0.0f; + if (character == null) { return 0.0f; } float penalty = 0.0f; if (nextNode.Waypoint.ConnectedGap != null && nextNode.Waypoint.ConnectedGap.Open < 0.9f) @@ -403,21 +415,23 @@ namespace Barotrauma { penalty = 100.0f; } - - if (!canBreakDoors) + else if (!canBreakDoors) { //door closed and the character can't open doors -> node can't be traversed - if (!canOpenDoors || character.LockHands) return null; + if (!canOpenDoors || character.LockHands) { return null; } var doorButtons = nextNode.Waypoint.ConnectedDoor.Item.GetConnectedComponents(); - if (!doorButtons.Any()) return null; + if (!doorButtons.Any()) + { + if (!nextNode.Waypoint.ConnectedDoor.HasRequiredItems(character, false)) { return null; } + } foreach (Controller button in doorButtons) { if (Math.Sign(button.Item.Position.X - nextNode.Waypoint.Position.X) != - Math.Sign(node.Position.X - nextNode.Position.X)) continue; + Math.Sign(node.Position.X - nextNode.Position.X)) { continue; } - if (!button.HasRequiredItems(character, false)) return null; + if (!button.HasRequiredItems(character, false)) { return null; } } } } diff --git a/Barotrauma/BarotraumaShared/Source/Map/Hull.cs b/Barotrauma/BarotraumaShared/Source/Map/Hull.cs index fe019b032..8195664a4 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/Hull.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/Hull.cs @@ -166,6 +166,25 @@ namespace Barotrauma } } + public string DisplayName + { + get; + private set; + } + + private string roomName; + [Editable, Serialize("", true, translationTextTag: "RoomName.")] + public string RoomName + { + get { return roomName; } + set + { + if (roomName == value) { return; } + roomName = value; + DisplayName = TextManager.Get(roomName, returnNull: true) ?? roomName; + } + } + public override Rectangle Rect { get