From 464f0e5abc07622bdf11751214162650207dddfe Mon Sep 17 00:00:00 2001 From: Otito Date: Mon, 11 Nov 2024 16:29:36 -0300 Subject: [PATCH 1/8] Add Sprite changes to Logic Gates to show the input/output state --- .../Components/LogicGateComponent.cs | 3 + .../DeviceLinking/Systems/LogicGateSystem.cs | 52 ++++++++++++++++++ .../DeviceLinking/SharedLogicGate.cs | 20 ++++++- .../Prototypes/Entities/Structures/gates.yml | 13 ++++- .../Objects/Devices/gates.rsi/logic.png | Bin 7196 -> 7278 bytes .../Objects/Devices/gates.rsi/logic_a.png | Bin 0 -> 7307 bytes .../Objects/Devices/gates.rsi/logic_ab.png | Bin 0 -> 7310 bytes .../Objects/Devices/gates.rsi/logic_abo.png | Bin 0 -> 7321 bytes .../Objects/Devices/gates.rsi/logic_ao.png | Bin 0 -> 7319 bytes .../Objects/Devices/gates.rsi/logic_b.png | Bin 0 -> 7307 bytes .../Objects/Devices/gates.rsi/logic_bo.png | Bin 0 -> 7318 bytes .../Objects/Devices/gates.rsi/logic_o.png | Bin 0 -> 7312 bytes .../Objects/Devices/gates.rsi/meta.json | 21 +++++++ 13 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 Resources/Textures/Objects/Devices/gates.rsi/logic_a.png create mode 100644 Resources/Textures/Objects/Devices/gates.rsi/logic_ab.png create mode 100644 Resources/Textures/Objects/Devices/gates.rsi/logic_abo.png create mode 100644 Resources/Textures/Objects/Devices/gates.rsi/logic_ao.png create mode 100644 Resources/Textures/Objects/Devices/gates.rsi/logic_b.png create mode 100644 Resources/Textures/Objects/Devices/gates.rsi/logic_bo.png create mode 100644 Resources/Textures/Objects/Devices/gates.rsi/logic_o.png diff --git a/Content.Server/DeviceLinking/Components/LogicGateComponent.cs b/Content.Server/DeviceLinking/Components/LogicGateComponent.cs index 61f85934b401..6d5eb2878ec1 100644 --- a/Content.Server/DeviceLinking/Components/LogicGateComponent.cs +++ b/Content.Server/DeviceLinking/Components/LogicGateComponent.cs @@ -18,6 +18,9 @@ public sealed partial class LogicGateComponent : Component [DataField] public LogicGate Gate = LogicGate.Or; + [DataField] + public LogicGateState State = LogicGateState.Logic; + /// /// Tool quality to use for cycling logic gate operations. /// Cannot be pulsing since linking uses that. diff --git a/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs b/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs index 598d5a2725ef..30c2b602f08f 100644 --- a/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs +++ b/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs @@ -125,21 +125,27 @@ private void UpdateOutput(EntityUid uid, LogicGateComponent comp) { case LogicGate.Or: output = a || b; + UpdateState(uid,comp,a,b,output); break; case LogicGate.And: output = a && b; + UpdateState(uid,comp,a,b,output); break; case LogicGate.Xor: output = a != b; + UpdateState(uid,comp,a,b,output); break; case LogicGate.Nor: output = !(a || b); + UpdateState(uid,comp,a,b,output); break; case LogicGate.Nand: output = !(a && b); + UpdateState(uid,comp,a,b,output); break; case LogicGate.Xnor: output = a == b; + UpdateState(uid,comp,a,b,output); break; } @@ -151,4 +157,50 @@ private void UpdateOutput(EntityUid uid, LogicGateComponent comp) _deviceLink.SendSignal(uid, comp.OutputPort, output); } } + + private void UpdateState(EntityUid uid, LogicGateComponent comp, bool a, bool b, bool output) + { + //im sorry for what im about to do + + if (a && b && output){ + comp.State = LogicGateState.LogicABO; + _appearance.SetData(uid, LogicGateVisuals.State, comp.State); + } + else if (a && b && !output) + { + comp.State = LogicGateState.LogicAB; + _appearance.SetData(uid, LogicGateVisuals.State, comp.State); + } + else if (!a && b && output) + { + comp.State = LogicGateState.LogicBO; + _appearance.SetData(uid, LogicGateVisuals.State, comp.State); + } + else if (a && !b && output) + { + comp.State = LogicGateState.LogicAO; + _appearance.SetData(uid, LogicGateVisuals.State, comp.State); + } + else if (!a && !b && output) + { + comp.State = LogicGateState.LogicO; + _appearance.SetData(uid, LogicGateVisuals.State, comp.State); + } + else if (!a && !b && !output) + { + comp.State = LogicGateState.Logic; + _appearance.SetData(uid, LogicGateVisuals.State, comp.State); + } + else if (a && !b && !output) + { + comp.State = LogicGateState.LogicA; + _appearance.SetData(uid, LogicGateVisuals.State, comp.State); + } + else if (!a && b && !output) + { + comp.State = LogicGateState.LogicB; + _appearance.SetData(uid, LogicGateVisuals.State, comp.State); + } + + } } diff --git a/Content.Shared/DeviceLinking/SharedLogicGate.cs b/Content.Shared/DeviceLinking/SharedLogicGate.cs index 8d814f461fe9..e0844ea44b76 100644 --- a/Content.Shared/DeviceLinking/SharedLogicGate.cs +++ b/Content.Shared/DeviceLinking/SharedLogicGate.cs @@ -23,7 +23,8 @@ public enum LogicGate : byte [Serializable, NetSerializable] public enum LogicGateVisuals : byte { - Gate + Gate, + State } /// @@ -32,5 +33,20 @@ public enum LogicGateVisuals : byte [Serializable, NetSerializable] public enum LogicGateLayers : byte { - Gate + Gate, + State } + +[Serializable, NetSerializable] +public enum LogicGateState : byte +{ + Logic, + LogicA, + LogicB, + LogicO, + LogicAB, + LogicAO, + LogicBO, + LogicABO +} + diff --git a/Resources/Prototypes/Entities/Structures/gates.yml b/Resources/Prototypes/Entities/Structures/gates.yml index 8e6096232142..d59853c7a3cc 100644 --- a/Resources/Prototypes/Entities/Structures/gates.yml +++ b/Resources/Prototypes/Entities/Structures/gates.yml @@ -36,8 +36,9 @@ layers: - state: base - state: logic + map: ["enum.LogicGateLayers.State"] - state: or - map: [ "enum.LogicGateLayers.Gate" ] + map: ["enum.LogicGateLayers.Gate"] - type: LogicGate - type: UseDelay delay: 0.5 @@ -55,6 +56,16 @@ - type: Appearance - type: GenericVisualizer visuals: + enum.LogicGateVisuals.State: + enum.LogicGateLayers.State: + Logic: { state: logic } + LogicA: { state: logic_a } + LogicB: { state: logic_b } + LogicO: { state: logic_o } + LogicAB: { state: logic_ab } + LogicAO: { state: logic_ao } + LogicBO: { state: logic_bo } + LogicABO: { state: logic_abo } enum.LogicGateVisuals.Gate: enum.LogicGateLayers.Gate: Or: { state: or } diff --git a/Resources/Textures/Objects/Devices/gates.rsi/logic.png b/Resources/Textures/Objects/Devices/gates.rsi/logic.png index cb120ce4961ab0ffcd9153c0f8d594e19cf9a057..9722cf918899ac83427f3351b8435a71d45801a2 100644 GIT binary patch delta 708 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 E0fp&lmjD0& literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Devices/gates.rsi/logic_abo.png b/Resources/Textures/Objects/Devices/gates.rsi/logic_abo.png new file mode 100644 index 0000000000000000000000000000000000000000..5910092d49c61bb6dc64b814a9a326687f9747e6 GIT binary patch literal 7321 zcmd5>3vdiw5iLN)i&T>Mdt~Vac#Qpx?bF-G%mZWNz+pE z>8!{<_U&smt#VrP(o35g(i^H8ulcFJ_DZj+d1Iqj<>lA<8lx+#qJx{9nU-{H*S2*W zrfa%9jR%KXI5NT2&`sQp;92M4joL~-8yMgi5ST?L4mTd~(2r*$0&*iKMm#_2XP6co zMjB5R9;0@em{BvM_Gcmo+(AD%9RP|L2%<`pvSf~^A|OGYiBU8!8;GFmw(H1b$SfBb zgyy&s_2@K(1mObP#L=ehIWpe*$|)FcGmW!pfN@szy=Z# z50MTB2Brs03NV1k1e_d745WyFw6Nnk6DD+}Q|GyGPf8ofz=;V|&tjTs+ahgo(=_cO z9^n{KahOChNnND5&wUvj+>>C-y}*~`K61&WAD$@Re54WQxzGXbLPASvGUT+wa}*Gb zhdh!@Km*!BIgX6i5t<7TJTQxxLKY5}78p^?SP}#h{uB|(5J#Y-lVl&b_6q7UgaE

