diff --git a/Barotrauma/BarotraumaClient/Source/Items/Item.cs b/Barotrauma/BarotraumaClient/Source/Items/Item.cs index 62894cbad..9886404bf 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/Item.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/Item.cs @@ -24,6 +24,32 @@ namespace Barotrauma Color color = (IsSelected && editing) ? color = Color.Red : spriteColor; if (isHighlighted) color = Color.Orange; + Sprite activeSprite = prefab.sprite; + BrokenItemSprite fadeInBrokenSprite = null; + float fadeInBrokenSpriteAlpha = 0.0f; + if (condition < 100.0f) + { + for (int i = 0; i < prefab.BrokenSprites.Count; i++) + { + if (condition <= prefab.BrokenSprites[i].MaxCondition) + { + activeSprite = prefab.BrokenSprites[i].Sprite; + break; + } + + if (prefab.BrokenSprites[i].FadeIn) + { + float min = i > 0 ? prefab.BrokenSprites[i].MaxCondition : 0.0f; + float max = i < prefab.BrokenSprites.Count - 1 ? prefab.BrokenSprites[i + 1].MaxCondition : 100.0f; + fadeInBrokenSpriteAlpha = 1.0f - ((condition - min) / (max - min)); + if (fadeInBrokenSpriteAlpha > 0.0f && fadeInBrokenSpriteAlpha < 1.0f) + { + fadeInBrokenSprite = prefab.BrokenSprites[i]; + } + } + } + } + Sprite selectedSprite = prefab.GetActiveSprite(condition); if (selectedSprite != null) @@ -38,10 +64,13 @@ namespace Barotrauma if (prefab.ResizeHorizontal || prefab.ResizeVertical || SpriteEffects.HasFlag(SpriteEffects.FlipHorizontally) || SpriteEffects.HasFlag(SpriteEffects.FlipVertically)) { selectedSprite.DrawTiled(spriteBatch, new Vector2(DrawPosition.X - rect.Width / 2, -(DrawPosition.Y + rect.Height / 2)), new Vector2(rect.Width, rect.Height), color); + fadeInBrokenSprite?.Sprite.DrawTiled(spriteBatch, new Vector2(DrawPosition.X - rect.Width / 2, -(DrawPosition.Y + rect.Height / 2)), new Vector2(rect.Width, rect.Height), color * fadeInBrokenSpriteAlpha, Point.Zero, selectedSprite.Depth - 0.000001f); + } else { selectedSprite.Draw(spriteBatch, new Vector2(DrawPosition.X, -DrawPosition.Y), color, 0.0f, 1.0f, SpriteEffects.None, depth); + fadeInBrokenSprite?.Sprite.Draw(spriteBatch, new Vector2(DrawPosition.X, -DrawPosition.Y), color * fadeInBrokenSpriteAlpha, 0.0f, 1.0f, SpriteEffects.None, depth - 0.000001f); } } @@ -58,13 +87,9 @@ namespace Barotrauma { depth = holdable.Picker.AnimController.GetLimb(LimbType.LeftArm).sprite.Depth - 0.000001f; } - - body.Draw(spriteBatch, selectedSprite, color, depth); - } - else - { - body.Draw(spriteBatch, selectedSprite, color, depth); } + body.Draw(spriteBatch, selectedSprite, color, depth); + if (fadeInBrokenSprite != null) body.Draw(spriteBatch, fadeInBrokenSprite.Sprite, color * fadeInBrokenSpriteAlpha, depth - 0.000001f); } selectedSprite.effects = oldEffects; diff --git a/Barotrauma/BarotraumaClient/Source/Items/ItemPrefab.cs b/Barotrauma/BarotraumaClient/Source/Items/ItemPrefab.cs index fe606c4cb..ce8eaeb9d 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/ItemPrefab.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/ItemPrefab.cs @@ -10,11 +10,13 @@ namespace Barotrauma //sprite will be rendered if the condition of the item is below this public readonly float MaxCondition; public readonly Sprite Sprite; + public readonly bool FadeIn; - public BrokenItemSprite(Sprite sprite, float maxCondition) + public BrokenItemSprite(Sprite sprite, float maxCondition, bool fadeIn) { Sprite = sprite; - MaxCondition = maxCondition; + MaxCondition = MathHelper.Clamp(maxCondition, 0.0f, 100.0f); + FadeIn = fadeIn; } } diff --git a/Barotrauma/BarotraumaShared/Content/Items/Electricity/junctionbox.png b/Barotrauma/BarotraumaShared/Content/Items/Electricity/junctionbox.png index 4517fd139..59b742654 100644 Binary files a/Barotrauma/BarotraumaShared/Content/Items/Electricity/junctionbox.png and b/Barotrauma/BarotraumaShared/Content/Items/Electricity/junctionbox.png differ diff --git a/Barotrauma/BarotraumaShared/Content/Items/Electricity/poweritems.xml b/Barotrauma/BarotraumaShared/Content/Items/Electricity/poweritems.xml index d635e7929..81c2188f4 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Electricity/poweritems.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Electricity/poweritems.xml @@ -7,7 +7,9 @@ description="Serves as a hub for power distribution and relaying signals between devices."> - + + + diff --git a/Barotrauma/BarotraumaShared/Source/Items/ItemPrefab.cs b/Barotrauma/BarotraumaShared/Source/Items/ItemPrefab.cs index dfb6ce209..711fb23b2 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/ItemPrefab.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/ItemPrefab.cs @@ -311,7 +311,11 @@ namespace Barotrauma brokenSpriteFolder = Path.GetDirectoryName(filePath); } - var brokenSprite = new BrokenItemSprite(new Sprite(subElement, brokenSpriteFolder), subElement.GetAttributeFloat("maxcondition", 0.0f)); + var brokenSprite = new BrokenItemSprite( + new Sprite(subElement, brokenSpriteFolder), + subElement.GetAttributeFloat("maxcondition", 0.0f), + subElement.GetAttributeBool("fadein", false)); + int spriteIndex = 0; for (int i = 0; i < BrokenSprites.Count && BrokenSprites[i].MaxCondition < brokenSprite.MaxCondition; i++) {