From 79dc4e4d6f918b2d56ae5e1909f2ccdbc552014c Mon Sep 17 00:00:00 2001 From: Golinth Date: Tue, 20 Feb 2024 16:26:48 -0600 Subject: [PATCH] Mindshield outline flashes, (#25409) * Add animation support to status icons Animated like any other entity. Change the png to have all frames, add delays in meta.json, and you're good to go. * Dirty "fix" for the crashing. Still have no idea why files cannot be read without changing their path in the yaml. * Sloth review ig I still have no idea why it wont work with /Textures/ missing as a prefix. --- .../StatusIcon/StatusIconOverlay.cs | 6 +- Resources/Prototypes/StatusEffects/health.yml | 2 +- Resources/Prototypes/StatusEffects/hunger.yml | 12 +- Resources/Prototypes/StatusEffects/job.yml | 106 +++++++++--------- Resources/Prototypes/StatusIcon/antag.yml | 10 +- Resources/Prototypes/StatusIcon/debug.yml | 6 +- .../Misc/job_icons.rsi/MindShield.png | Bin 4452 -> 4717 bytes .../Interface/Misc/job_icons.rsi/meta.json | 8 +- 8 files changed, 79 insertions(+), 71 deletions(-) diff --git a/Content.Client/StatusIcon/StatusIconOverlay.cs b/Content.Client/StatusIcon/StatusIconOverlay.cs index 0d13baef93..1cfb4c2a55 100644 --- a/Content.Client/StatusIcon/StatusIconOverlay.cs +++ b/Content.Client/StatusIcon/StatusIconOverlay.cs @@ -5,6 +5,7 @@ using Robust.Client.Graphics; using Robust.Shared.Enums; using System.Numerics; using Robust.Shared.Prototypes; +using Robust.Shared.Timing; namespace Content.Client.StatusIcon; @@ -12,6 +13,7 @@ public sealed class StatusIconOverlay : Overlay { [Dependency] private readonly IEntityManager _entity = default!; [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly IGameTiming _timing = default!; private readonly SpriteSystem _sprite; private readonly TransformSystem _transform; @@ -72,7 +74,9 @@ public sealed class StatusIconOverlay : Overlay foreach (var proto in icons) { - var texture = _sprite.Frame0(proto.Icon); + + var curTime = _timing.RealTime; + var texture = _sprite.GetFrame(proto.Icon, curTime); float yOffset; float xOffset; diff --git a/Resources/Prototypes/StatusEffects/health.yml b/Resources/Prototypes/StatusEffects/health.yml index 2ab90e7582..0a1df020c0 100644 --- a/Resources/Prototypes/StatusEffects/health.yml +++ b/Resources/Prototypes/StatusEffects/health.yml @@ -2,6 +2,6 @@ id: HealthIconFine priority: 1 icon: - sprite: Interface/Misc/health_icons.rsi + sprite: /Textures/Interface/Misc/health_icons.rsi state: Fine locationPreference: Right \ No newline at end of file diff --git a/Resources/Prototypes/StatusEffects/hunger.yml b/Resources/Prototypes/StatusEffects/hunger.yml index 294a7659b1..6436665713 100644 --- a/Resources/Prototypes/StatusEffects/hunger.yml +++ b/Resources/Prototypes/StatusEffects/hunger.yml @@ -3,7 +3,7 @@ id: HungerIconOverfed priority: 5 icon: - sprite: Interface/Misc/food_icons.rsi + sprite: /Textures/Interface/Misc/food_icons.rsi state: overfed locationPreference: Right @@ -11,7 +11,7 @@ id: HungerIconPeckish priority: 5 icon: - sprite: Interface/Misc/food_icons.rsi + sprite: /Textures/Interface/Misc/food_icons.rsi state: peckish locationPreference: Right @@ -19,7 +19,7 @@ id: HungerIconStarving priority: 5 icon: - sprite: Interface/Misc/food_icons.rsi + sprite: /Textures/Interface/Misc/food_icons.rsi state: starving locationPreference: Right @@ -28,7 +28,7 @@ id: ThirstIconOverhydrated priority: 5 icon: - sprite: Interface/Misc/food_icons.rsi + sprite: /Textures/Interface/Misc/food_icons.rsi state: overhydrated locationPreference: Left @@ -36,7 +36,7 @@ id: ThirstIconThirsty priority: 5 icon: - sprite: Interface/Misc/food_icons.rsi + sprite: /Textures/Interface/Misc/food_icons.rsi state: thirsty locationPreference: Left @@ -44,6 +44,6 @@ id: ThirstIconParched priority: 5 icon: - sprite: Interface/Misc/food_icons.rsi + sprite: /Textures/Interface/Misc/food_icons.rsi state: parched locationPreference: Left diff --git a/Resources/Prototypes/StatusEffects/job.yml b/Resources/Prototypes/StatusEffects/job.yml index 2e8e5bc255..0811877ab5 100644 --- a/Resources/Prototypes/StatusEffects/job.yml +++ b/Resources/Prototypes/StatusEffects/job.yml @@ -8,369 +8,369 @@ parent: JobIcon id: JobIconDetective icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Detective - type: statusIcon parent: JobIcon id: JobIconQuarterMaster icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: QuarterMaster - type: statusIcon parent: JobIcon id: JobIconBorg icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Borg - type: statusIcon parent: JobIcon id: JobIconBotanist icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Botanist - type: statusIcon parent: JobIcon id: JobIconBoxer icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Boxer - type: statusIcon parent: JobIcon id: JobIconAtmosphericTechnician icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: AtmosphericTechnician - type: statusIcon parent: JobIcon id: JobIconNanotrasen icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Nanotrasen - type: statusIcon parent: JobIcon id: JobIconPrisoner icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Prisoner - type: statusIcon parent: JobIcon id: JobIconJanitor icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Janitor - type: statusIcon parent: JobIcon id: JobIconChemist icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Chemist - type: statusIcon parent: JobIcon id: JobIconStationEngineer icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: StationEngineer - type: statusIcon parent: JobIcon id: JobIconSecurityOfficer icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: SecurityOfficer - type: statusIcon parent: JobIcon id: JobIconNoId icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: NoId - type: statusIcon parent: JobIcon id: JobIconChiefMedicalOfficer icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: ChiefMedicalOfficer - type: statusIcon parent: JobIcon id: JobIconRoboticist icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Roboticist - type: statusIcon parent: JobIcon id: JobIconChaplain icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Chaplain - type: statusIcon parent: JobIcon id: JobIconLawyer icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Lawyer - type: statusIcon parent: JobIcon id: JobIconUnknown icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Unknown - type: statusIcon parent: JobIcon id: JobIconLibrarian icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Librarian - type: statusIcon parent: JobIcon id: JobIconCargoTechnician icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: CargoTechnician - type: statusIcon parent: JobIcon id: JobIconScientist icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Scientist - type: statusIcon parent: JobIcon id: JobIconResearchAssistant icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: ResearchAssistant - type: statusIcon parent: JobIcon id: JobIconGeneticist icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Geneticist - type: statusIcon parent: JobIcon id: JobIconClown icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Clown - type: statusIcon parent: JobIcon id: JobIconCaptain icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Captain - type: statusIcon parent: JobIcon id: JobIconHeadOfPersonnel icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: HeadOfPersonnel - type: statusIcon parent: JobIcon id: JobIconVirologist icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Virologist - type: statusIcon parent: JobIcon id: JobIconShaftMiner icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: ShaftMiner - type: statusIcon parent: JobIcon id: JobIconPassenger icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Passenger - type: statusIcon parent: JobIcon id: JobIconChiefEngineer icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: ChiefEngineer - type: statusIcon parent: JobIcon id: JobIconBartender icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Bartender - type: statusIcon parent: JobIcon id: JobIconHeadOfSecurity icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: HeadOfSecurity - type: statusIcon parent: JobIcon id: JobIconBrigmedic icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Brigmedic - type: statusIcon parent: JobIcon id: JobIconMedicalDoctor icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: MedicalDoctor - type: statusIcon parent: JobIcon id: JobIconParamedic icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Paramedic - type: statusIcon parent: JobIcon id: JobIconChef icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Chef - type: statusIcon parent: JobIcon id: JobIconWarden icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Warden - type: statusIcon parent: JobIcon id: JobIconResearchDirector icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: ResearchDirector - type: statusIcon parent: JobIcon id: JobIconMime icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Mime - type: statusIcon parent: JobIcon id: JobIconMusician icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Musician - type: statusIcon parent: JobIcon id: JobIconReporter icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Reporter - type: statusIcon parent: JobIcon id: JobIconPsychologist icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Psychologist - type: statusIcon parent: JobIcon id: JobIconMedicalIntern icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: MedicalIntern - type: statusIcon parent: JobIcon id: JobIconTechnicalAssistant icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: TechnicalAssistant - type: statusIcon parent: JobIcon id: JobIconServiceWorker icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: ServiceWorker - type: statusIcon parent: JobIcon id: JobIconSecurityCadet icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: SecurityCadet - type: statusIcon parent: JobIcon id: JobIconZombie # This is a perfectly legitimate profession to pursue icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Zombie - type: statusIcon parent: JobIcon id: JobIconZookeeper icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Zookeeper - type: statusIcon parent: JobIcon id: JobIconSeniorPhysician icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: SeniorPhysician - type: statusIcon parent: JobIcon id: JobIconSeniorOfficer icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: SeniorOfficer - type: statusIcon parent: JobIcon id: JobIconSeniorEngineer icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: SeniorEngineer - type: statusIcon parent: JobIcon id: JobIconSeniorResearcher icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: SeniorResearcher - type: statusIcon parent: JobIcon id: JobIconVisitor icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Visitor diff --git a/Resources/Prototypes/StatusIcon/antag.yml b/Resources/Prototypes/StatusIcon/antag.yml index 0a052ce16d..3b64517530 100644 --- a/Resources/Prototypes/StatusIcon/antag.yml +++ b/Resources/Prototypes/StatusIcon/antag.yml @@ -2,21 +2,21 @@ id: ZombieFaction priority: 11 icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Zombie - type: statusIcon id: RevolutionaryFaction priority: 11 icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Revolutionary - type: statusIcon id: HeadRevolutionaryFaction priority: 11 icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: HeadRevolutionary - type: statusIcon @@ -25,7 +25,7 @@ locationPreference: Right layer: Mod icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: MindShield - type: statusIcon @@ -33,5 +33,5 @@ priority: 0 locationPreference: Left icon: - sprite: Interface/Misc/job_icons.rsi + sprite: /Textures/Interface/Misc/job_icons.rsi state: Syndicate diff --git a/Resources/Prototypes/StatusIcon/debug.yml b/Resources/Prototypes/StatusIcon/debug.yml index d230fa852c..2011c6ceea 100644 --- a/Resources/Prototypes/StatusIcon/debug.yml +++ b/Resources/Prototypes/StatusIcon/debug.yml @@ -1,19 +1,19 @@ - type: statusIcon id: DebugStatus icon: - sprite: Interface/Misc/research_disciplines.rsi + sprite: /Textures/Interface/Misc/research_disciplines.rsi state: civilianservices - type: statusIcon id: DebugStatus2 priority: 1 icon: - sprite: Interface/Misc/research_disciplines.rsi + sprite: /Textures/Interface/Misc/research_disciplines.rsi state: arsenal - type: statusIcon id: DebugStatus3 priority: 5 icon: - sprite: Interface/Misc/research_disciplines.rsi + sprite: /Textures/Interface/Misc/research_disciplines.rsi state: experimental diff --git a/Resources/Textures/Interface/Misc/job_icons.rsi/MindShield.png b/Resources/Textures/Interface/Misc/job_icons.rsi/MindShield.png index d3df5fe6277177f5106ca40b1fa39ad7349548a0..e311b9f61633673a292bcc07eab80300b253b76f 100644 GIT binary patch delta 911 zcmV;A191H0BJCt4iBL{Q4GJ0x0000DNk~Le0000G000082nGNE0PuEymjD0&#gQc+ ze^Cy@APD{U6gvU}DjtWfHrWk!{GrmNHhqcs0Q>qNwD0E#uMUhHI2Fk?XE1Q(ifTk) zLPw0iBYFZSS?b~c5n74trkP6i_h&uAq7>Cwx(LbJ8{68b?D}#O!g*15)cNj0)rAOW zBf5aju^?9|*Acb`D`cKAT5YfmSBJZ~f8|_kdwa6~5MrZ9V3CNY0qTbX=^$$D(jN}q zp_Hh&6I;mBo=$`xcSTxB1!~U>0004mX+uL$Nkc;*aB^>EX>4Tx0C=2zkv&MmKpe$i z(@I4uf_9MNkfA!+MMWG-6^me@v=v%)FuC*#nlvOSE{=k0!NHHks)LKOt`4q(e<1h) z;_Tq0=prTlFDbN$@!+^0@9sVB-T^|Z##A#92UN{6GRcIPFRY5eR|ptJ03sq1Gxbz< zF$d4_bq^n3?_xa5``n*nP$`-W@QK86rW+RV2J!5srE}gV4zr4+5T6rI8gxP8N3P2* zzi}=*Ebz>*k;}{zhl#~<56eBwe=3GbJVP8+RE_e5yvqvbEzWAK!8-TkFANp6l`Pk3 zjv!eLWHeAk4HjawYNVLR(0;?YXf{|kZb*PXWKlmT~?$#_#Pq|5< z1km?l+aKdVa2IGdZTtJ!w%aFw{~5T_y8e0#nENEX+0~*)z|b~uaoyGAMm^wi2N-?Q zB|~x~KTV-j0^ZN)n+m|lEika=_SV_Q=>w3Xu9k0rgF|4VOxf!m@9yvI?cXz<{(b<8 zl5()dE*yIR01q^?gaV5KBQj=WGBr0iEj3|eF)cJ=V`eR4IXGl3Gh<{hG-5V3IA%Cy zlQIRW3^Fq?I5RggGdVFfIFslFaS1n6GBP?dGdeYsVg@A%H&ik*Ix{mmHM5Wg?E#a& z23#a#Ha0mkH!@=_Ib$*~Ei_?aIW1ygI5RCZWMwoqI59P1F=a55KL8q)7+9(e85mk|#6-0r l14AoAIRgU&!+%`S2mslK8kEeVDJ%d0002ovPDHLkV1k}Ge=-07 delta 813 zcmV+|1JeBMB;+C`iBL{Q4GJ0x0000DNk~Le00008000082nGNE0K^ZzivR!s!jUB( ze_IX%Aqf2U6g>h0zK-KooAd@feo=6Q95d>VgV3i<) zqE739r&TP@?|F9;C@B(8Rv)c?<^3t3u1XXxLiugPu@i+&Ki`C`5sisZf@VU+gb0=J zCQx-Ph$W}%3P*<>S>If(MVN9SDR=*Kf0FC9Abkk2lP3^M#5w?t$Bya@s?cE+ieDL^ zWRu82p6;~Z{#7tp>FY4Kh5!Hog=s@WP)S2WAaHVTW@&6?004NLeUUv#!%!53PgA8L z6$LwpIAo|!7C}YCsZ_BD7D`*8RR@!o{y~$5B*n#1a4k6avsiU-an{wrRS*P!e?Xia zoD^N8#QTy$ix?kV-p6_G9PYah5E>Pxnq5&q)hr_wkBQmbsu*~MfB~vGOi0Ys6Y0ea zJlEGfe0;x)@GS3pf37|yZ!*9q5=WVCSi~E|GnJD8OWf0cNeIIO4|xyoSVSU?pjB*zc_2ft@)7N#cMq+kr_ zezEP3Q6R7jH0!qgeQev!6TtrrTxo58wE@h2l3s6X;Ul1b8@RY`Yw{j&M7aYDJ?WAm zIg+1BC=`JAGy0|+Fn9~}uDNq-o#XTY$k42oZ-9eCV5~^l>mKj!>73iYcUtrN0rjzR z+u=GfX8-^WRkMZyivlBMFk&-dIb|(5IWssdG-EO~EnzuiWi2o{F=S>iVL3K6W-ya9 z1*!}%H8M3bF)=tXH#s(w>IHELHB>S&IxsRiFq32kB?&cDGBG+ZGCDA`k_PPovt9{c z2n0#qvvQNd5i(H_0|E=XxH97a001#bL_t&-(_@@{>;M0w2Tn0y1J({^3=9dgPX7P@ r|33pZoG|O;e