Yyu(%RNS!a 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 Yep8*Ce&Z7S<4CJt&@jJiZu6%90iS1NlK=n! literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Devices/gates.rsi/logic_b.png b/Resources/Textures/Objects/Devices/gates.rsi/logic_b.png new file mode 100644 index 0000000000000000000000000000000000000000..2bcd3ce81f6af6633e4283a224fd733558c73bda GIT binary patch literal 7307 zcmd5>du$a|8Xu6l_7Ko*AP^o>5EM1y+;e8mnK7tEF_tWghDEk067FjR6m8@w5P_P2 zps1u-#mMf0g8rcx5gQ_kvSbZdBpSqLL5XHvA{bP}$A+!`zIpV{xxKW#v}v82d7Q`h z`+nc=eCL~Hy6WZ$H}+x!m|+;b##N4;h^XT7M0$*@ZJbgVB|h)4?syEL%C!mD0pvxt7b5 zcyOqNBjsNcriFXLe>Qn=qqf%1ng%!q1ZL5R!;J>A=*M#+1adfvb##icD1%EHy+rc%ANCz6GgI)aezb{0>tSp!tGppyO4Mx`>H_9!C*`{=) zhiE({{3oadR$0`c}rGI z;uGSo5=^9pr?5COA%#pyTS0J1@h;!kIteF&P1(mToU??->OhSBW%e2fYL1TUUaz=;V|Ph*-TrAXS`vMia$BN!tp z4pT@bWr`&CxTpMsXBF7;tnW*454q&h4^NbD9@2>OOyB@_p`fL*7;@U-848HT10HcE zpaE^697o2R2+f5ESuhKkLKY5}HW*RNSP}#h{4^2C5Qnd%6KC(c&gRr*2myl03<3*{ zC>UQe2wfN+s)>AP1^`ppAezppLKC@%{7B=(a+3xKJ#dhKngtv%$^xk1SI~Sf03+>U z0p$2cHW7a?Duf>-86{v_!I`g)gS9gw>^O9!n@CzNf=poJ*fwn*B#m^)36&k9f_hHB zoPmuz#d3Qx4duecwxJT0yTC9PLCnf!g$#WIlsTb+}RQRCiZ@1!rTlN#orGKg$+dtVFi=V@b=JO9x=%yKx}C$*#txksJLO-{cyr} z8dghtQRV7`Um>C`ox~p)lpiR;CW1pSNI5E}SjVWK(Awq7n?==B#mAyiM%537uE-*Q zG`4V5XZ*fM6&DZM7@3cr5J#inH%3pm;EGKJEDXNQdc6pfd-fbLuLwbr$hf0Y+^N zCJy6^P2Us>d}XKaZvJ;ZrSP!_AIRDH2R6NA7~Kwx8#`uFRp~dkY+b#(;)1~=X5HNL zU(=RWoUZ9JdD#8C>L%~rxN~;ph^ncVjGQbRm#rCcq~D;AHrL)+;`UxO;JbAn+`iMP z-9LE2$C;s-`CsinzOUhMX~pPNNvh<+7bNxa@B=<1aqv)v1p>u(t6odHLyQ zXRcnd{@}5BW&5t0-QcCK?e)%o=g7CFU-U%9_J$9}Oj@#YTF=GXJ{kFWYOC??$%CV3 z%qZQke!q9J&-jP=kVp5V9@^e;MbDdFUi+tA<|~8djkvDwdu5f+z5i*6Q?a$G&&Dsm z+dF32>Cq=n{gRnHc<4XBbdKy8HD$x$yK5UaoUC?w+&*hUnfd%PJwEF`b#jjN0;-&ldgh-g#FI zHV>_?U;Og(^}QRGmK^9meEI8j~x4zf=vTxeeFSB>?&~4{`u>t=qGREC7VeE_7O|SV4 Do@ihH literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Devices/gates.rsi/logic_bo.png b/Resources/Textures/Objects/Devices/gates.rsi/logic_bo.png new file mode 100644 index 0000000000000000000000000000000000000000..d9a84c319ced5173851d848a81ac8aa669e194b3 GIT binary patch literal 7318 zcmd5>eQZ|M8NY=<=veJ+Mue+DKl{|q4S3RxGr6}@@w1%)Ktz}s%aB` zOlMKuwu#F%t z27x)QL_ItWA-QE*32ESJa9v8v!L!YELqg9C1>mK*L$=He1a0kz+R;?53(j2uLbwXS z@k0-ON%YZ`3&o3ESWlAB3Xp2#@k%Eb|@FW(;N?5{5S*C>G7Re9MEmve9o|j6cJkHVYSO)c&QkX_Y=tc&M zDlix6&J0^7Y28dAlZI;=7VZEP0!Ew*Pq=zgq$O0w?tr0{A!ioEr?!>0Tq$Ubkq5AW zM8rcRgMrrRK9ejAAW}Xjn-T*lA|Ng7xXy$DUFp<$CfJkGLNah-0@c%)W>}U;n%po9 zD~CrgMpSGjkxWt-N$zn^`UiI<*mBqRCAo)Oa_EOA$~O;b#CaxgfV+^;QW^|7ZSxET zMB@REI1|u-wor~E<8_4QKm-@eLZ*;~!=(vE6f>3tfdoHAL^8zTD{05s`>x%rx(p#e zFe`(=LL&;s*9=1Ehlgq+7n%V;mnMj&v#QWU?jb+YII-NM0YVQPB%o#<2aK`+D)<#N z*9*W%yI25O{*g_@AB^(h2T4W=*jaGqt7BvB^awi+9qA^LhJzpz*f^$1n+Hi_+2n-E z4pBipr(f2Z;FNO~WlD^ueLXCpk)K{kT=Q%N@|P`wV3YUt5EDDf z3apMVG;LT^sG!`L5&c&7er3Yk3>L-T4-$n9MG9dBldtjiP+uM~$s<5)X)4(SL=337 zVcGp~!gm^0OLw{k*qAi`o9~hJ$D8V{{Loi4=DyLY-sG!i=Wy_mE)l|mEqESZG z4~C9#5kMMSII1&#U!;l(mv24`Iy-NWJ3n&nGs-3G560r}D14gFqEPae)aVtE4LNuT zP`~f4^)-dv51Ekys(``vDC8RM{z6Rh&+QfdVB96Tc6wkXrv)*RZcI7(FsBJJR zSf_zhv$n0C0O}|hl~qqLQayImQWzB$j0&v)sY8Xex(TTDuaUyM=bPP4jJi-pau=re z8RhC!0HfSsRHy=gRKwg>&j7U_jLNBJ7^yznZ{;v5Bp4Mq2S^<(q}6>u*B^|^xBD2W zxP`RTSpFXvsq714qz2OkAk|cD6~st2Ra+eZwHHi5K^@;?=7HsFmXOz`1?qO=}Dk#2cvT8EwNP= z@m3y2oed@q*$+N^ZKtLcHC0WSG;8jF=GlqI_E(Hp zJ^kpG!E4^yyXDG2Za;se@9w+$t#6sUedD;#j%>SO{cj%odGX>)#g%_q`1$zCal_2i zisGeJr{0=hT|IwE$?D7hx!m&hs@fGrmDA2toY}Ye)`ROVjlQw}#((~I%l%_38fOjr z;9%XZxtYbYXU{8}@$%u)LpSvwbYRH;R=?bE*xNsBYQvkQEBCy*VgH5W&6`d(J^pU` z!Z#yFzI*b**o~~>?&Hmuep20#DIfLgPlukp{M3)iZvWT(;p@j78~fmxkBb`XSC#*? zsbb3S=e%*pljXmiI-+Fs`}4{kI=cJNSK_|m3y+r;A9-@~hG}cJe>Cov&zH`uuO985 zyK~>+^Lsyd^xPV~;oj0Aw~cw_;*I4a2cP`Y6AdHkH=H_uaNXiEO->tn^1Qd>%F(Bv z{^eg!oLzhR%oneptvst)Tle1F^4x8uyEh#vI$?eFtF4o6edg@}|9;_gzqydHBTN%5UD@e|6ot(~qRq4}Wn$ zzbmiJ*naB3BUisId$zh_tTwUnk8@r)Hf#J%4}W>Nc2uP{|C9UnO&{0Tx3O>SlFtTS Ztf+tVjY$ie@P8w%YU+$BJ0|~P&G%N9Wh(#x literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Devices/gates.rsi/logic_o.png b/Resources/Textures/Objects/Devices/gates.rsi/logic_o.png new file mode 100644 index 0000000000000000000000000000000000000000..541fcdcd975abcf9f1cab34a6b3af7310bd1e87f GIT binary patch literal 7312 zcmd5>32YQq7@mSCydptCG-|K}sDhEqyfc4pr3fA9Og_s_r0 zbmf%EzwI^Wt)y^syK8=(FnC2c@0Cxs%DZQEG7HB8yl|X}di<*ki<^e2 zSvt--S1rqQaBp)}x8P@(1VlsJp;%^kh9)}_?Zi~B3eF<}gm4yuW~I5-dqvpi#NRK%)63Zt`^8wI+}4Ar#FDAYtP;oiY5 zu!@jh!qz$IgHeQ2y84+Qa7Yzo3QO?otm^$?smN4|NQ1vi2RbVdCo$0m}pnWrh z70@GwZsH0+ArQp5h>D0B5FraLR5yw>~bofeNm504&(lU_@oS4A%5T@y-DFO!9b=^$k;f)a$n^{OE zOBDegL@XU>o;ZZ%CJA(}u&7onn0gFSa z{iJzV(m+}oj8c!b5Ar;JG$caOA2ObjBlT=jQXv1M_=IS&L@5Fz?7FWOWdI2y$aTwd zkPL1KBnae-uWGSW*^;Z44=}M$0mCuyI3TOQ1~RE1TjheH=&8aIx$nZk4j&S@wlhC#&yHkh_I9X6!=OEI+#j=GkaYIaOhOEMi>2Z~l(tLjuP z9B+qR!+rh`%Xl6ol8iQ*taLY7#OtQv*_jgM=2-w|-{XvjHs!r9TUz*yOVtOrLL^iHRo--}rj~y!G0Ld=A)BzElNB1hh1t zc_7&bq|Z+*?lMXz><;?$w$P+i{F!++13+mj44InSD--WHIdkl0)TI zPK@MGxzz?xYhrQ&k|(#;YJ*X0q4HQWpzOu80VEG+-)hDv`%rl%fX-G-Ga$L+Y+LP; z=GW3LAV2%A0`iOT^J&N5M>0%j0<|ng=G0YY%Pjn@42-fBO1hQ+ARYfZhSm;)7k?!9vok{i(UR% z{*2P$`;R|${gfS*uhw5Mr?zP4?hSK#IDJ-LdSdgMhVPG0G*5LmXZC!u_MZFqKG1M& z-iq-%igxUK_M(#5kEc#QShDTN+7F|HY7fs<`Ewt9SNw(A`{u_d*UuWdtFrF%pI>{U zw(zAR!){$46q|}0nm!&gZSn3;doF5ddihwT+5Me+pSVKbbIz1Q3mX^r8F0gi@h`4B zcD(8CcMfc*{C<7O);*Wco4RcHmZ59k3-8H~)s$@?Qnu~L%B9Mm3l9BuqH^T1v7FG%q79IR1)^}gsz?#*Ad;MEozv=yXcYL|5>4&O)Q|DD5nZM^w<+6{K^gi|G;C|1n zo?i6+qfKisJ365J*BK|zRP<@Q{ie#${*#A}8b8h)^3dT&7L3?@c Date: Wed, 13 Nov 2024 23:34:19 -0300 Subject: [PATCH 2/8] Separated layers for each input/output, now a bit less evil --- .../Components/LogicGateComponent.cs | 14 +++- .../DeviceLinking/Systems/LogicGateSystem.cs | 68 ++++++------------ .../DeviceLinking/SharedLogicGate.cs | 20 +++--- .../Prototypes/Entities/Structures/gates.yml | 31 ++++---- .../gates.rsi/{logic_ab.png => empty.png} | Bin 7310 -> 6917 bytes .../Objects/Devices/gates.rsi/logic_a.png | Bin 7307 -> 7028 bytes .../Objects/Devices/gates.rsi/logic_abo.png | Bin 7321 -> 0 bytes .../Objects/Devices/gates.rsi/logic_ao.png | Bin 7319 -> 0 bytes .../Objects/Devices/gates.rsi/logic_b.png | Bin 7307 -> 6960 bytes .../Objects/Devices/gates.rsi/logic_bo.png | Bin 7318 -> 0 bytes .../Objects/Devices/gates.rsi/logic_o.png | Bin 7312 -> 6984 bytes .../Objects/Devices/gates.rsi/meta.json | 15 +--- 12 files changed, 65 insertions(+), 83 deletions(-) rename Resources/Textures/Objects/Devices/gates.rsi/{logic_ab.png => empty.png} (81%) delete mode 100644 Resources/Textures/Objects/Devices/gates.rsi/logic_abo.png delete mode 100644 Resources/Textures/Objects/Devices/gates.rsi/logic_ao.png delete mode 100644 Resources/Textures/Objects/Devices/gates.rsi/logic_bo.png diff --git a/Content.Server/DeviceLinking/Components/LogicGateComponent.cs b/Content.Server/DeviceLinking/Components/LogicGateComponent.cs index 6d5eb2878ec1..5d16a6d48ce0 100644 --- a/Content.Server/DeviceLinking/Components/LogicGateComponent.cs +++ b/Content.Server/DeviceLinking/Components/LogicGateComponent.cs @@ -18,8 +18,18 @@ public sealed partial class LogicGateComponent : Component [DataField] public LogicGate Gate = LogicGate.Or; + + [DataField] + public LogicGateState InputA = LogicGateState.Low; + + + [DataField] + public LogicGateState InputB = LogicGateState.Low; + + [DataField] - public LogicGateState State = LogicGateState.Logic; + public LogicGateState Output = LogicGateState.Low; + ///

/// Tool quality to use for cycling logic gate operations. @@ -59,6 +69,8 @@ public sealed partial class LogicGateComponent : Component [DataField] public SignalState StateB = SignalState.Low; + + [DataField] public bool LastOutput; } diff --git a/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs b/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs index 30c2b602f08f..55df72e7d5b6 100644 --- a/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs +++ b/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs @@ -3,6 +3,7 @@ using Content.Shared.DeviceLinking; using Content.Shared.Examine; using Content.Shared.Interaction; +using Content.Shared.Lathe; using Content.Shared.Popups; using Content.Shared.Timing; using Content.Shared.Tools.Systems; @@ -102,10 +103,12 @@ private void OnSignalReceived(EntityUid uid, LogicGateComponent comp, ref Signal if (args.Port == comp.InputPortA) { comp.StateA = state; + _appearance.SetData(uid, LogicGateVisuals.InputA, UpdateState(state)); } else if (args.Port == comp.InputPortB) { comp.StateB = state; + _appearance.SetData(uid, LogicGateVisuals.InputA, UpdateState(state)); } UpdateOutput(uid, comp); @@ -125,27 +128,27 @@ private void UpdateOutput(EntityUid uid, LogicGateComponent comp) { case LogicGate.Or: output = a || b; - UpdateState(uid,comp,a,b,output); + _appearance.SetData(uid, LogicGateVisuals.Output, output ? LogicGateState.High : LogicGateState.Low); break; case LogicGate.And: output = a && b; - UpdateState(uid,comp,a,b,output); + _appearance.SetData(uid, LogicGateVisuals.Output, output ? LogicGateState.High : LogicGateState.Low); break; case LogicGate.Xor: output = a != b; - UpdateState(uid,comp,a,b,output); + _appearance.SetData(uid, LogicGateVisuals.Output, output ? LogicGateState.High : LogicGateState.Low); break; case LogicGate.Nor: output = !(a || b); - UpdateState(uid,comp,a,b,output); + _appearance.SetData(uid, LogicGateVisuals.Output, output ? LogicGateState.High : LogicGateState.Low); break; case LogicGate.Nand: output = !(a && b); - UpdateState(uid,comp,a,b,output); + _appearance.SetData(uid, LogicGateVisuals.Output, output ? LogicGateState.High : LogicGateState.Low); break; case LogicGate.Xnor: output = a == b; - UpdateState(uid,comp,a,b,output); + _appearance.SetData(uid, LogicGateVisuals.Output, output ? LogicGateState.High : LogicGateState.Low); break; } @@ -158,49 +161,20 @@ private void UpdateOutput(EntityUid uid, LogicGateComponent comp) } } - private void UpdateState(EntityUid uid, LogicGateComponent comp, bool a, bool b, bool output) + LogicGateState UpdateState(SignalState state) { - //im sorry for what im about to do - - if (a && b && output){ - comp.State = LogicGateState.LogicABO; - _appearance.SetData(uid, LogicGateVisuals.State, comp.State); - } - else if (a && b && !output) - { - comp.State = LogicGateState.LogicAB; - _appearance.SetData(uid, LogicGateVisuals.State, comp.State); - } - else if (!a && b && output) - { - comp.State = LogicGateState.LogicBO; - _appearance.SetData(uid, LogicGateVisuals.State, comp.State); - } - else if (a && !b && output) - { - comp.State = LogicGateState.LogicAO; - _appearance.SetData(uid, LogicGateVisuals.State, comp.State); - } - else if (!a && !b && output) + switch (state) { - comp.State = LogicGateState.LogicO; - _appearance.SetData(uid, LogicGateVisuals.State, comp.State); - } - else if (!a && !b && !output) - { - comp.State = LogicGateState.Logic; - _appearance.SetData(uid, LogicGateVisuals.State, comp.State); - } - else if (a && !b && !output) - { - comp.State = LogicGateState.LogicA; - _appearance.SetData(uid, LogicGateVisuals.State, comp.State); - } - else if (!a && b && !output) - { - comp.State = LogicGateState.LogicB; - _appearance.SetData(uid, LogicGateVisuals.State, comp.State); - } + case SignalState.High: + return LogicGateState.High; + break; + case SignalState.Low: + return LogicGateState.Low; + break; + default: + return LogicGateState.Momentary; + break; + } } } diff --git a/Content.Shared/DeviceLinking/SharedLogicGate.cs b/Content.Shared/DeviceLinking/SharedLogicGate.cs index e0844ea44b76..10dad709d1d6 100644 --- a/Content.Shared/DeviceLinking/SharedLogicGate.cs +++ b/Content.Shared/DeviceLinking/SharedLogicGate.cs @@ -24,7 +24,9 @@ public enum LogicGate : byte public enum LogicGateVisuals : byte { Gate, - State + InputA, + InputB, + Output } /// @@ -34,19 +36,15 @@ public enum LogicGateVisuals : byte public enum LogicGateLayers : byte { Gate, - State + InputA, + InputB, + Output } [Serializable, NetSerializable] public enum LogicGateState : byte { - Logic, - LogicA, - LogicB, - LogicO, - LogicAB, - LogicAO, - LogicBO, - LogicABO + Low, + High, + Momentary } - diff --git a/Resources/Prototypes/Entities/Structures/gates.yml b/Resources/Prototypes/Entities/Structures/gates.yml index d59853c7a3cc..9b69dfc3b408 100644 --- a/Resources/Prototypes/Entities/Structures/gates.yml +++ b/Resources/Prototypes/Entities/Structures/gates.yml @@ -36,9 +36,14 @@ layers: - state: base - state: logic - map: ["enum.LogicGateLayers.State"] + - state: empty + map: ["enum.LogicGateLayers.InputA"] + - state: empty + map: [ "enum.LogicGateLayers.InputB" ] + - state: empty + map: [ "enum.LogicGateLayers.Output" ] - state: or - map: ["enum.LogicGateLayers.Gate"] + map: [ "enum.LogicGateLayers.Gate" ] - type: LogicGate - type: UseDelay delay: 0.5 @@ -56,16 +61,6 @@ - type: Appearance - type: GenericVisualizer visuals: - enum.LogicGateVisuals.State: - enum.LogicGateLayers.State: - Logic: { state: logic } - LogicA: { state: logic_a } - LogicB: { state: logic_b } - LogicO: { state: logic_o } - LogicAB: { state: logic_ab } - LogicAO: { state: logic_ao } - LogicBO: { state: logic_bo } - LogicABO: { state: logic_abo } enum.LogicGateVisuals.Gate: enum.LogicGateLayers.Gate: Or: { state: or } @@ -74,6 +69,18 @@ Nor: { state: nor } Nand: { state: nand } Xnor: { state: xnor } + enum.LogicGateVisuals.InputA: + enum.LogicGateLayers.InputA: + High: {state: logic_a } + Low: { state: empty } + enum.LogicGateVisuals.InputB: + enum.LogicGateLayers.InputB: + High: { state: logic_b } + Low: { state: empty } + enum.LogicGateVisuals.Output: + enum.LogicGateLayers.Output: + High: { state: logic_o } + Low: { state: empty } - type: entity parent: LogicGateOr diff --git a/Resources/Textures/Objects/Devices/gates.rsi/logic_ab.png b/Resources/Textures/Objects/Devices/gates.rsi/empty.png similarity index 81% rename from Resources/Textures/Objects/Devices/gates.rsi/logic_ab.png rename to Resources/Textures/Objects/Devices/gates.rsi/empty.png index 0b3f2f14d5054b2ea9014706ae00d8b7027dc7c9..f41b0e75ac0048fa2bfc493cd2944da8dabd1864 100644 GIT binary patch delta 313 zcmeCPY&F~9%sQEcO@xta@@`f+HggLzLvw@4imWQaTxQ0`DMm(S7Um{EXkeUZlr}kn z)eNZc9E;fGrL0DrTt;bTra&E*ljT{(CjVv=nw-q0IoX0;Zt`a~*U3F>a;#iNM#jdI zKeCB1nOaWHX4jh>#_q!d)R6)*&&1f=XmT}&frde%kpT#rTW~>TQq0oKOw26J%*-uK zOn@#jF*60aW%7SU$;n|HLO^4IswXdCcL7;okU04zyUym-9G?U;uH9pZVPIhJ@pN$v ziQs&DL6MKafW!Hsp8!ky6O9T#+xFQpW*-AZm-x;*qS$aCxv})t`@ESm@5Blk=FhbJ rnYCio>c3Nz8yJ{46d=R_b0+DC3oP|=Jd57~&1LX(^>bP0l+XkKmug(D delta 737 zcmZoQ>$BY8%qnVTVrFcdVq|1yVQvD12F8g-X369Xq0MZY?j7lmSU6!RA^{! zFjtN$xY^Cmty3aoXu`Bc>|mMlRt8bO%CNy zWi>J~NaUJa&!Hm=a|_5NAUB$%n56+#1KnV5$u;>myO}V;rC@nub0e(~u8ujcq9 zSkHfH$p!`n#;cw#jv*18Z$meB9dZzmRm}?EJ{VX3-~)G1MCT92aM=jX_HWx1k19sQ zsB5gud9!ZQN9I3Gk9WO35;o!SgcXAQk!Rf=`IxCU`HDHI8Rw_P-+OnC>4#KE9cGr#+N0hmSyBT zk$F*KrPa~1K1@4t{q^jZv(KhIu;}~4C*{SYk-qq%1)K2VntnIsjYnpmZEID(dBSo* zrdQu8p@m!;oJ%feK4p9Htk0uqC)?D!C-Ba=5qnTmr&MzBTYyvjl{BmaY z{W$-HTpL(Ec&)wuT4{NJ#)+8q`@P*+4wv5LSRo;#Euj5Df%PB5gxxh-^Gm#+F#v(5 LtDnm{r-UW|tV)xgut+d+P2S5YGg*>Vo5_@G z@^V%ucB3>SBZEY)$ro5eCOfl=Opahx04l0rmE!^GOffewPBbw#H=10{A?L+qWMFJ$ zlxl2fYyc#Ufoz~oBLfhGt4#sgYGP(-W@c__Vgj_;#LUz<#mLCm$QY;>2or(2jkqTJ za41jy!^Sx|lU)XA+kG~*$vtdJK-Nb#naRm)5|cI9MSwgTcB#pq*@T!(EhlHQOMw;Y zP38j%zF;?!%%Ny~e=6u-ntcF(iUBIYEMTv7&(#6O1^Zc)+9Q zug><;e}}L94czNAMQ%n_*UMkOs=Ce|NM{hX^PC`KZf>rqDsob|gu&X{+Eq;8lFtRk zHEY(ioRN6;iCbK6$x41sH%8xFb}73Dd@}o(s4sI?pQxlL2Qq9aKSF@{3UcfE|RD7RJ52!+li_6FWW^(pRCVe zK6x6O2vE@~HlQ&~T$9hUN%8<4Xl`JfXku(`#5FmVO-{hbz}N`n5n}@&X>4q?c_qge z!Fv8nOExetFkbR>aSVyzd>gvA>yU$hoN878_rbXP2h=?hRUa|OD6)qgTDUjYqmV=F zI;)7b^zPL;H4O6~>`H?>v43)X)LOTs$mO}WbKWd(yqR-snMBSL znHOcdtvb5ahiNCSzn=Yc_W9=zD(B5&=hbDLviV|$Omk=8v&9!Zaz3VQPJHNTR>UXK zHf`}bmlaG=OfO5Kb~CVRh;=KKSjbp#OqlB{S`50X z%QLyIDRI{5u1UUEC0JByC7WS3`=E^>|LuCC#)3&KpROr2%3dgqEu7(_7N9k?BV@1k zDbZ{582=j8JKvehu#@$N@2BHU-->qb*=hG;IorRA4-?yG9E$lJ!6bAgYwMDqueZO^ z3}Kwc@Gt1~*Ig$xMYy!Wzm-4jNcgc&o>9~}i8YD!-I4?5b~Tm%dH3vdiw5iLN)i&T>Mdt~Vac#Qpx?bF-G%mZWNz+pE z>8!{<_U&smt#VrP(o35g(i^H8ulcFJ_DZj+d1Iqj<>lA<8lx+#qJx{9nU-{H*S2*W zrfa%9jR%KXI5NT2&`sQp;92M4joL~-8yMgi5ST?L4mTd~(2r*$0&*iKMm#_2XP6co zMjB5R9;0@em{BvM_Gcmo+(AD%9RP|L2%<`pvSf~^A|OGYiBU8!8;GFmw(H1b$SfBb zgyy&s_2@K(1mObP#L=ehIWpe*$|)FcGmW!pfN@szy=Z# z50MTB2Brs03NV1k1e_d745WyFw6Nnk6DD+}Q|GyGPf8ofz=;V|&tjTs+ahgo(=_cO z9^n{KahOChNnND5&wUvj+>>C-y}*~`K61&WAD$@Re54WQxzGXbLPASvGUT+wa}*Gb zhdh!@Km*!BIgX6i5t<7TJTQxxLKY5}78p^?SP}#h{uB|(5J#Y-lVl&b_6q7UgaE

Yyu(%RNS!a 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 Yep8*Ce&Z7S<4CJt&@jJiZu6%90iS1NlK=n! diff --git a/Resources/Textures/Objects/Devices/gates.rsi/logic_b.png b/Resources/Textures/Objects/Devices/gates.rsi/logic_b.png index 2bcd3ce81f6af6633e4283a224fd733558c73bda..e8a848ab9b403acf14f465355a81881d851e2bb6 100644 GIT binary patch delta 401 zcmeCS++eohDa&M5HcfsmGh?$fvlOE=a|<&=bA!o>tV)xgut+d+P2S5YGg*>Vo5_@G z@^V%ucB3>SBZEY)$ro5eCOfl=Opahx04l0rmE!^GOffewPBbw#H=10{A?L+qWMFJ$ zlxl2fYyc#Ufoz~oBLfhGt4#sgYGP(-W@c__Vgj_;#LUz<#mLCm$QY;>2or(2jkqTJ za41jy!^Sx|lU)XA+kG~*$vtdJK-Nb#naRm)5|cI9MSwgTcB#pq*@T!(EhlHQOMw;Y zP38j%zF;?!%%Ny~e=6Q10pC7!tvmoFKuvSkXX=iCKoJXUCiO zuU;i3q^71Oq^GApc=oJKySu-?eRJli73@}o(s4sI?pQxlL2Qq9aKSF@{3UcfE|RD7RJ52!+li_6FWW^(pRCVe zK6x6O2vE@~HlQ&~T$9hUN%8<4Xl`JfXku(`#5FmVO-{hbz}N`n5n}@&X>4q?c_qge z!Fv8nOExetFkbR>aSVyzd>gv4>yU$htZG&O_rbV&hd)gsVM=uewuT*AxHs2BH6lh` zBh2hyL$CY;ahdB&Cug%-@^wmmoN+aFuf^oEvgJ2Y6jREcoqcoq_FYZ~n?LeE3fNIg-%=L-cC!l=RNbh*z9P6@^pvo zx34;e)a;GpuHJl8<9^achV!4V*kojIE|_yR?X!qakCA-;@ucqUw{^MwH%;_DV6a7| zRMkoJf{@4Z%ePo995zOXEPVX&gk!@WoA+OTri95V&VOw2V3%Ixg1dQ>|1J1jV8Ifb zs_pIs>0P=S(@$S`|NW@hv$daRa$Qs6 ztkGK=e6LEdsMJc<;7-@6>P@Rp@!hUxy(FR1xM!_p*va~1?Wf~S-?Fyu+HLn@IorRA4-?yG9J=!>f=TE~*48CIUvGb- z8NxV?;a`w+Z`%n?5iYIpZ{<%r5`OHHXB2e?hy0QQ;wdMp6*u!gTEGAVp00i_>zopr E0HgCZdjJ3c diff --git a/Resources/Textures/Objects/Devices/gates.rsi/logic_bo.png b/Resources/Textures/Objects/Devices/gates.rsi/logic_bo.png deleted file mode 100644 index d9a84c319ced5173851d848a81ac8aa669e194b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7318 zcmd5>eQZ|M8NY=<=veJ+Mue+DKl{|q4S3RxGr6}@@w1%)Ktz}s%aB` zOlMKuwu#F%t z27x)QL_ItWA-QE*32ESJa9v8v!L!YELqg9C1>mK*L$=He1a0kz+R;?53(j2uLbwXS z@k0-ON%YZ`3&o3ESWlAB3Xp2#@k%Eb|@FW(;N?5{5S*C>G7Re9MEmve9o|j6cJkHVYSO)c&QkX_Y=tc&M zDlix6&J0^7Y28dAlZI;=7VZEP0!Ew*Pq=zgq$O0w?tr0{A!ioEr?!>0Tq$Ubkq5AW zM8rcRgMrrRK9ejAAW}Xjn-T*lA|Ng7xXy$DUFp<$CfJkGLNah-0@c%)W>}U;n%po9 zD~CrgMpSGjkxWt-N$zn^`UiI<*mBqRCAo)Oa_EOA$~O;b#CaxgfV+^;QW^|7ZSxET zMB@REI1|u-wor~E<8_4QKm-@eLZ*;~!=(vE6f>3tfdoHAL^8zTD{05s`>x%rx(p#e zFe`(=LL&;s*9=1Ehlgq+7n%V;mnMj&v#QWU?jb+YII-NM0YVQPB%o#<2aK`+D)<#N z*9*W%yI25O{*g_@AB^(h2T4W=*jaGqt7BvB^awi+9qA^LhJzpz*f^$1n+Hi_+2n-E z4pBipr(f2Z;FNO~WlD^ueLXCpk)K{kT=Q%N@|P`wV3YUt5EDDf z3apMVG;LT^sG!`L5&c&7er3Yk3>L-T4-$n9MG9dBldtjiP+uM~$s<5)X)4(SL=337 zVcGp~!gm^0OLw{k*qAi`o9~hJ$D8V{{Loi4=DyLY-sG!i=Wy_mE)l|mEqESZG z4~C9#5kMMSII1&#U!;l(mv24`Iy-NWJ3n&nGs-3G560r}D14gFqEPae)aVtE4LNuT zP`~f4^)-dv51Ekys(``vDC8RM{z6Rh&+QfdVB96Tc6wkXrv)*RZcI7(FsBJJR zSf_zhv$n0C0O}|hl~qqLQayImQWzB$j0&v)sY8Xex(TTDuaUyM=bPP4jJi-pau=re z8RhC!0HfSsRHy=gRKwg>&j7U_jLNBJ7^yznZ{;v5Bp4Mq2S^<(q}6>u*B^|^xBD2W zxP`RTSpFXvsq714qz2OkAk|cD6~st2Ra+eZwHHi5K^@;?=7HsFmXOz`1?qO=}Dk#2cvT8EwNP= z@m3y2oed@q*$+N^ZKtLcHC0WSG;8jF=GlqI_E(Hp zJ^kpG!E4^yyXDG2Za;se@9w+$t#6sUedD;#j%>SO{cj%odGX>)#g%_q`1$zCal_2i zisGeJr{0=hT|IwE$?D7hx!m&hs@fGrmDA2toY}Ye)`ROVjlQw}#((~I%l%_38fOjr z;9%XZxtYbYXU{8}@$%u)LpSvwbYRH;R=?bE*xNsBYQvkQEBCy*VgH5W&6`d(J^pU` z!Z#yFzI*b**o~~>?&Hmuep20#DIfLgPlukp{M3)iZvWT(;p@j78~fmxkBb`XSC#*? zsbb3S=e%*pljXmiI-+Fs`}4{kI=cJNSK_|m3y+r;A9-@~hG}cJe>Cov&zH`uuO985 zyK~>+^Lsyd^xPV~;oj0Aw~cw_;*I4a2cP`Y6AdHkH=H_uaNXiEO->tn^1Qd>%F(Bv z{^eg!oLzhR%oneptvst)Tle1F^4x8uyEh#vI$?eFtF4o6edg@}|9;_gzqydHBTN%5UD@e|6ot(~qRq4}Wn$ zzbmiJ*naB3BUisId$zh_tTwUnk8@r)Hf#J%4}W>Nc2uP{|C9UnO&{0Tx3O>SlFtTS Ztf+tVjY$ie@P8w%YU+$BJ0|~P&G%N9Wh(#x diff --git a/Resources/Textures/Objects/Devices/gates.rsi/logic_o.png b/Resources/Textures/Objects/Devices/gates.rsi/logic_o.png index 541fcdcd975abcf9f1cab34a6b3af7310bd1e87f..e7af90e9514b2725dce1d7403478ef52346867f3 100644 GIT binary patch delta 258 zcmbPWdBSYNCpKmaQ=`cX*d-?OviC`wq?sFWnOT~dnx&eXm>B}GrCFL;s&R^u(PTMx z@yVaqoF?C6=MphV1}QN!2P&`tNg5j)8*SF*C=jZjc9``V0|P_9r;B4q1ZQ%B1nXi& z11TnE8K#~qTk0PkYE5{&W5KjZVi6>*9gcEUa%HEgArfX2LVQczNA(#ty(8BkGCaX?l5FW*!pcaC?k8n?r!b-$Pu(1jp z+6z}nD#7BKLr|=2ueA|tpFpm&lWPSz4v8A^n2o#U;!HO812$O*nV)ZVzkItp0f6-aRF_xpWFr_+$lW+9)?b1*WV%jHDeFbq+TPPJNpC9!O<+wHQspC+c$DO-|a zGnYiW-PS==ezVyKd%NAL*lacf$8nS&G_(Xz&U(Fm4i-l7N28J0;@xh?!jo*~l1Qbr z9CcHKDxf8h$z-$(aDY;&BvPl-iGu+7dCv0jY&_UPKHIiowOWxASe8Y`gTdqR7z`<& zBw#!Y6L<@MaB+NBDiu}WH^$>Jgpo)lJ%RW8y}#_6O%g!F;cyVZupWSmBMJX_wU^3u zU*3e>>2$zTb$HWvv}XVt(SHp0!y^-%i&a3%hTV`G)D~FpSM>a84!vGaY-7Rn&eS#Q zStNnag?TQR&qA(Ns|AflBUmT=u>B_sh#*OzU@j7N*Z~KF0Zb+nD3{AbsXi3t3Tw}R zewn`^?oNQ*0{kZVV?lepUf*0Fj8g-DJov~%Okw;nmVg8`n@wr{`Yn43H33Tif2p-v xP1F>NMO7>Ny9z`wT-S|&iXpKAu>yBe;0vPxem#dgE(HJp002ovPDHLkV1iL!`eOh9 diff --git a/Resources/Textures/Objects/Devices/gates.rsi/meta.json b/Resources/Textures/Objects/Devices/gates.rsi/meta.json index 818b72eeebe4..050808551c7c 100644 --- a/Resources/Textures/Objects/Devices/gates.rsi/meta.json +++ b/Resources/Textures/Objects/Devices/gates.rsi/meta.json @@ -13,26 +13,17 @@ { "name": "logic" }, - { - "name": "logic_a" - }, - { - "name": "logic_b" - }, { "name": "logic_o" }, { - "name": "logic_ab" - }, - { - "name": "logic_ao" + "name": "logic_b" }, { - "name": "logic_bo" + "name": "logic_a" }, { - "name": "logic_abo" + "name": "empty" }, { "name": "or" From 16a2e134764bacee64645c97c52cc89700a66cb0 Mon Sep 17 00:00:00 2001 From: Otito Date: Wed, 20 Nov 2024 12:40:37 -0300 Subject: [PATCH 3/8] Removed unused dependency, fixed inconsistent spacings, and changes to the function UpdateState --- .../Components/LogicGateComponent.cs | 6 ---- .../DeviceLinking/Systems/LogicGateSystem.cs | 32 ++++++------------- .../Prototypes/Entities/Structures/gates.yml | 4 +-- 3 files changed, 12 insertions(+), 30 deletions(-) diff --git a/Content.Server/DeviceLinking/Components/LogicGateComponent.cs b/Content.Server/DeviceLinking/Components/LogicGateComponent.cs index 5d16a6d48ce0..52bd32b27fb0 100644 --- a/Content.Server/DeviceLinking/Components/LogicGateComponent.cs +++ b/Content.Server/DeviceLinking/Components/LogicGateComponent.cs @@ -18,19 +18,15 @@ public sealed partial class LogicGateComponent : Component [DataField] public LogicGate Gate = LogicGate.Or; - [DataField] public LogicGateState InputA = LogicGateState.Low; - [DataField] public LogicGateState InputB = LogicGateState.Low; - [DataField] public LogicGateState Output = LogicGateState.Low; - ///

