diff --git a/Content.Client/_CP14/Fishing/CP14FishingSystem.cs b/Content.Client/_CP14/Fishing/CP14FishingSystem.cs index f6984dd568..001dde8e52 100644 --- a/Content.Client/_CP14/Fishing/CP14FishingSystem.cs +++ b/Content.Client/_CP14/Fishing/CP14FishingSystem.cs @@ -1,19 +1,25 @@ +using System.Diagnostics; using System.Numerics; using Content.Shared._CP14.Fishing; using Content.Shared._CP14.Fishing.Components; using Content.Shared.Interaction; using Robust.Client.Graphics; +using Robust.Client.ResourceManagement; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; -using Robust.Shared.Utility; +using Robust.Shared.Prototypes; namespace Content.Client._CP14.Fishing; public sealed class CP14FishingSystem : CP14SharedFishingSystem { [Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IResourceCache _resourceCache = default!; private Popup? _fishingPopup; + private const int FishingMinigameSizeX = 41; + private const int FishingMinigameSizeY = 149; public override void Initialize() { @@ -27,7 +33,7 @@ public sealed class CP14FishingSystem : CP14SharedFishingSystem if (args.Handled) return; - if (!args.CanReach || args.Target is not { Valid: true } target) + if (!args.CanReach || args.Target is not { Valid: true }) return; if (!TryComp(args.Target, out var pond)) @@ -36,31 +42,44 @@ public sealed class CP14FishingSystem : CP14SharedFishingSystem if (component.FishingProcess) return; - OpenFishingPopup(); + OpenFishingPopup(component); } - private void OpenFishingPopup() + private void OpenFishingPopup(CP14FishingRodComponent component) { _fishingPopup = new Popup { CloseOnClick = false, CloseOnEscape = false, - MinSize = new Vector2(41, 149), - MaxSize = new Vector2(41, 149), // 41, 149 is minigame texture format + MinSize = new Vector2(FishingMinigameSizeX, FishingMinigameSizeY), + MaxSize = new Vector2(FishingMinigameSizeX, FishingMinigameSizeY), }; _userInterfaceManager.ModalRoot.AddChild(_fishingPopup); + var backgroundTexture = RequestTexture(CP14FishingMinigameElement.Background, component); + if (backgroundTexture is null) + return; + var panel = new PanelContainer { PanelOverride = new StyleBoxTexture { - Texture = SpriteSpecifier.Texture() - } + Texture = backgroundTexture, + }, }; } - private ResPath RequestTexture(FishingMinigameElement element, CP14FishingRodComponent minigamePrototype) + private TextureResource? RequestTexture(CP14FishingMinigameElement element, CP14FishingRodComponent fishingRodComponent) { + var minigamePrototype = _prototypeManager.Index(fishingRodComponent.FishingMinigame); + if (minigamePrototype.Texture is null || !minigamePrototype.Texture.TryGetValue(element, out var data)) + { + Debug.Fail($"Tried to request a fishing minigame element {element} without a texture."); + return null; + } + + var texture = _resourceCache.GetResource(data.Texture); + return texture; } } diff --git a/Content.Shared/_CP14/Fishing/CP14FishingMinigamePrototype.cs b/Content.Shared/_CP14/Fishing/CP14FishingMinigamePrototype.cs index 196eba1b91..6f8549e540 100644 --- a/Content.Shared/_CP14/Fishing/CP14FishingMinigamePrototype.cs +++ b/Content.Shared/_CP14/Fishing/CP14FishingMinigamePrototype.cs @@ -11,7 +11,7 @@ public sealed partial class CP14FishingMinigamePrototype : IPrototype public string ID { get; } = default!; [DataField(required: true)] - public Dictionary? Texture; + public Dictionary? Texture; [DataDefinition] public partial struct FishingMinigameElementData @@ -21,7 +21,7 @@ public sealed partial class CP14FishingMinigamePrototype : IPrototype } } -public enum FishingMinigameElement : byte +public enum CP14FishingMinigameElement : byte { Background, DefaultFishIcon, diff --git a/Content.Shared/_CP14/Fishing/Components/CP14FishingRod.cs b/Content.Shared/_CP14/Fishing/Components/CP14FishingRodComponent.cs similarity index 65% rename from Content.Shared/_CP14/Fishing/Components/CP14FishingRod.cs rename to Content.Shared/_CP14/Fishing/Components/CP14FishingRodComponent.cs index c23e2b9b8d..dff1c77f95 100644 --- a/Content.Shared/_CP14/Fishing/Components/CP14FishingRod.cs +++ b/Content.Shared/_CP14/Fishing/Components/CP14FishingRodComponent.cs @@ -1,3 +1,5 @@ +using Robust.Shared.Prototypes; + namespace Content.Shared._CP14.Fishing.Components; /// @@ -7,4 +9,7 @@ namespace Content.Shared._CP14.Fishing.Components; public sealed partial class CP14FishingRodComponent : Component { public bool FishingProcess = false; + + [DataField] + public ProtoId FishingMinigame = "Default"; } diff --git a/Resources/Prototypes/_CP14/FishingStyles/default.yml b/Resources/Prototypes/_CP14/FishingStyles/default.yml index 36a2bbe987..aa904b4614 100644 --- a/Resources/Prototypes/_CP14/FishingStyles/default.yml +++ b/Resources/Prototypes/_CP14/FishingStyles/default.yml @@ -1,5 +1,5 @@ - type: CP14FishingMinigameStyle - id: default + id: Default texture: background: - texture: _CP14/Interface/Fishing/Default/background.png