From dd45af5a9f483ffc8ceb1602969dc5d81541cb32 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Thu, 11 Apr 2019 18:25:01 +0300 Subject: [PATCH] (20f37d9c7) Option to toggle structure drop shadows and edit the position of the shadow --- .../BarotraumaClient/Source/Map/Structure.cs | 21 ++++++++++--------- .../BarotraumaShared/Source/Map/Structure.cs | 21 +++++++++++++++++++ 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/Barotrauma/BarotraumaClient/Source/Map/Structure.cs b/Barotrauma/BarotraumaClient/Source/Map/Structure.cs index 69c09b594..6bf1f97f8 100644 --- a/Barotrauma/BarotraumaClient/Source/Map/Structure.cs +++ b/Barotrauma/BarotraumaClient/Source/Map/Structure.cs @@ -215,23 +215,24 @@ namespace Barotrauma { if (Prefab.BackgroundSprite != null) { - bool drawDropShadow = Submarine != null && HasBody; Vector2 dropShadowOffset = Vector2.Zero; - if (drawDropShadow) + if (UseDropShadow) { - dropShadowOffset = Submarine.HiddenSubPosition - Position; - if (dropShadowOffset != Vector2.Zero) + dropShadowOffset = DropShadowOffset; + if (dropShadowOffset == Vector2.Zero) { - if (IsHorizontal) + if (Submarine == null) { - dropShadowOffset = new Vector2(0.0f, Math.Sign(dropShadowOffset.Y) * 10.0f); + dropShadowOffset = Vector2.UnitY * 10.0f; } else { - dropShadowOffset = new Vector2(Math.Sign(dropShadowOffset.X) * 10.0f, 0.0f); + dropShadowOffset = IsHorizontal ? + new Vector2(0.0f, Math.Sign(Submarine.HiddenSubPosition.Y - Position.Y) * 10.0f) : + new Vector2(Math.Sign(Submarine.HiddenSubPosition.X - Position.X) * 10.0f, 0.0f); } - dropShadowOffset.Y = -dropShadowOffset.Y; } + dropShadowOffset.Y = -dropShadowOffset.Y; } if (DrawTiled) @@ -251,7 +252,7 @@ namespace Barotrauma textureScale: TextureScale * Scale, startOffset: backGroundOffset); - if (drawDropShadow) + if (UseDropShadow) { Prefab.BackgroundSprite.DrawTiled( spriteBatch, @@ -276,7 +277,7 @@ namespace Barotrauma rotate: 0, spriteEffect: SpriteEffects); - if (drawDropShadow) + if (UseDropShadow) { Prefab.BackgroundSprite.Draw( spriteBatch, diff --git a/Barotrauma/BarotraumaShared/Source/Map/Structure.cs b/Barotrauma/BarotraumaShared/Source/Map/Structure.cs index 4ae545ab1..b4829678a 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/Structure.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/Structure.cs @@ -144,6 +144,20 @@ namespace Barotrauma get { return spriteColor; } set { spriteColor = value; } } + + [Editable, Serialize(false, true)] + public bool UseDropShadow + { + get; + private set; + } + + [Serialize("0,0", true), Editable(ToolTip = "The position of the drop shadow relative to the structure. If set to zero, the shadow is positioned automatically so that it points towards the sub's center of mass.")] + public Vector2 DropShadowOffset + { + get; + private set; + } public override Rectangle Rect { @@ -1139,6 +1153,13 @@ namespace Barotrauma if (element.GetAttributeBool("flippedx", false)) s.FlipX(false); if (element.GetAttributeBool("flippedy", false)) s.FlipY(false); SerializableProperty.DeserializeProperties(s, element); + + //structures with a body drop a shadow by default + if (element.Attribute("usedropshadow") == null) + { + s.UseDropShadow = prefab.Body; + } + return s; }