From df746db421477968be3b22e521ffb18c0c5348c6 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Thu, 8 Mar 2018 11:01:17 +0200 Subject: [PATCH] Ladders can be climbed by holding up/down while standing next to them without having to select them first. --- .../Source/Characters/Character.cs | 28 +++++++++++++++++++ .../Source/Items/Components/Ladder.cs | 15 ++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs index dff432aeb..0c111ab7a 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs @@ -1405,6 +1405,34 @@ namespace Barotrauma { findFocusedTimer -= deltaTime; } + + //climb ladders automatically when pressing up/down inside their trigger area + if (selectedConstruction == null && !AnimController.InWater) + { + bool climbInput = IsKeyDown(InputType.Up) || IsKeyDown(InputType.Down); + + Ladder nearbyLadder = null; + if (Controlled == this || climbInput) + { + float minDist = float.PositiveInfinity; + foreach (Ladder ladder in Ladder.List) + { + float dist; + if (CanInteractWith(ladder.Item, out dist) && dist < minDist) + { + minDist = dist; + nearbyLadder = ladder; + if (Controlled == this) ladder.Item.IsHighlighted = true; + break; + } + } + } + + if (nearbyLadder != null && climbInput) + { + if (nearbyLadder.Select(this)) selectedConstruction = nearbyLadder.Item; + } + } if (SelectedCharacter != null && focusedItem == null && IsKeyHit(InputType.Select)) //Let people use ladders and buttons and stuff when dragging chars { diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Ladder.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Ladder.cs index 71d3a79eb..5d949fc94 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Ladder.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Ladder.cs @@ -1,13 +1,20 @@ -using System.Xml.Linq; +using System.Collections.Generic; +using System.Xml.Linq; namespace Barotrauma.Items.Components { class Ladder : ItemComponent { + private static List list = new List(); + public static List List + { + get { return list; } + } public Ladder(Item item, XElement element) : base(item, element) { + list.Add(this); } public override bool Select(Character character) @@ -15,9 +22,13 @@ namespace Barotrauma.Items.Components if (character == null || character.LockHands || character.Removed) return false; character.AnimController.Anim = AnimController.Animation.Climbing; - //picker.SelectedConstruction = item; return true; } + + protected override void RemoveComponentSpecific() + { + list.Remove(this); + } } }