diff --git a/Barotrauma/BarotraumaClient/Source/Items/Item.cs b/Barotrauma/BarotraumaClient/Source/Items/Item.cs index a2e5a3129..3cdfce85b 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/Item.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/Item.cs @@ -127,18 +127,36 @@ namespace Barotrauma if (!prefab.IsLinkable) return; - if (!PlayerInput.LeftButtonClicked() || !PlayerInput.KeyDown(Keys.Space)) return; + if (!PlayerInput.KeyDown(Keys.Space)) return; + bool lClick = PlayerInput.LeftButtonClicked(); + bool rClick = PlayerInput.RightButtonClicked(); + if (!lClick && !rClick) return; Vector2 position = cam.ScreenToWorld(PlayerInput.MousePosition); - foreach (MapEntity entity in mapEntityList) + if (lClick) { - if (entity == this || !entity.IsHighlighted) continue; - if (linkedTo.Contains(entity)) continue; - if (!entity.IsMouseOn(position)) continue; + foreach (MapEntity entity in mapEntityList) + { + if (entity == this || !entity.IsHighlighted) continue; + if (linkedTo.Contains(entity)) continue; + if (!entity.IsMouseOn(position)) continue; - linkedTo.Add(entity); - if (entity.IsLinkable && entity.linkedTo != null) entity.linkedTo.Add(this); + linkedTo.Add(entity); + if (entity.IsLinkable && entity.linkedTo != null) entity.linkedTo.Add(this); + } + } + else + { + foreach (MapEntity entity in mapEntityList) + { + if (entity == this || !entity.IsHighlighted) continue; + if (!linkedTo.Contains(entity)) continue; + if (!entity.IsMouseOn(position)) continue; + + linkedTo.Remove(entity); + if (entity.linkedTo != null && entity.linkedTo.Contains(this)) entity.linkedTo.Remove(this); + } } } diff --git a/Barotrauma/BarotraumaClient/Source/Map/Hull.cs b/Barotrauma/BarotraumaClient/Source/Map/Hull.cs index 4ed6b298c..1db89c837 100644 --- a/Barotrauma/BarotraumaClient/Source/Map/Hull.cs +++ b/Barotrauma/BarotraumaClient/Source/Map/Hull.cs @@ -4,6 +4,7 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; using System.Collections.Generic; +using Microsoft.Xna.Framework.Input; namespace Barotrauma { @@ -56,7 +57,38 @@ namespace Barotrauma return decal; } - + + public override void UpdateEditing(Camera cam) + { + if (!PlayerInput.KeyDown(Keys.Space)) return; + bool lClick = PlayerInput.LeftButtonClicked(); + bool rClick = PlayerInput.RightButtonClicked(); + if (!lClick && !rClick) return; + + Vector2 position = cam.ScreenToWorld(PlayerInput.MousePosition); + + if (lClick) + { + foreach (MapEntity entity in mapEntityList) + { + if (entity == this || !entity.IsHighlighted) continue; + if (!entity.IsMouseOn(position)) continue; + + if (entity.IsLinkable && entity.linkedTo != null) entity.linkedTo.Add(this); + } + } + else + { + foreach (MapEntity entity in mapEntityList) + { + if (entity == this || !entity.IsHighlighted) continue; + if (!entity.IsMouseOn(position)) continue; + + if (entity.linkedTo != null && entity.linkedTo.Contains(this)) entity.linkedTo.Remove(this); + } + } + } + partial void UpdateProjSpecific(float deltaTime, Camera cam) { if (EditWater) diff --git a/Barotrauma/BarotraumaShared/Source/Map/MapEntityPrefab.cs b/Barotrauma/BarotraumaShared/Source/Map/MapEntityPrefab.cs index 43208f7aa..0d559550f 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/MapEntityPrefab.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/MapEntityPrefab.cs @@ -59,13 +59,19 @@ namespace Barotrauma get; protected set; } - + [Serialize(false, false)] - public virtual bool IsLinkable + public bool Linkable //TODO: make this property's name consistent { get; private set; } + + public virtual bool IsLinkable + { + get { return Linkable; } + private set { Linkable = value; } + } public MapEntityCategory Category {