Implement PDA ID lights (#2397)
* add PDA id light (yaml changes pending) * the rest of the owl * Do it better
This commit is contained in:
@@ -1,16 +1,48 @@
|
||||
using Content.Shared.GameObjects.Components.PDA;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Client.Interfaces.GameObjects.Components;
|
||||
using Robust.Shared.Interfaces.GameObjects;
|
||||
using Robust.Shared.Utility;
|
||||
using YamlDotNet.RepresentationModel;
|
||||
|
||||
namespace Content.Client.GameObjects.Components.PDA
|
||||
{
|
||||
[UsedImplicitly]
|
||||
// ReSharper disable once InconsistentNaming
|
||||
public class PDAVisualizer : AppearanceVisualizer
|
||||
{
|
||||
/// <summary>
|
||||
/// The base PDA sprite state, eg. "pda", "pda-clown"
|
||||
/// </summary>
|
||||
private string _state;
|
||||
|
||||
private enum PDAVisualLayers
|
||||
{
|
||||
Base,
|
||||
Flashlight
|
||||
Flashlight,
|
||||
IDLight
|
||||
}
|
||||
|
||||
public override void LoadData(YamlMappingNode node)
|
||||
{
|
||||
base.LoadData(node);
|
||||
if (node.TryGetNode("state", out var child))
|
||||
{
|
||||
_state = child.AsString();
|
||||
}
|
||||
}
|
||||
|
||||
public override void InitializeEntity(IEntity entity)
|
||||
{
|
||||
base.InitializeEntity(entity);
|
||||
var sprite = entity.GetComponent<ISpriteComponent>();
|
||||
|
||||
sprite.LayerMapSet(PDAVisualLayers.Base, sprite.AddLayerState(_state));
|
||||
sprite.LayerMapSet(PDAVisualLayers.Flashlight, sprite.AddLayerState("light_overlay"));
|
||||
sprite.LayerSetShader(PDAVisualLayers.Flashlight, "unshaded");
|
||||
sprite.LayerMapSet(PDAVisualLayers.IDLight, sprite.AddLayerState("id_overlay"));
|
||||
sprite.LayerSetShader(PDAVisualLayers.IDLight, "unshaded");
|
||||
}
|
||||
|
||||
|
||||
@@ -23,13 +55,15 @@ namespace Content.Client.GameObjects.Components.PDA
|
||||
}
|
||||
var sprite = component.Owner.GetComponent<ISpriteComponent>();
|
||||
sprite.LayerSetVisible(PDAVisualLayers.Flashlight, false);
|
||||
if(!component.TryGetData<bool>(PDAVisuals.FlashlightLit, out var isScreenLit))
|
||||
if (component.TryGetData(PDAVisuals.FlashlightLit, out bool isScreenLit))
|
||||
{
|
||||
return;
|
||||
}
|
||||
sprite.LayerSetState(PDAVisualLayers.Flashlight, "light_overlay");
|
||||
sprite.LayerSetVisible(PDAVisualLayers.Flashlight, isScreenLit);
|
||||
}
|
||||
|
||||
if (component.TryGetData(PDAVisuals.IDCardInserted, out bool isCardInserted))
|
||||
{
|
||||
sprite.LayerSetVisible(PDAVisualLayers.IDLight, isCardInserted);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -146,6 +146,7 @@ namespace Content.Server.GameObjects.Components.PDA
|
||||
if (Owner.TryGetComponent(out AppearanceComponent? appearance))
|
||||
{
|
||||
appearance.SetData(PDAVisuals.FlashlightLit, _lightOn);
|
||||
appearance.SetData(PDAVisuals.IDCardInserted, !IdSlotEmpty);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -108,6 +108,7 @@ namespace Content.Shared.GameObjects.Components.PDA
|
||||
public enum PDAVisuals
|
||||
{
|
||||
FlashlightLit,
|
||||
IDCardInserted
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
|
||||
@@ -8,6 +8,13 @@
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: PDAVisualizer
|
||||
state: pda
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
netsync: false
|
||||
- type: Icon
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
state: pda
|
||||
- type: Clothing
|
||||
QuickEquip: false
|
||||
Slots:
|
||||
@@ -29,33 +36,21 @@
|
||||
components:
|
||||
- type: PDA
|
||||
idCard: AssistantIDCard
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
netsync: false
|
||||
layers:
|
||||
- state: pda
|
||||
map: ["enum.PDAVisualLayers.Base"]
|
||||
- state: light_overlay
|
||||
shader: unshaded
|
||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
||||
|
||||
- type: entity
|
||||
name: Chef PDA
|
||||
parent: BasePDA
|
||||
id: ChefPDA
|
||||
description: Why isn't it gray?
|
||||
description: Covered in grease and flour.
|
||||
components:
|
||||
- type: PDA
|
||||
idCard: ChefIDCard
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
netsync: false
|
||||
layers:
|
||||
- state: pda-cook
|
||||
map: ["enum.PDAVisualLayers.Base"]
|
||||
- state: light_overlay
|
||||
shader: unshaded
|
||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: PDAVisualizer
|
||||
state: pda-cook
|
||||
- type: Icon
|
||||
state: pda-cook
|
||||
|
||||
- type: entity
|
||||
name: Clown PDA
|
||||
@@ -65,15 +60,12 @@
|
||||
components:
|
||||
- type: PDA
|
||||
idCard: ClownIDCard
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
netsync: false
|
||||
layers:
|
||||
- state: pda-clown
|
||||
map: ["enum.PDAVisualLayers.Base"]
|
||||
- state: light_overlay
|
||||
shader: unshaded
|
||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: PDAVisualizer
|
||||
state: pda-clown
|
||||
- type: Icon
|
||||
state: pda-clown
|
||||
- type: Slippery
|
||||
paralyzeTime: 4
|
||||
- type: Physics
|
||||
@@ -91,15 +83,28 @@
|
||||
components:
|
||||
- type: PDA
|
||||
idCard: MimeIDCard
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
netsync: false
|
||||
layers:
|
||||
- state: pda-mime
|
||||
map: ["enum.PDAVisualLayers.Base"]
|
||||
- state: light_overlay
|
||||
shader: unshaded
|
||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: PDAVisualizer
|
||||
state: pda-mime
|
||||
- type: Icon
|
||||
state: pda-mime
|
||||
|
||||
# TODO: uncomment this when the QM job gets added
|
||||
#- type: entity
|
||||
# name: Quartermaster PDA
|
||||
# parent: BasePDA
|
||||
# id: QuartermasterPDA
|
||||
# description: PDA for the guy that orders the guns.
|
||||
# components:
|
||||
# - type: PDA
|
||||
# idCard: QuartermasterIDCard
|
||||
# - type: Appearance
|
||||
# visuals:
|
||||
# - type: PDAVisualizer
|
||||
# state: pda-qm
|
||||
# - type: Icon
|
||||
# state: pda-qm
|
||||
|
||||
- type: entity
|
||||
name: Cargo PDA
|
||||
@@ -109,16 +114,12 @@
|
||||
components:
|
||||
- type: PDA
|
||||
idCard: CargoIDCard
|
||||
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
netsync: false
|
||||
layers:
|
||||
- state: pda-cargo
|
||||
map: ["enum.PDAVisualLayers.Base"]
|
||||
- state: light_overlay
|
||||
shader: unshaded
|
||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: PDAVisualizer
|
||||
state: pda-cargo
|
||||
- type: Icon
|
||||
state: pda-cargo
|
||||
|
||||
- type: entity
|
||||
name: Bartender PDA
|
||||
@@ -128,16 +129,12 @@
|
||||
components:
|
||||
- type: PDA
|
||||
idCard: BartenderIDCard
|
||||
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
netsync: false
|
||||
layers:
|
||||
- state: pda-bartender
|
||||
map: ["enum.PDAVisualLayers.Base"]
|
||||
- state: light_overlay
|
||||
shader: unshaded
|
||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: PDAVisualizer
|
||||
state: pda-bartender
|
||||
- type: Icon
|
||||
state: pda-bartender
|
||||
|
||||
|
||||
- type: entity
|
||||
@@ -148,195 +145,180 @@
|
||||
components:
|
||||
- type: PDA
|
||||
idCard: JanitorIDCard
|
||||
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
netsync: false
|
||||
layers:
|
||||
- state: pda-janitor
|
||||
map: ["enum.PDAVisualLayers.Base"]
|
||||
- state: light_overlay
|
||||
shader: unshaded
|
||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: PDAVisualizer
|
||||
state: pda-janitor
|
||||
- type: Icon
|
||||
state: pda-janitor
|
||||
|
||||
- type: entity
|
||||
name: Captain PDA
|
||||
parent: BasePDA
|
||||
id: CaptainPDA
|
||||
description: Surprisingly no different than your PDA.
|
||||
description: Surprisingly no different from your PDA.
|
||||
components:
|
||||
- type: PDA
|
||||
idCard: CaptainIDCard
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: PDAVisualizer
|
||||
state: pda-captain
|
||||
- type: Icon
|
||||
state: pda-captain
|
||||
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
netsync: false
|
||||
layers:
|
||||
- state: pda-captain
|
||||
map: ["enum.PDAVisualLayers.Base"]
|
||||
- state: light_overlay
|
||||
shader: unshaded
|
||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
||||
|
||||
- type: entity
|
||||
name: HoP PDA
|
||||
name: Head of Personnel PDA
|
||||
parent: BasePDA
|
||||
id: HoPPDA
|
||||
description: Looks like it's been chewed on.
|
||||
components:
|
||||
- type: PDA
|
||||
idCard: HoPIDCard
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: PDAVisualizer
|
||||
state: pda-hop
|
||||
- type: Icon
|
||||
state: pda-hop
|
||||
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
netsync: false
|
||||
layers:
|
||||
- state: pda-hop
|
||||
map: ["enum.PDAVisualLayers.Base"]
|
||||
- state: light_overlay
|
||||
shader: unshaded
|
||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
||||
|
||||
- type: entity
|
||||
name: CE PDA
|
||||
name: Chief Engineer PDA
|
||||
parent: BasePDA
|
||||
id: CEPDA
|
||||
description: Looks like it's barely been used.
|
||||
components:
|
||||
- type: PDA
|
||||
idCard: CEIDCard
|
||||
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
netsync: false
|
||||
layers:
|
||||
- state: pda-ce
|
||||
map: ["enum.PDAVisualLayers.Base"]
|
||||
- state: light_overlay
|
||||
shader: unshaded
|
||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: PDAVisualizer
|
||||
state: pda-ce
|
||||
- type: Icon
|
||||
state: pda-ce
|
||||
|
||||
|
||||
- type: entity
|
||||
name: Engineer PDA
|
||||
parent: BasePDA
|
||||
id: EngineerPDA
|
||||
description: Rugged and well-worn.
|
||||
components:
|
||||
- type: PDA
|
||||
idCard: EngineeringIDCard
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: PDAVisualizer
|
||||
state: pda-engineer
|
||||
- type: Icon
|
||||
state: pda-engineer
|
||||
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
netsync: false
|
||||
layers:
|
||||
- state: pda-engineer
|
||||
map: ["enum.PDAVisualLayers.Base"]
|
||||
- state: light_overlay
|
||||
shader: unshaded
|
||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
||||
|
||||
- type: entity
|
||||
name: CMO PDA
|
||||
name: Chief Medical Officer PDA
|
||||
parent: BasePDA
|
||||
id: CMOPDA
|
||||
description: Extraordinarily shiny and sterile.
|
||||
components:
|
||||
- type: PDA
|
||||
idCard: CMOIDCard
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: PDAVisualizer
|
||||
state: pda-cmo
|
||||
- type: Icon
|
||||
state: pda-cmo
|
||||
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
netsync: false
|
||||
layers:
|
||||
- state: pda-cmo
|
||||
map: ["enum.PDAVisualLayers.Base"]
|
||||
- state: light_overlay
|
||||
shader: unshaded
|
||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
||||
|
||||
- type: entity
|
||||
name: Medical PDA
|
||||
parent: BasePDA
|
||||
id: MedicalPDA
|
||||
description: Shiny and sterile.
|
||||
components:
|
||||
- type: PDA
|
||||
idCard: MedicalIDCard
|
||||
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
netsync: false
|
||||
layers:
|
||||
- state: pda-medical
|
||||
map: ["enum.PDAVisualLayers.Base"]
|
||||
- state: light_overlay
|
||||
shader: unshaded
|
||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: PDAVisualizer
|
||||
state: pda-medical
|
||||
- type: Icon
|
||||
state: pda-medical
|
||||
|
||||
- type: entity
|
||||
name: RnD PDA
|
||||
name: Research Director PDA
|
||||
parent: BasePDA
|
||||
id: RnDPDA
|
||||
description: It appears surprisingly ordinary.
|
||||
components:
|
||||
- type: PDA
|
||||
idCard: RDIDCard
|
||||
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
netsync: false
|
||||
layers:
|
||||
- state: pda-rd
|
||||
map: ["enum.PDAVisualLayers.Base"]
|
||||
- state: light_overlay
|
||||
shader: unshaded
|
||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: PDAVisualizer
|
||||
state: pda-rd
|
||||
- type: Icon
|
||||
state: pda-rd
|
||||
|
||||
- type: entity
|
||||
name: Science PDA
|
||||
parent: BasePDA
|
||||
id: SciencePDA
|
||||
description:
|
||||
components:
|
||||
- type: PDA
|
||||
idCard: ResearchIDCard
|
||||
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
netsync: false
|
||||
layers:
|
||||
- state: pda-rd
|
||||
map: ["enum.PDAVisualLayers.Base"]
|
||||
- state: light_overlay
|
||||
shader: unshaded
|
||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: PDAVisualizer
|
||||
state: pda-science
|
||||
- type: Icon
|
||||
state: pda-science
|
||||
|
||||
- type: entity
|
||||
name: HoS PDA
|
||||
name: Head of Security PDA
|
||||
parent: BasePDA
|
||||
id: HoSPDA
|
||||
description: Whosoever bears this PDA is the law.
|
||||
components:
|
||||
- type: PDA
|
||||
idCard: HoSIDCard
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: PDAVisualizer
|
||||
state: pda-hos
|
||||
- type: Icon
|
||||
state: pda-hos
|
||||
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
netsync: false
|
||||
layers:
|
||||
- state: pda-hos
|
||||
map: ["enum.PDAVisualLayers.Base"]
|
||||
- state: light_overlay
|
||||
shader: unshaded
|
||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
||||
# TODO: Uncomment this when the Warden job gets added
|
||||
#- type: entity
|
||||
# name: Warden PDA
|
||||
# parent: BasePDA
|
||||
# id: WardenPDA
|
||||
# description: The OS appears to have been jailbroken.
|
||||
# components:
|
||||
# - type: PDA
|
||||
# idCard: WardenIDCard
|
||||
# - type: Appearance
|
||||
# visuals:
|
||||
# - type: PDAVisualizer
|
||||
# state: pda-warden
|
||||
# - type: Icon
|
||||
# state: pda-warden
|
||||
|
||||
- type: entity
|
||||
name: Security PDA
|
||||
parent: BasePDA
|
||||
id: SecurityPDA
|
||||
description: Red to hide the stains of assistant blood.
|
||||
components:
|
||||
- type: PDA
|
||||
idCard: SecurityIDCard
|
||||
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/pda.rsi
|
||||
netsync: false
|
||||
layers:
|
||||
- state: pda-security
|
||||
map: ["enum.PDAVisualLayers.Base"]
|
||||
- state: light_overlay
|
||||
shader: unshaded
|
||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: PDAVisualizer
|
||||
state: pda-security
|
||||
- type: Icon
|
||||
state: pda-security
|
||||
|
||||
Reference in New Issue
Block a user