diff --git a/Content.Client/AME/AMEControllerVisualizerSystem.cs b/Content.Client/AME/AMEControllerVisualizerSystem.cs new file mode 100644 index 0000000000..f16b22cf62 --- /dev/null +++ b/Content.Client/AME/AMEControllerVisualizerSystem.cs @@ -0,0 +1,61 @@ +using Content.Client.AME.Components; +using Robust.Client.GameObjects; +using static Content.Shared.AME.SharedAMEControllerComponent; + +namespace Content.Client.AME; + +public sealed class AMEControllerVisualizerSystem : VisualizerSystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnComponentInit); + } + + private void OnComponentInit(EntityUid uid, AMEControllerVisualsComponent component, ComponentInit args) + { + if(TryComp(uid, out var sprite)) + { + sprite.LayerMapSet(AMEControllerVisualLayers.Display, sprite.AddLayerState("control_on")); + sprite.LayerSetVisible(AMEControllerVisualLayers.Display, false); + } + } + + protected override void OnAppearanceChange(EntityUid uid, AMEControllerVisualsComponent component, ref AppearanceChangeEvent args) + { + base.OnAppearanceChange(uid, component, ref args); + + if(args.Sprite != null + && args.Component.TryGetData(AMEControllerVisuals.DisplayState, out var state)) + { + switch(state) + { + case "on": + args.Sprite.LayerSetState(AMEControllerVisualLayers.Display, "control_on"); + args.Sprite.LayerSetVisible(AMEControllerVisualLayers.Display, true); + break; + case "critical": + args.Sprite.LayerSetState(AMEControllerVisualLayers.Display, "control_critical"); + args.Sprite.LayerSetVisible(AMEControllerVisualLayers.Display, true); + break; + case "fuck": + args.Sprite.LayerSetState(AMEControllerVisualLayers.Display, "control_fuck"); + args.Sprite.LayerSetVisible(AMEControllerVisualLayers.Display, true); + break; + case "off": + args.Sprite.LayerSetVisible(AMEControllerVisualLayers.Display, false); + break; + default: + args.Sprite.LayerSetVisible(AMEControllerVisualLayers.Display, false); + break; + } + } + } +} + +public enum AMEControllerVisualLayers : byte +{ + Display +} + diff --git a/Content.Client/AME/AMEShieldingVisualizerSystem.cs b/Content.Client/AME/AMEShieldingVisualizerSystem.cs new file mode 100644 index 0000000000..9659f5ed55 --- /dev/null +++ b/Content.Client/AME/AMEShieldingVisualizerSystem.cs @@ -0,0 +1,70 @@ +using Content.Client.AME.Components; +using Robust.Client.GameObjects; +using static Content.Shared.AME.SharedAMEShieldComponent; + +namespace Content.Client.AME; + +public sealed class AMEShieldingVisualizerSystem : VisualizerSystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnComponentInit); + } + + private void OnComponentInit(EntityUid uid, AMEShieldingVisualsComponent component, ComponentInit args) + { + if(TryComp(uid, out var sprite)) + { + sprite.LayerMapSet(AMEShieldingVisualsLayer.Core, sprite.AddLayerState("core")); + sprite.LayerSetVisible(AMEShieldingVisualsLayer.Core, false); + sprite.LayerMapSet(AMEShieldingVisualsLayer.CoreState, sprite.AddLayerState("core_weak")); + sprite.LayerSetVisible(AMEShieldingVisualsLayer.CoreState, false); + } + } + + protected override void OnAppearanceChange(EntityUid uid, AMEShieldingVisualsComponent component, ref AppearanceChangeEvent args) + { + if(args.Sprite == null) + return; + + if(args.Component.TryGetData(AMEShieldVisuals.Core, out var core)) + { + if (core == "isCore") + { + args.Sprite.LayerSetState(AMEShieldingVisualsLayer.Core, "core"); + args.Sprite.LayerSetVisible(AMEShieldingVisualsLayer.Core, true); + + } + else + { + args.Sprite.LayerSetVisible(AMEShieldingVisualsLayer.Core, false); + } + } + + if(args.Component.TryGetData(AMEShieldVisuals.CoreState, out var coreState)) + { + switch(coreState) + { + case "weak": + args.Sprite.LayerSetState(AMEShieldingVisualsLayer.CoreState, "core_weak"); + args.Sprite.LayerSetVisible(AMEShieldingVisualsLayer.CoreState, true); + break; + case "strong": + args.Sprite.LayerSetState(AMEShieldingVisualsLayer.CoreState, "core_strong"); + args.Sprite.LayerSetVisible(AMEShieldingVisualsLayer.CoreState, true); + break; + case "off": + args.Sprite.LayerSetVisible(AMEShieldingVisualsLayer.CoreState, false); + break; + } + } + } +} + +public enum AMEShieldingVisualsLayer : byte +{ + Core, + CoreState, +} diff --git a/Content.Client/AME/Components/AMEControllerVisualsComponent.cs b/Content.Client/AME/Components/AMEControllerVisualsComponent.cs new file mode 100644 index 0000000000..282ddb3576 --- /dev/null +++ b/Content.Client/AME/Components/AMEControllerVisualsComponent.cs @@ -0,0 +1,9 @@ +using System.ComponentModel.DataAnnotations; +using Robust.Shared.GameObjects; + +namespace Content.Client.AME.Components; + +[RegisterComponent] +public sealed class AMEControllerVisualsComponent : Component +{ +} diff --git a/Content.Client/AME/Components/AMEShieldingVisualsComponent.cs b/Content.Client/AME/Components/AMEShieldingVisualsComponent.cs new file mode 100644 index 0000000000..4254d809f3 --- /dev/null +++ b/Content.Client/AME/Components/AMEShieldingVisualsComponent.cs @@ -0,0 +1,9 @@ +using System.ComponentModel.DataAnnotations; +using Robust.Shared.GameObjects; + +namespace Content.Client.AME.Components; + +[RegisterComponent] +public sealed class AMEShieldingVisualsComponent : Component +{ +} diff --git a/Content.Client/AME/Visualizers/AMEControllerVisualizer.cs b/Content.Client/AME/Visualizers/AMEControllerVisualizer.cs deleted file mode 100644 index 27526e1e64..0000000000 --- a/Content.Client/AME/Visualizers/AMEControllerVisualizer.cs +++ /dev/null @@ -1,56 +0,0 @@ -using JetBrains.Annotations; -using Robust.Client.GameObjects; -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using static Content.Shared.AME.SharedAMEControllerComponent; - -namespace Content.Client.AME.Visualizers -{ - [UsedImplicitly] - public sealed class AMEControllerVisualizer : AppearanceVisualizer - { - public override void InitializeEntity(EntityUid entity) - { - base.InitializeEntity(entity); - var sprite = IoCManager.Resolve().GetComponent(entity); - - sprite.LayerMapSet(Layers.Display, sprite.AddLayerState("control_on")); - sprite.LayerSetVisible(Layers.Display, false); - } - - public override void OnChangeData(AppearanceComponent component) - { - base.OnChangeData(component); - var sprite = IoCManager.Resolve().GetComponent(component.Owner); - if (component.TryGetData(AMEControllerVisuals.DisplayState, out var state)) - { - switch (state) - { - case "on": - sprite.LayerSetState(Layers.Display, "control_on"); - sprite.LayerSetVisible(Layers.Display, true); - break; - case "critical": - sprite.LayerSetState(Layers.Display, "control_critical"); - sprite.LayerSetVisible(Layers.Display, true); - break; - case "fuck": - sprite.LayerSetState(Layers.Display, "control_fuck"); - sprite.LayerSetVisible(Layers.Display, true); - break; - case "off": - sprite.LayerSetVisible(Layers.Display, false); - break; - default: - sprite.LayerSetVisible(Layers.Display, false); - break; - } - } - } - - enum Layers : byte - { - Display, - } - } -} diff --git a/Content.Client/AME/Visualizers/AMEVisualizer.cs b/Content.Client/AME/Visualizers/AMEVisualizer.cs deleted file mode 100644 index dabbccba20..0000000000 --- a/Content.Client/AME/Visualizers/AMEVisualizer.cs +++ /dev/null @@ -1,62 +0,0 @@ -using JetBrains.Annotations; -using Robust.Client.GameObjects; -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using static Content.Shared.AME.SharedAMEShieldComponent; - -namespace Content.Client.AME.Visualizers -{ - [UsedImplicitly] - public sealed class AMEVisualizer : AppearanceVisualizer - { - public override void InitializeEntity(EntityUid entity) - { - base.InitializeEntity(entity); - var sprite = IoCManager.Resolve().GetComponent(entity); - sprite.LayerMapSet(Layers.Core, sprite.AddLayerState("core")); - sprite.LayerSetVisible(Layers.Core, false); - sprite.LayerMapSet(Layers.CoreState, sprite.AddLayerState("core_weak")); - sprite.LayerSetVisible(Layers.CoreState, false); - } - - public override void OnChangeData(AppearanceComponent component) - { - base.OnChangeData(component); - var sprite = IoCManager.Resolve().GetComponent(component.Owner); - if (component.TryGetData(AMEShieldVisuals.Core, out var core)) - { - if (core == "isCore") - { - sprite.LayerSetState(Layers.Core, "core"); - sprite.LayerSetVisible(Layers.Core, true); - } - else - { - sprite.LayerSetVisible(Layers.Core, false); - } - } - - if (component.TryGetData(AMEShieldVisuals.CoreState, out var coreState)) - switch (coreState) - { - case "weak": - sprite.LayerSetState(Layers.CoreState, "core_weak"); - sprite.LayerSetVisible(Layers.CoreState, true); - break; - case "strong": - sprite.LayerSetState(Layers.CoreState, "core_strong"); - sprite.LayerSetVisible(Layers.CoreState, true); - break; - case "off": - sprite.LayerSetVisible(Layers.CoreState, false); - break; - } - } - } - - enum Layers : byte - { - Core, - CoreState, - } -} diff --git a/Content.Server/Entry/IgnoredComponents.cs b/Content.Server/Entry/IgnoredComponents.cs index b7987bc2e0..4775b11b4d 100644 --- a/Content.Server/Entry/IgnoredComponents.cs +++ b/Content.Server/Entry/IgnoredComponents.cs @@ -32,6 +32,8 @@ namespace Content.Server.Entry "PaperVisuals", "SurveillanceCameraVisuals", "KudzuVisuals", + "AMEControllerVisuals", + "AMEShieldingVisuals", }; } } diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/ame.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/ame.yml index 9df2dcdb41..ea9fed28b3 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/ame.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/ame.yml @@ -8,6 +8,7 @@ - type: Clickable - type: InteractionOutline - type: Sprite + netsync: false sprite: Structures/Power/Generation/ame.rsi state: control - type: Physics @@ -54,8 +55,7 @@ - key: enum.AMEControllerUiKey.Key type: AMEControllerBoundUserInterface - type: Appearance - visuals: - - type: AMEControllerVisualizer + - type: AMEControllerVisuals - type: NodeContainer examinable: true nodes: @@ -89,6 +89,7 @@ - type: Clickable - type: InteractionOutline - type: Sprite + netsync: false drawdepth: Walls sprite: Structures/Power/Generation/ame.rsi state: shield_0 @@ -136,8 +137,7 @@ energy: 0.5 color: "#00AAFF" - type: Appearance - visuals: - - type: AMEVisualizer + - type: AMEShieldingVisuals - type: Construction graph: AMEShielding node: ameShielding