From de19418126127b91166da6f52832832145003416 Mon Sep 17 00:00:00 2001 From: 0tito <147736056+0tito@users.noreply.github.com> Date: Fri, 6 Dec 2024 12:35:48 -0300 Subject: [PATCH] Add Sprite changes to Logic Gates to show the input/output state (#33277) --- .../DeviceLinking/Systems/LogicGateSystem.cs | 4 + .../DeviceLinking/SharedLogicGate.cs | 10 ++- .../Prototypes/Entities/Structures/gates.yml | 72 +++++++++++++++++- .../Objects/Devices/gates.rsi/logic_a.png | Bin 0 -> 7028 bytes .../Objects/Devices/gates.rsi/logic_b.png | Bin 0 -> 6960 bytes .../Objects/Devices/gates.rsi/logic_o.png | Bin 0 -> 6984 bytes .../Objects/Devices/gates.rsi/meta.json | 11 ++- 7 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 Resources/Textures/Objects/Devices/gates.rsi/logic_a.png create mode 100644 Resources/Textures/Objects/Devices/gates.rsi/logic_b.png create mode 100644 Resources/Textures/Objects/Devices/gates.rsi/logic_o.png diff --git a/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs b/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs index 598d5a2725..1280ecd5d1 100644 --- a/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs +++ b/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs @@ -102,10 +102,12 @@ public sealed class LogicGateSystem : EntitySystem if (args.Port == comp.InputPortA) { comp.StateA = state; + _appearance.SetData(uid, LogicGateVisuals.InputA, state == SignalState.High); //If A == High => Sets input A sprite to True } else if (args.Port == comp.InputPortB) { comp.StateB = state; + _appearance.SetData(uid, LogicGateVisuals.InputB, state == SignalState.High); //If B == High => Sets input B sprite to True } UpdateOutput(uid, comp); @@ -143,6 +145,8 @@ public sealed class LogicGateSystem : EntitySystem break; } + _appearance.SetData(uid, LogicGateVisuals.Output, output); + // only send a payload if it actually changed if (output != comp.LastOutput) { diff --git a/Content.Shared/DeviceLinking/SharedLogicGate.cs b/Content.Shared/DeviceLinking/SharedLogicGate.cs index 8d814f461f..75f8cb4951 100644 --- a/Content.Shared/DeviceLinking/SharedLogicGate.cs +++ b/Content.Shared/DeviceLinking/SharedLogicGate.cs @@ -23,7 +23,10 @@ public enum LogicGate : byte [Serializable, NetSerializable] public enum LogicGateVisuals : byte { - Gate + Gate, + InputA, + InputB, + Output } /// @@ -32,5 +35,8 @@ public enum LogicGateVisuals : byte [Serializable, NetSerializable] public enum LogicGateLayers : byte { - Gate + Gate, + InputA, + InputB, + Output } diff --git a/Resources/Prototypes/Entities/Structures/gates.yml b/Resources/Prototypes/Entities/Structures/gates.yml index 8e60962321..3cae4411a6 100644 --- a/Resources/Prototypes/Entities/Structures/gates.yml +++ b/Resources/Prototypes/Entities/Structures/gates.yml @@ -36,6 +36,15 @@ layers: - state: base - state: logic + - state: logic_a + visible: false + map: [ "enum.LogicGateLayers.InputA" ] + - state: logic_b + visible: false + map: [ "enum.LogicGateLayers.InputB" ] + - state: logic_o + visible: false + map: [ "enum.LogicGateLayers.Output" ] - state: or map: [ "enum.LogicGateLayers.Gate" ] - type: LogicGate @@ -63,7 +72,18 @@ Nor: { state: nor } Nand: { state: nand } Xnor: { state: xnor } - + enum.LogicGateVisuals.InputA: + enum.LogicGateLayers.InputA: + True: { visible: true } + False: { visible: false } + enum.LogicGateVisuals.InputB: + enum.LogicGateLayers.InputB: + True: { visible: true } + False: { visible: false } + enum.LogicGateVisuals.Output: + enum.LogicGateLayers.Output: + True: { visible: true } + False: { visible: false } - type: entity parent: LogicGateOr id: LogicGateAnd @@ -72,6 +92,16 @@ - type: Sprite layers: - state: base + - state: logic + - state: logic_a + visible: false + map: [ "enum.LogicGateLayers.InputA" ] + - state: logic_b + visible: false + map: [ "enum.LogicGateLayers.InputB" ] + - state: logic_o + visible: false + map: [ "enum.LogicGateLayers.Output" ] - state: and map: [ "enum.LogicGateLayers.Gate" ] - type: LogicGate @@ -85,6 +115,16 @@ - type: Sprite layers: - state: base + - state: logic + - state: logic_a + visible: false + map: [ "enum.LogicGateLayers.InputA" ] + - state: logic_b + visible: false + map: [ "enum.LogicGateLayers.InputB" ] + - state: logic_o + visible: false + map: [ "enum.LogicGateLayers.Output" ] - state: xor map: [ "enum.LogicGateLayers.Gate" ] - type: LogicGate @@ -98,6 +138,16 @@ - type: Sprite layers: - state: base + - state: logic + - state: logic_a + visible: false + map: [ "enum.LogicGateLayers.InputA" ] + - state: logic_b + visible: false + map: [ "enum.LogicGateLayers.InputB" ] + - state: logic_o + visible: false + map: [ "enum.LogicGateLayers.Output" ] - state: nor map: [ "enum.LogicGateLayers.Gate" ] - type: LogicGate @@ -111,6 +161,16 @@ - type: Sprite layers: - state: base + - state: logic + - state: logic_a + visible: false + map: [ "enum.LogicGateLayers.InputA" ] + - state: logic_b + visible: false + map: [ "enum.LogicGateLayers.InputB" ] + - state: logic_o + visible: false + map: [ "enum.LogicGateLayers.Output" ] - state: nand map: [ "enum.LogicGateLayers.Gate" ] - type: LogicGate @@ -124,6 +184,16 @@ - type: Sprite layers: - state: base + - state: logic + - state: logic_a + visible: false + map: [ "enum.LogicGateLayers.InputA" ] + - state: logic_b + visible: false + map: [ "enum.LogicGateLayers.InputB" ] + - state: logic_o + visible: false + map: [ "enum.LogicGateLayers.Output" ] - state: xnor map: [ "enum.LogicGateLayers.Gate" ] - type: LogicGate diff --git a/Resources/Textures/Objects/Devices/gates.rsi/logic_a.png b/Resources/Textures/Objects/Devices/gates.rsi/logic_a.png new file mode 100644 index 0000000000000000000000000000000000000000..4727847a9cef46a1366ef4e8e263bde91a364af2 GIT binary patch literal 7028 zcmdT}U1%It6rL@O+N-sNiY-CHhN4iAGIM`t476I)+MpIK6(YW5c6LSsR)dW-2GLT4 zYVo0p7QqMcr=TSiiw_DS1X2XSf{6I6F9m&5^rhJ1ckayW%pnzWLaJhc>c7<~YvAvHhb5@vPJDmYYx>nVtO`j}24%pFH9?JGaxXHgjh8QO8-g zd3x{o^uh3@`qT^0CzH>{_34+V;(9zYnK+C}R;P610$G-L}K6^?P;MK zS{VqgNq&f~W6^|oNu$w7I7fe=CG{vHlxzxDHsMr(xd?YAeG`)3lrW);mDG5`pb%KZ zxkyCph9WXh8K(mab(1#J5TDvQ(y=FWEeOPPmec1_hhvS+6_VuvNa@Fw`DSbavl#?&r&13FKC~iZ*CE_1Ga-D{>#y)`7Ec>J*DQafP!-R z5}hxUCh&sts zjrDA(x~#KxBMdD^ri$uDAgb=TT&sfU+Q?K*R}58$uC28~hTL$446Xj@$3Hh)e+8#n z_BFM3GS%?tGipnd=`(8ALT1fVyM8ijk6M*WpB<5^oSn(6Jl=QIs-7uRX|MMIwcg28 z$*oCh*GpzCQY&*=lVVpzTe?*yQ=Qp|)D|bxhtzr{(?N~CDRlYDPM@3X_cLSgu?HW> z+3AIWU+~`v-;9kuaA=iQYhwr}Q`z_PX$jHdvJ2(II$d9$Txw+SW*mmi!Tet4~^z%&{ z_SGIeeDmP0UvICEe|BncVE3#4PB_1PxcfE!%9YFSeRTf(+qFZdk3I9w{iCDn$Nu

Il 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