Resolves GenericEnumVisualizer is Obsolete (#13914)
This commit is contained in:
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 }
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user