/// Tool quality to use for cycling logic gate operations. /// Cannot be pulsing since linking uses that. @@ -69,8 +65,6 @@ public sealed partial class LogicGateComponent : Component [DataField] public SignalState StateB = SignalState.Low; - - [DataField] public bool LastOutput; } diff --git a/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs b/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs index 55df72e7d5b6..43d5868e7a4b 100644 --- a/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs +++ b/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs @@ -3,7 +3,6 @@ using Content.Shared.DeviceLinking; using Content.Shared.Examine; using Content.Shared.Interaction; -using Content.Shared.Lathe; using Content.Shared.Popups; using Content.Shared.Timing; using Content.Shared.Tools.Systems; @@ -103,12 +102,12 @@ private void OnSignalReceived(EntityUid uid, LogicGateComponent comp, ref Signal if (args.Port == comp.InputPortA) { comp.StateA = state; - _appearance.SetData(uid, LogicGateVisuals.InputA, UpdateState(state)); + _appearance.SetData(uid, LogicGateVisuals.InputA, SignalToLogicState(state)); } else if (args.Port == comp.InputPortB) { comp.StateB = state; - _appearance.SetData(uid, LogicGateVisuals.InputA, UpdateState(state)); + _appearance.SetData(uid, LogicGateVisuals.InputB, SignalToLogicState(state)); } UpdateOutput(uid, comp); @@ -128,30 +127,26 @@ private void UpdateOutput(EntityUid uid, LogicGateComponent comp) { case LogicGate.Or: output = a || b; - _appearance.SetData(uid, LogicGateVisuals.Output, output ? LogicGateState.High : LogicGateState.Low); break; case LogicGate.And: output = a && b; - _appearance.SetData(uid, LogicGateVisuals.Output, output ? LogicGateState.High : LogicGateState.Low); break; case LogicGate.Xor: output = a != b; - _appearance.SetData(uid, LogicGateVisuals.Output, output ? LogicGateState.High : LogicGateState.Low); break; case LogicGate.Nor: output = !(a || b); - _appearance.SetData(uid, LogicGateVisuals.Output, output ? LogicGateState.High : LogicGateState.Low); break; case LogicGate.Nand: output = !(a && b); - _appearance.SetData(uid, LogicGateVisuals.Output, output ? LogicGateState.High : LogicGateState.Low); break; case LogicGate.Xnor: output = a == b; - _appearance.SetData(uid, LogicGateVisuals.Output, output ? LogicGateState.High : LogicGateState.Low); break; } + _appearance.SetData(uid, LogicGateVisuals.Output, output ? LogicGateState.High : LogicGateState.Low); + // only send a payload if it actually changed if (output != comp.LastOutput) { @@ -161,20 +156,13 @@ private void UpdateOutput(EntityUid uid, LogicGateComponent comp) } } - LogicGateState UpdateState(SignalState state) + private static LogicGateState SignalToLogicState(SignalState state) { - switch (state) + return state switch { - case SignalState.High: - return LogicGateState.High; - break; - case SignalState.Low: - return LogicGateState.Low; - break; - default: - return LogicGateState.Momentary; - break; - - } + SignalState.High => LogicGateState.High, + SignalState.Low => LogicGateState.Low, + _ => LogicGateState.Momentary, + }; } } diff --git a/Resources/Prototypes/Entities/Structures/gates.yml b/Resources/Prototypes/Entities/Structures/gates.yml index 9b69dfc3b408..cf1ea55dd89e 100644 --- a/Resources/Prototypes/Entities/Structures/gates.yml +++ b/Resources/Prototypes/Entities/Structures/gates.yml @@ -37,7 +37,7 @@ - state: base - state: logic - state: empty - map: ["enum.LogicGateLayers.InputA"] + map: [ "enum.LogicGateLayers.InputA" ] - state: empty map: [ "enum.LogicGateLayers.InputB" ] - state: empty @@ -71,7 +71,7 @@ Xnor: { state: xnor } enum.LogicGateVisuals.InputA: enum.LogicGateLayers.InputA: - High: {state: logic_a } + High: { state: logic_a } Low: { state: empty } enum.LogicGateVisuals.InputB: enum.LogicGateLayers.InputB: From 89a8ea36db81ba3827fb4fadb72ce7aa5eb2977b Mon Sep 17 00:00:00 2001 From: Otito Date: Sun, 24 Nov 2024 21:00:44 -0300 Subject: [PATCH 4/8] Now it doesnt use a copy of another enum --- .../Components/LogicGateComponent.cs | 9 --------- .../DeviceLinking/Systems/LogicGateSystem.cs | 16 +++------------- Content.Shared/DeviceLinking/SharedLogicGate.cs | 8 -------- 3 files changed, 3 insertions(+), 30 deletions(-) diff --git a/Content.Server/DeviceLinking/Components/LogicGateComponent.cs b/Content.Server/DeviceLinking/Components/LogicGateComponent.cs index 52bd32b27fb0..61f85934b401 100644 --- a/Content.Server/DeviceLinking/Components/LogicGateComponent.cs +++ b/Content.Server/DeviceLinking/Components/LogicGateComponent.cs @@ -18,15 +18,6 @@ public sealed partial class LogicGateComponent : Component [DataField] public LogicGate Gate = LogicGate.Or; - [DataField] - public LogicGateState InputA = LogicGateState.Low; - - [DataField] - public LogicGateState InputB = LogicGateState.Low; - - [DataField] - public LogicGateState Output = LogicGateState.Low; - /// /// Tool quality to use for cycling logic gate operations. /// Cannot be pulsing since linking uses that. diff --git a/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs b/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs index 43d5868e7a4b..fe403c9d6b87 100644 --- a/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs +++ b/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs @@ -102,12 +102,12 @@ private void OnSignalReceived(EntityUid uid, LogicGateComponent comp, ref Signal if (args.Port == comp.InputPortA) { comp.StateA = state; - _appearance.SetData(uid, LogicGateVisuals.InputA, SignalToLogicState(state)); + _appearance.SetData(uid, LogicGateVisuals.InputA, state == SignalState.High ? "High" : "Low"); } else if (args.Port == comp.InputPortB) { comp.StateB = state; - _appearance.SetData(uid, LogicGateVisuals.InputB, SignalToLogicState(state)); + _appearance.SetData(uid, LogicGateVisuals.InputB, state == SignalState.High ? "High" : "Low"); } UpdateOutput(uid, comp); @@ -145,7 +145,7 @@ private void UpdateOutput(EntityUid uid, LogicGateComponent comp) break; } - _appearance.SetData(uid, LogicGateVisuals.Output, output ? LogicGateState.High : LogicGateState.Low); + _appearance.SetData(uid, LogicGateVisuals.Output, output ? "High" : "Low"); // only send a payload if it actually changed if (output != comp.LastOutput) @@ -155,14 +155,4 @@ private void UpdateOutput(EntityUid uid, LogicGateComponent comp) _deviceLink.SendSignal(uid, comp.OutputPort, output); } } - - private static LogicGateState SignalToLogicState(SignalState state) - { - return state switch - { - SignalState.High => LogicGateState.High, - SignalState.Low => LogicGateState.Low, - _ => LogicGateState.Momentary, - }; - } } diff --git a/Content.Shared/DeviceLinking/SharedLogicGate.cs b/Content.Shared/DeviceLinking/SharedLogicGate.cs index 10dad709d1d6..75f8cb4951c0 100644 --- a/Content.Shared/DeviceLinking/SharedLogicGate.cs +++ b/Content.Shared/DeviceLinking/SharedLogicGate.cs @@ -40,11 +40,3 @@ public enum LogicGateLayers : byte InputB, Output } - -[Serializable, NetSerializable] -public enum LogicGateState : byte -{ - Low, - High, - Momentary -} From ff53ba2f06cfbb7a7224f3e84b5b254fc5260c10 Mon Sep 17 00:00:00 2001 From: Otito Date: Tue, 26 Nov 2024 08:03:05 -0300 Subject: [PATCH 5/8] Changes to meta.json copyright --- Resources/Textures/Objects/Devices/gates.rsi/meta.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Textures/Objects/Devices/gates.rsi/meta.json b/Resources/Textures/Objects/Devices/gates.rsi/meta.json index 050808551c7c..e91ff2e1e5ca 100644 --- a/Resources/Textures/Objects/Devices/gates.rsi/meta.json +++ b/Resources/Textures/Objects/Devices/gates.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "or.png originally created by Kevin Zheng, 2022. All are modified by deltanedas (github) for SS14, 2024.", + "copyright": "or.png originally created by Kevin Zheng, 2022. All are modified by deltanedas (github) for SS14, 2024. Sprites logic_a logic_b logic_o were made by 0tito (github) for SS14", "size": { "x": 32, "y": 32 From 72c94dd3537253203e67a796e6b8ca5c06720745 Mon Sep 17 00:00:00 2001 From: Otito Date: Tue, 3 Dec 2024 14:31:11 -0300 Subject: [PATCH 6/8] Make setdata use a boolean instead of a string & Delete empty sprite and make input sprites toggle between on and off --- .../DeviceLinking/Systems/LogicGateSystem.cs | 6 ++--- .../Prototypes/Entities/Structures/gates.yml | 22 ++++++++++-------- .../Objects/Devices/gates.rsi/empty.png | Bin 6917 -> 0 bytes .../Objects/Devices/gates.rsi/meta.json | 3 --- 4 files changed, 15 insertions(+), 16 deletions(-) delete mode 100644 Resources/Textures/Objects/Devices/gates.rsi/empty.png diff --git a/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs b/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs index fe403c9d6b87..1280ecd5d119 100644 --- a/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs +++ b/Content.Server/DeviceLinking/Systems/LogicGateSystem.cs @@ -102,12 +102,12 @@ private void OnSignalReceived(EntityUid uid, LogicGateComponent comp, ref Signal if (args.Port == comp.InputPortA) { comp.StateA = state; - _appearance.SetData(uid, LogicGateVisuals.InputA, state == SignalState.High ? "High" : "Low"); + _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 ? "High" : "Low"); + _appearance.SetData(uid, LogicGateVisuals.InputB, state == SignalState.High); //If B == High => Sets input B sprite to True } UpdateOutput(uid, comp); @@ -145,7 +145,7 @@ private void UpdateOutput(EntityUid uid, LogicGateComponent comp) break; } - _appearance.SetData(uid, LogicGateVisuals.Output, output ? "High" : "Low"); + _appearance.SetData(uid, LogicGateVisuals.Output, output); // only send a payload if it actually changed if (output != comp.LastOutput) diff --git a/Resources/Prototypes/Entities/Structures/gates.yml b/Resources/Prototypes/Entities/Structures/gates.yml index cf1ea55dd89e..91f306dcefa7 100644 --- a/Resources/Prototypes/Entities/Structures/gates.yml +++ b/Resources/Prototypes/Entities/Structures/gates.yml @@ -36,11 +36,14 @@ layers: - state: base - state: logic - - state: empty + - state: logic_a + visible: false map: [ "enum.LogicGateLayers.InputA" ] - - state: empty + - state: logic_b + visible: false map: [ "enum.LogicGateLayers.InputB" ] - - state: empty + - state: logic_o + visible: false map: [ "enum.LogicGateLayers.Output" ] - state: or map: [ "enum.LogicGateLayers.Gate" ] @@ -71,17 +74,16 @@ Xnor: { state: xnor } enum.LogicGateVisuals.InputA: enum.LogicGateLayers.InputA: - High: { state: logic_a } - Low: { state: empty } + True: { visible: true } + False: { visible: false } enum.LogicGateVisuals.InputB: enum.LogicGateLayers.InputB: - High: { state: logic_b } - Low: { state: empty } + True: { visible: true } + False: { visible: false } enum.LogicGateVisuals.Output: enum.LogicGateLayers.Output: - High: { state: logic_o } - Low: { state: empty } - + True: { visible: true } + False: { visible: false } - type: entity parent: LogicGateOr id: LogicGateAnd diff --git a/Resources/Textures/Objects/Devices/gates.rsi/empty.png b/Resources/Textures/Objects/Devices/gates.rsi/empty.png deleted file mode 100644 index f41b0e75ac0048fa2bfc493cd2944da8dabd1864..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6917 zcmd5>O^X~=6fK7!lZTPG5J4ey2#71GdY@H`AnF7&po0b%BSx^gK43)6kc>KJV{|jP zcQXhs)PN|6;2+2$KOk;gh`4eaM9_r`!E@iM>Z(^=J>50a%veoV*Za8Vopau;TSLvK zFK@hXhCR-LAULyrdF={*NAz8N5a$~=Z~ld!)7zI{yAcFWU!d;;ySJZtKL}RN?p)g3 zxsrY`+P;3R+ahjEdc@GGKIOBRaU`Oez!WMC%ZTOk~1ST*TDEF}CL@l=zM8 zb;#WhwY`2e8Q>TYm_=V4Nj*@YAJBvZ&B@d0! z39e%vN&`Q05>RG5p;)Gzp_7ifT~Fnq;JgqZgtHJFAN1gpqL0p8z%CIn5u>510fHvY zFs!Y=_JM}!U{8K|_Z$*tuQxZgws*3C(b?t3NXATsI@TrBlt$PqxCK@P`6Xh>Ngs@& z?5K`NM_I@XyosX588*ur_WIvH-VTDte(0sN`_6X2aI%DWVgwVJC=E78M_TByRtAP^ zvLB}FLgX;79FNB(=jczgq#k92lDP}k{Z7N6aqnmPrExh_U4qQ(_=R1gu3I51Ekg zmA)a*-92eEl7SNwxSnB})LNv9ODT1ShZ`d*F*8Ue6N;3VyfpUUg#lY$*tHBVkxL1E za7Fo6B8@oD-2(U(23{J;kkc{GNf3=Y9&IL|0dL_PN5+ScmcWDp%qpg^g=0wtMx+^A z0wM0>nMi>+tdnt@yp26rD@OJ-va7NyA(Ocj#q=)mNH9QhN zvNb(43La#Q;n+EW1r_o}QEHIAaMf{-5W`tNc^GVq^YkLK*h5+!)F+_!O{6jblL$AC zQgrhmX>?4>P}w0bQP1hq3ZP6)9C=&r>~`Cbs4>4azghq{za-s-Hr+M4ODNn5$f#0h zaInfJMUkkeB4XtRP|K-dJL91Rv+I3`01M-K4wUz`l`DV319#OMfRq`NUEFu z07hLgKGXmpKd{?69-xE8_?(W1k-z4_tq!9hVtn8ZkUu!2wLGB1i}Cp`kCBf%q~&Y* zKQQvy4`SqtIRcO$>bC|l@`?Y;l*21j1~{| zX9DQ3Vy1xnj>EQ&B(1IGNI-4&Ck50N)8=!8zmI&F;{=*5#^-cWX8SDKtsX{;ifO}G zv+12e&s%nS4QJou8iSWTctOs7{w=tQe Date: Tue, 3 Dec 2024 15:29:22 -0300 Subject: [PATCH 7/8] Add logic layer to all gates so that they look okay when spawned --- .../Prototypes/Entities/Structures/gates.yml | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/Resources/Prototypes/Entities/Structures/gates.yml b/Resources/Prototypes/Entities/Structures/gates.yml index 91f306dcefa7..3cae4411a6b3 100644 --- a/Resources/Prototypes/Entities/Structures/gates.yml +++ b/Resources/Prototypes/Entities/Structures/gates.yml @@ -92,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 @@ -105,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 @@ -118,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 @@ -131,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 @@ -144,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 From 04873c048607531ef08379f2addb0ae070f96fe8 Mon Sep 17 00:00:00 2001 From: Otito Date: Mon, 11 Nov 2024 16:29:36 -0300 Subject: [PATCH 8/8] Reverts the change to logic.png --- .../Objects/Devices/gates.rsi/logic.png | Bin 7278 -> 7196 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/Textures/Objects/Devices/gates.rsi/logic.png b/Resources/Textures/Objects/Devices/gates.rsi/logic.png index 9722cf918899ac83427f3351b8435a71d45801a2..cb120ce4961ab0ffcd9153c0f8d594e19cf9a057 100644 GIT binary patch delta 612 zcmaE7F~?$qGwWm)HW5ay$x*CwY~~hbhUNy76AA0?HS%>rKvN=b0SM#wW;SmTG1WRA*tFVq|1&Y-|KHM`Uszn+i}}0*BP( zY7RYlE+Zp@L?Z(b1iC22+`u@|#Ms;j=mtZe&a}x!99pbgAlb$UkBZZR-0CVRR#hD02G8)lu=>L4Qfe~~6jtox?M@a`R)+KLaDf}+@B9FMT> z(VE&Dv0t=h&4IWH0!Q`RW-h3lVE!uOfQZ}#>z;c%pVzrF@X1(gFxI%kef~4U@j?dy z7KPJB7Z*-aQPk{Gy3~H5bZ*bg*SqSUrAoBjD1S3&)8l%JZr-JtT`AL2AIFKfF3>ss zl_kN#_wt+T74LrAc@+kV+{k~i(>Y?=-8oGwInD?@sI1$X7#ce9&8|Kj)~C0V|Nr@Q zSg^J}I&`+Fyq3|e^ooMoN`2^{~pW1n^GilZ!c`pf^lj8SB5OEeRI zm@*|V*J)edXM=N}x3*2&V!&H=>>bOEo!zWTor1s0Pp1rh-Y zll%oX6*goxH8y28G&eIcW-~D|Wiv4fGG>#^1R0Y=1rw9{1QZc6Wi~T5W(qcBGG;e8 zHZeCalOY8ZlavM&7c^rwH8y27H#amkI5T82GBYzXGBPp>lW7Mw6EZM2G&VUlHa0dh zVKq24GBz~|lVJuLlkWx|lbQw)0Sc3<1{#x51}X(JG&48~lYj;ulM)9i0Sc2g2t)-p zG&VU3lYa;-lj{c@0Sc1`2r2|JFfuTcpa&WO3X{4AF0-i!^bvmm;c5B+00Fg0L_t(o z3GG!)YQjJi9*r>}x(IjxZ_r-AwFEEWN+@KXE~Tr0C#bkjS6#XB0G^=q1nvW&6iG}% z%9}caOyA3-BDl$b=FR*4=9`%}jJ2a>pk?6B40NdatJR8`rpYYJVuQheazpiw<8Zxg z+dLj7)9DoTC6#~6<&w1h*Rb7g$&emtIU9W6*SSc09LHQvl0@ouyB$l@RL)gF3jpYx z&1RJv*krz5ulW`qk4MtIOIpr`UQdfrm!g&dEr5Q%uPs11j7B4FD$9~`Vd(PGkEbep zXYz(@HXAg-VzEH=sxr@WRVC*r0Q=#!b9oD>LI8}iL4|*A_m|)-%Va@SKmmZ$>2%`0 zbv*!zQ|v%+6h%Bo5CjZZg@tj&#h>;JKqI=vD84??G$aFpHt2@b&~3qZJZ51SGT6@H z&jTs q-=(5~P!vT2uhykypk?4r4Ez8TS#o`FMpy3u0000