From 142920d70417f1ac79ab867519aec95914eefbdd Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Thu, 12 Oct 2017 19:45:49 +0300 Subject: [PATCH] - Added sprites for damaged doors. - Fixed destroyed doors being impossible to repair because the repair tool raycasts wouldn't hit the disabled body of the door. - Destroyed doors don't cast shadows and the body isn't re-enabled until the door is restored to 50% health. --- .../Source/Items/Components/Door.cs | 52 ++++++--- .../BarotraumaShared.projitems | 3 + .../Content/Items/Door/door.png | Bin 55392 -> 57413 bytes .../Content/Items/Door/doors.xml | 15 ++- .../Content/Items/Door/hatch.png | Bin 0 -> 30158 bytes .../Source/Items/Components/Door.cs | 105 +++++++++++++----- .../Items/Components/Holdable/RepairTool.cs | 2 +- .../BarotraumaShared/Source/Map/Submarine.cs | 9 +- 8 files changed, 132 insertions(+), 54 deletions(-) create mode 100644 Barotrauma/BarotraumaShared/Content/Items/Door/hatch.png diff --git a/Barotrauma/BarotraumaClient/Source/Items/Components/Door.cs b/Barotrauma/BarotraumaClient/Source/Items/Components/Door.cs index 193ce722a..90c3e8bbc 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/Components/Door.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/Components/Door.cs @@ -87,11 +87,7 @@ namespace Barotrauma.Items.Components public void Draw(SpriteBatch spriteBatch, bool editing) { Color color = (item.IsSelected) ? Color.Green : Color.White; - color = color * (item.Condition / item.Prefab.Health); - color.A = 255; - - //prefab.sprite.Draw(spriteBatch, new Vector2(rect.X, -rect.Y), new Vector2(rect.Width, rect.Height), color); - + if (stuck > 0.0f && weldedSprite != null) { Vector2 weldSpritePos = new Vector2(item.Rect.Center.X, item.Rect.Y - item.Rect.Height / 2.0f); @@ -114,10 +110,25 @@ namespace Barotrauma.Items.Components if (item.Submarine != null) pos += item.Submarine.DrawPosition; pos.Y = -pos.Y; - spriteBatch.Draw(doorSprite.Texture, pos, - new Rectangle((int)(doorSprite.SourceRect.X + doorSprite.size.X * openState), (int)doorSprite.SourceRect.Y, - (int)(doorSprite.size.X * (1.0f - openState)), (int)doorSprite.size.Y), - color, 0.0f, doorSprite.Origin, 1.0f, SpriteEffects.None, doorSprite.Depth); + if (brokenSprite == null || item.Health > 0.0f) + { + spriteBatch.Draw(doorSprite.Texture, pos, + new Rectangle((int) (doorSprite.SourceRect.X + doorSprite.size.X * openState), + (int) doorSprite.SourceRect.Y, + (int) (doorSprite.size.X * (1.0f - openState)), (int) doorSprite.size.Y), + color, 0.0f, doorSprite.Origin, 1.0f, SpriteEffects.None, doorSprite.Depth); + } + + if (brokenSprite != null && item.Health < item.Prefab.Health) + { + Vector2 scale = scaleBrokenSprite ? new Vector2(1.0f, 1.0f - item.Health / item.Prefab.Health) : Vector2.One; + float alpha = fadeBrokenSprite ? 1.0f - item.Health / item.Prefab.Health : 1.0f; + spriteBatch.Draw(brokenSprite.Texture, pos, + new Rectangle((int)(brokenSprite.SourceRect.X + brokenSprite.size.X * openState), brokenSprite.SourceRect.Y, + (int)(brokenSprite.size.X * (1.0f - openState)), (int)brokenSprite.size.Y), + color * alpha, 0.0f, brokenSprite.Origin, scale, SpriteEffects.None, + brokenSprite.Depth); + } } else { @@ -125,10 +136,25 @@ namespace Barotrauma.Items.Components if (item.Submarine != null) pos += item.Submarine.DrawPosition; pos.Y = -pos.Y; - spriteBatch.Draw(doorSprite.Texture, pos, - new Rectangle(doorSprite.SourceRect.X, (int)(doorSprite.SourceRect.Y + doorSprite.size.Y * openState), - (int)doorSprite.size.X, (int)(doorSprite.size.Y * (1.0f - openState))), - color, 0.0f, doorSprite.Origin, 1.0f, SpriteEffects.None, doorSprite.Depth); + if (brokenSprite == null || item.Health > 0.0f) + { + spriteBatch.Draw(doorSprite.Texture, pos, + new Rectangle(doorSprite.SourceRect.X, + (int) (doorSprite.SourceRect.Y + doorSprite.size.Y * openState), + (int) doorSprite.size.X, (int) (doorSprite.size.Y * (1.0f - openState))), + color, 0.0f, doorSprite.Origin, 1.0f, SpriteEffects.None, doorSprite.Depth); + } + + if (brokenSprite != null && item.Health < item.Prefab.Health) + { + Vector2 scale = scaleBrokenSprite ? new Vector2(1.0f - item.Health / item.Prefab.Health, 1.0f) : Vector2.One; + float alpha = fadeBrokenSprite ? 1.0f - item.Health / item.Prefab.Health : 1.0f; + spriteBatch.Draw(brokenSprite.Texture, pos, + new Rectangle(brokenSprite.SourceRect.X, (int)(brokenSprite.SourceRect.Y + brokenSprite.size.Y * openState), + (int)brokenSprite.size.X, (int)(brokenSprite.size.Y * (1.0f - openState))), + color * alpha, 0.0f, brokenSprite.Origin, scale, SpriteEffects.None, brokenSprite.Depth); + } + } } diff --git a/Barotrauma/BarotraumaShared/BarotraumaShared.projitems b/Barotrauma/BarotraumaShared/BarotraumaShared.projitems index 2691ec529..8f03bf746 100644 --- a/Barotrauma/BarotraumaShared/BarotraumaShared.projitems +++ b/Barotrauma/BarotraumaShared/BarotraumaShared.projitems @@ -289,6 +289,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/Barotrauma/BarotraumaShared/Content/Items/Door/door.png b/Barotrauma/BarotraumaShared/Content/Items/Door/door.png index 435e2a5bff31181530d4af64c9979932e36cd223..2b15f795a4cd7f570526c66ba52f0494a04a1996 100644 GIT binary patch literal 57413 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