Resolves GenericEnumVisualizer is Obsolete (#13914)

This commit is contained in:
TemporalOroboros
2023-05-15 11:55:36 -07:00
committed by GitHub
parent 82c255f473
commit a71d9c8eff
11 changed files with 119 additions and 177 deletions

View File

@@ -1,66 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Log;
using Robust.Shared.Reflection;
using Robust.Shared.Serialization;
using Robust.Shared.Serialization.Manager.Attributes;
namespace Content.Client.Visualizer
{
[UsedImplicitly]
public sealed class GenericEnumVisualizer : AppearanceVisualizer, ISerializationHooks
{
public Enum Key { get; set; } = default!;
public Dictionary<object, string> States { get; set; } = default!;
[DataField("layer")]
public int Layer { get; set; } = 0;
[DataField("key", readOnly: true, required: true)]
private string _keyRaw = default!;
[DataField("states", readOnly: true, required: true)]
private Dictionary<string, string> _statesRaw { get; set; } = default!;
void ISerializationHooks.AfterDeserialization()
{
var reflectionManager = IoCManager.Resolve<IReflectionManager>();
object ResolveRef(string raw)
{
if (reflectionManager.TryParseEnumReference(raw, out var @enum))
{
return @enum;
}
else
{
Logger.WarningS("c.c.v.genum", $"Unable to convert enum reference: {raw}");
}
return raw;
}
// It's important that this conversion be done here so that it may "fail-fast".
Key = (Enum) ResolveRef(_keyRaw);
States = _statesRaw.ToDictionary(kvp => ResolveRef(kvp.Key), kvp => kvp.Value);
}
[Obsolete("Subscribe to AppearanceChangeEvent instead.")]
public override void OnChangeData(AppearanceComponent component)
{
base.OnChangeData(component);
var entities = IoCManager.Resolve<IEntityManager>();
if (!entities.TryGetComponent(component.Owner, out SpriteComponent? sprite)) return;
if (!component.TryGetData(Key, out object status)) return;
if (!States.TryGetValue(status, out var val)) return;
sprite.LayerSetState(Layer, val);
}
}
}

View File

@@ -130,6 +130,7 @@
layers: layers:
- state: shell - state: shell
sprite: Mobs/Silicon/drone.rsi sprite: Mobs/Silicon/drone.rsi
map: ["base"]
- type: MovementIgnoreGravity - type: MovementIgnoreGravity
- type: Fixtures - type: Fixtures
fixtures: fixtures:
@@ -143,13 +144,12 @@
layer: layer:
- SmallMobLayer - SmallMobLayer
- type: Appearance - type: Appearance
- type: GenericVisualizer
visuals: visuals:
- type: GenericEnumVisualizer enum.DroneVisuals.Status:
key: enum.DroneVisuals.Status base:
layer: 0 Off: { state: shell }
states: On: { state: drone }
enum.DroneStatus.Off: shell
enum.DroneStatus.On: drone
- type: ReplacementAccent - type: ReplacementAccent
accent: silicon accent: silicon
- type: Repairable - type: Repairable

View File

@@ -10,6 +10,7 @@
drawdepth: SmallMobs # if mice can hide under tables, so can mousetraps drawdepth: SmallMobs # if mice can hide under tables, so can mousetraps
layers: layers:
- state: mousetrap - state: mousetrap
map: ["base"]
- type: StepTrigger - type: StepTrigger
intersectRatio: 0.2 intersectRatio: 0.2
requiredTriggeredSpeed: 0 requiredTriggeredSpeed: 0
@@ -27,13 +28,12 @@
- type: Item - type: Item
sprite: Objects/Devices/mousetrap.rsi sprite: Objects/Devices/mousetrap.rsi
- type: Appearance - type: Appearance
- type: GenericVisualizer
visuals: visuals:
- type: GenericEnumVisualizer enum.MousetrapVisuals.Visual:
key: enum.MousetrapVisuals.Visual base:
layer: 0 Armed: { state: mousetraparmed }
states: Unarmed: { state: mousetrap }
enum.MousetrapVisuals.Armed: mousetraparmed
enum.MousetrapVisuals.Unarmed: mousetrap
- type: Physics - type: Physics
bodyType: Dynamic bodyType: Dynamic
- type: CollisionWake - type: CollisionWake

View File

@@ -60,6 +60,9 @@
- type: Sprite - type: Sprite
sprite: Objects/Devices/payload.rsi sprite: Objects/Devices/payload.rsi
state: payload-empty state: payload-empty
layers:
- state: payload-empty
map: ["base"]
- type: ChemicalPayload - type: ChemicalPayload
beakerSlotA: &slotDef beakerSlotA: &slotDef
whitelist: whitelist:
@@ -68,14 +71,14 @@
swap: false swap: false
beakerSlotB: *slotDef beakerSlotB: *slotDef
- type: Appearance - type: Appearance
- type: GenericVisualizer
visuals: visuals:
- type: GenericEnumVisualizer enum.ChemicalPayloadVisuals.Slots:
key: enum.ChemicalPayloadVisuals.Slots base:
states: None: { state: payload-empty }
enum.ChemicalPayloadFilledSlots.None: payload-empty Left: { state: payload-chemical-left }
enum.ChemicalPayloadFilledSlots.Left: payload-chemical-left Right: { state: payload-chemical-right }
enum.ChemicalPayloadFilledSlots.Right: payload-chemical-right Both: { state: payload-chemical-armed }
enum.ChemicalPayloadFilledSlots.Both: payload-chemical-armed
- type: ItemSlots - type: ItemSlots
- type: ContainerContainer - type: ContainerContainer
containers: containers:

View File

@@ -22,6 +22,7 @@
- state: pai-base - state: pai-base
- state: pai-off-overlay - state: pai-off-overlay
shader: unshaded shader: unshaded
map: ["screen"]
- type: Input - type: Input
context: "human" context: "human"
- type: PAI - type: PAI
@@ -50,12 +51,10 @@
allowedStates: allowedStates:
- Alive - Alive
- type: Appearance - type: Appearance
- type: GenericVisualizer
visuals: visuals:
- type: GenericEnumVisualizer enum.PAIVisuals.Status:
key: enum.PAIVisuals.Status screen:
layer: 1 Off: { state: pai-off-overlay }
states: Searching: { state: pai-searching-overlay }
enum.PAIStatus.Off: pai-off-overlay On: { state: pai-on-overlay }
enum.PAIStatus.Searching: pai-searching-overlay
enum.PAIStatus.On: pai-on-overlay

View File

@@ -8,17 +8,17 @@
netsync: false netsync: false
layers: layers:
- state: tray-off - state: tray-off
map: ["base"]
- type: TrayScanner - type: TrayScanner
- type: Item - type: Item
sprite: Objects/Tools/t-ray.rsi sprite: Objects/Tools/t-ray.rsi
- type: Appearance - type: Appearance
- type: GenericVisualizer
visuals: visuals:
- type: GenericEnumVisualizer enum.TrayScannerVisual.Visual:
key: enum.TrayScannerVisual.Visual base:
layer: 0 On: { state: tray-on }
states: Off: { state: tray-off }
enum.TrayScannerVisual.On: tray-on
enum.TrayScannerVisual.Off: tray-off
- type: Tag - type: Tag
tags: tags:
- DroneUsable - DroneUsable

View File

@@ -8,6 +8,9 @@
sprite: Objects/Weapons/Bombs/hot_potato.rsi sprite: Objects/Weapons/Bombs/hot_potato.rsi
state: icon state: icon
netsync: false netsync: false
layers:
- state: icon
map: ["base"]
- type: Item - type: Item
sprite: Objects/Weapons/Bombs/hot_potato.rsi sprite: Objects/Weapons/Bombs/hot_potato.rsi
size: 5 size: 5
@@ -40,12 +43,12 @@
types: types:
Heat: 1 Heat: 1
- type: Appearance - type: Appearance
- type: GenericVisualizer
visuals: visuals:
- type: GenericEnumVisualizer enum.Trigger.TriggerVisuals.VisualState:
key: enum.Trigger.TriggerVisuals.VisualState base:
states: Primed: { state: activated }
enum.Trigger.TriggerVisualState.Primed: activated Unprimed: { state: complete }
enum.Trigger.TriggerVisualState.Unprimed: complete
- type: entity - type: entity
id: HotPotatoEffect id: HotPotatoEffect

View File

@@ -4,56 +4,59 @@
parent: BaseItem parent: BaseItem
id: C4 id: C4
components: components:
- type: Sprite - type: Sprite
sprite: Objects/Weapons/Bombs/c4.rsi sprite: Objects/Weapons/Bombs/c4.rsi
state: icon state: icon
- type: Item layers:
sprite: Objects/Weapons/Bombs/c4.rsi - state: icon
size: 10 map: ["base"]
- type: OnUseTimerTrigger - type: Item
delay: 10 sprite: Objects/Weapons/Bombs/c4.rsi
delayOptions: [10, 30, 60, 120, 300] size: 10
initialBeepDelay: 0 - type: OnUseTimerTrigger
beepSound: /Audio/Machines/Nuke/general_beep.ogg delay: 10
startOnStick: true delayOptions: [10, 30, 60, 120, 300]
canToggleStartOnStick: true initialBeepDelay: 0
- type: TriggerOnSignal beepSound: /Audio/Machines/Nuke/general_beep.ogg
- type: DeviceLinkSink startOnStick: true
ports: canToggleStartOnStick: true
- Trigger - type: TriggerOnSignal
- type: Sticky - type: DeviceLinkSink
stickDelay: 5 ports:
unstickDelay: 5 - Trigger
stickPopupStart: comp-sticky-start-stick-bomb - type: Sticky
stickPopupSuccess: comp-sticky-success-stick-bomb stickDelay: 5
unstickPopupStart: comp-sticky-start-unstick-bomb unstickDelay: 5
unstickPopupSuccess: comp-sticky-success-unstick-bomb stickPopupStart: comp-sticky-start-stick-bomb
blacklist: # can't stick it to other items stickPopupSuccess: comp-sticky-success-stick-bomb
components: unstickPopupStart: comp-sticky-start-unstick-bomb
- Item unstickPopupSuccess: comp-sticky-success-unstick-bomb
- type: Explosive # Powerful explosion in a very small radius. Doesn't break underplating. blacklist: # can't stick it to other items
explosionType: DemolitionCharge components:
totalIntensity: 60 - Item
intensitySlope: 5 - type: Explosive # Powerful explosion in a very small radius. Doesn't break underplating.
maxIntensity: 30 explosionType: DemolitionCharge
canCreateVacuum: false totalIntensity: 60
- type: ExplodeOnTrigger intensitySlope: 5
- type: Damageable maxIntensity: 30
damageContainer: Inorganic canCreateVacuum: false
- type: Destructible - type: ExplodeOnTrigger
thresholds: - type: Damageable
- trigger: damageContainer: Inorganic
!type:DamageTrigger - type: Destructible
damage: 50 thresholds:
behaviors: - trigger:
- !type:DoActsBehavior !type:DamageTrigger
acts: ["Destruction"] damage: 50
- !type:ExplodeBehavior behaviors:
- type: StickyVisualizer - !type:DoActsBehavior
- type: Appearance acts: ["Destruction"]
visuals: - !type:ExplodeBehavior
- type: GenericEnumVisualizer - type: StickyVisualizer
key: enum.Trigger.TriggerVisuals.VisualState - type: Appearance
states: - type: GenericVisualizer
enum.Trigger.TriggerVisualState.Primed: primed visuals:
enum.Trigger.TriggerVisualState.Unprimed: complete enum.Trigger.TriggerVisuals.VisualState:
base:
Primed: { state: primed }
Unprimed: { state: complete }

View File

@@ -168,12 +168,6 @@
- !type:DoActsBehavior - !type:DoActsBehavior
acts: [ "Destruction" ] acts: [ "Destruction" ]
- type: Appearance - type: Appearance
visuals:
- type: GenericEnumVisualizer
key: enum.Trigger.TriggerVisuals.VisualState
states:
enum.Trigger.TriggerVisualState.Primed: primed
enum.Trigger.TriggerVisualState.Unprimed: complete
- type: GenericVisualizer - type: GenericVisualizer
visuals: visuals:
enum.ConstructionVisuals.Key: enum.ConstructionVisuals.Key:
@@ -182,6 +176,10 @@
wiredCase: { state: wired } wiredCase: { state: wired }
caseWithTrigger: { state: no-payload } caseWithTrigger: { state: no-payload }
grenade: { state: complete } grenade: { state: complete }
enum.Trigger.TriggerVisuals.VisualState:
enum.ConstructionVisuals.Layer:
Primed: { state: primed }
Unprimed: { state: complete }
- type: StaticPrice - type: StaticPrice
price: 25 price: 25

View File

@@ -18,6 +18,7 @@
snapCardinals: true snapCardinals: true
layers: layers:
- state: pod_0 - state: pod_0
map: ["base"]
- type: Physics - type: Physics
bodyType: Static bodyType: Static
- type: Fixtures - type: Fixtures
@@ -65,15 +66,14 @@
- type: ApcPowerReceiver - type: ApcPowerReceiver
powerLoad: 200 #Receives most of its power from the console powerLoad: 200 #Receives most of its power from the console
- type: Appearance - type: Appearance
- type: GenericVisualizer
visuals: visuals:
- type: GenericEnumVisualizer enum.CloningPodVisuals.Status:
key: enum.CloningPodVisuals.Status base:
layer: 0 Cloning: { state: pod_1 }
states: NoMind: { state: pod_e }
enum.CloningPodStatus.Cloning: pod_1 Gore: { state: pod_g }
enum.CloningPodStatus.NoMind: pod_e Idle: { state: pod_0 }
enum.CloningPodStatus.Gore: pod_g
enum.CloningPodStatus.Idle: pod_0
- type: Climbable - type: Climbable
- type: StaticPrice - type: StaticPrice
price: 1000 price: 1000

View File

@@ -10,6 +10,9 @@
# temp to make clickmask work # temp to make clickmask work
sprite: Structures/meat_spike.rsi sprite: Structures/meat_spike.rsi
state: spike state: spike
layers:
- state: spike
map: ["base"]
- type: Damageable - type: Damageable
damageContainer: Inorganic damageContainer: Inorganic
damageModifierSet: Metallic damageModifierSet: Metallic
@@ -41,13 +44,12 @@
- type: Anchorable - type: Anchorable
- type: Pullable - type: Pullable
- type: Appearance - type: Appearance
- type: GenericVisualizer
visuals: visuals:
- type: GenericEnumVisualizer enum.KitchenSpikeVisuals.Status:
key: enum.KitchenSpikeVisuals.Status base:
layer: 0 Empty: { state: spike }
states: Bloody: { state: spikebloody }
enum.KitchenSpikeStatus.Empty: spike
enum.KitchenSpikeStatus.Bloody: spikebloody
- type: Construction - type: Construction
graph: MeatSpike graph: MeatSpike
node: MeatSpike node: MeatSpike