From a3342ca96dc2a5856d4739174f60db4733abd7fa Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Thu, 11 Apr 2019 18:27:25 +0300 Subject: [PATCH] (ffa3ddbca) Implemented changing mineral sprites when attached to a wall --- .../BarotraumaClient/Source/Items/Item.cs | 20 +++++++++++++++---- .../Source/Items/ItemPrefab.cs | 2 ++ .../Items/Components/Holdable/Holdable.cs | 20 +++++++++++++++---- .../Components/Holdable/LevelResource.cs | 14 ++++++------- .../BarotraumaShared/Source/Items/Item.cs | 7 ++++++- 5 files changed, 47 insertions(+), 16 deletions(-) diff --git a/Barotrauma/BarotraumaClient/Source/Items/Item.cs b/Barotrauma/BarotraumaClient/Source/Items/Item.cs index 4e090ff4d..ff4dc9d98 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/Item.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/Item.cs @@ -101,9 +101,22 @@ namespace Barotrauma return color; } - partial void SetActiveSprite() + partial void SetActiveSpriteProjSpecific() { activeSprite = prefab.sprite; + Holdable holdable = GetComponent(); + if (holdable != null && holdable.Attached) + { + foreach (ContainedItemSprite containedSprite in Prefab.ContainedSprites) + { + if (containedSprite.UseWhenAttached) + { + activeSprite = containedSprite.Sprite; + return; + } + } + } + if (Container != null) { foreach (ContainedItemSprite containedSprite in Prefab.ContainedSprites) @@ -173,8 +186,7 @@ namespace Barotrauma Color color = isHighlighted && !GUI.DisableItemHighlights && Screen.Selected != GameMain.GameScreen ? Color.Orange : GetSpriteColor(); //if (IsSelected && editing) color = Color.Lerp(color, Color.Gold, 0.5f); - - Sprite activeSprite = prefab.sprite; + BrokenItemSprite fadeInBrokenSprite = null; float fadeInBrokenSpriteAlpha = 0.0f; if (condition < Prefab.Health) @@ -783,7 +795,7 @@ namespace Barotrauma { if (!ic.CanBeSelected) { continue; } - bool useAlternativeLayout = activeHUDs.Count > 1; + bool useAlternativeLayout = ic.Item != this; bool wasUsingAlternativeLayout = ic.UseAlternativeLayout; ic.UseAlternativeLayout = useAlternativeLayout; needsLayoutUpdate |= ic.UseAlternativeLayout != wasUsingAlternativeLayout; diff --git a/Barotrauma/BarotraumaClient/Source/Items/ItemPrefab.cs b/Barotrauma/BarotraumaClient/Source/Items/ItemPrefab.cs index 53cdf7c63..76a9c235f 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/ItemPrefab.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/ItemPrefab.cs @@ -25,12 +25,14 @@ namespace Barotrauma class ContainedItemSprite { public readonly Sprite Sprite; + public readonly bool UseWhenAttached; public readonly string[] AllowedContainerIdentifiers; public readonly string[] AllowedContainerTags; public ContainedItemSprite(XElement element, string path = "", bool lazyLoad = false) { Sprite = new Sprite(element, path, lazyLoad: lazyLoad); + UseWhenAttached = element.GetAttributeBool("usewhenattached", false); AllowedContainerIdentifiers = element.GetAttributeStringArray("allowedcontaineridentifiers", new string[0], convertToLowerInvariant: true); AllowedContainerTags = element.GetAttributeStringArray("allowedcontainertags", new string[0], convertToLowerInvariant: true); } diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/Holdable.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/Holdable.cs index fdc3b8a06..2b38622e6 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/Holdable.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/Holdable.cs @@ -44,7 +44,18 @@ namespace Barotrauma.Items.Components public bool Attached { get { return attached && item.ParentInventory == null; } - set { attached = value; } + set + { + attached = value; + item.SetActiveSprite(); + } + } + + [Serialize(true, true)] + public bool Aimable + { + get; + set; } [Serialize(true, true)] @@ -167,7 +178,7 @@ namespace Barotrauma.Items.Components if (item.Submarine.Loading) { AttachToWall(); - attached = false; + Attached = false; } else //the submarine is not being loaded, which means we're either in the sub editor or the item has been spawned mid-round { @@ -409,14 +420,14 @@ namespace Barotrauma.Items.Components PickKey = prevPickKey; requiredItems = new Dictionary>(prevRequiredItems); - attached = true; + Attached = true; } public void DeattachFromWall() { if (!attachable) return; - attached = false; + Attached = false; //make the item pickable with the default pick key and with no specific tools/items when it's deattached requiredItems.Clear(); @@ -529,6 +540,7 @@ namespace Barotrauma.Items.Components { if (item.Submarine != null && item.Submarine.Loading) return; OnMapLoaded(); + item.SetActiveSprite(); } public override void OnMapLoaded() diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/LevelResource.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/LevelResource.cs index 90a7a0665..d557dd19d 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/LevelResource.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/LevelResource.cs @@ -11,6 +11,12 @@ namespace Barotrauma.Items.Components { private float lastSentDeattachTimer; + private PhysicsBody trigger; + + private Holdable holdable; + + private float deattachTimer; + [Serialize(1.0f, false)] public float DeattachDuration { @@ -49,13 +55,7 @@ namespace Barotrauma.Items.Components #endif } } - - private PhysicsBody trigger; - - private Holdable holdable; - - private float deattachTimer; - + public LevelResource(Item item, XElement element) : base(item, element) { IsActive = true; diff --git a/Barotrauma/BarotraumaShared/Source/Items/Item.cs b/Barotrauma/BarotraumaShared/Source/Items/Item.cs index 95beb42a3..2a1b62490 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Item.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Item.cs @@ -801,7 +801,12 @@ namespace Barotrauma if (findNewHull) FindHull(); } - partial void SetActiveSprite(); + public void SetActiveSprite() + { + SetActiveSpriteProjSpecific(); + } + + partial void SetActiveSpriteProjSpecific(); public override void Move(Vector2 amount) {