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:
Peter Wedder
2020-10-26 20:35:20 +02:00
committed by GitHub
parent 7dcaa1ff88
commit 7c57d10531
4 changed files with 191 additions and 173 deletions

View File

@@ -1,16 +1,48 @@
using Content.Shared.GameObjects.Components.PDA; using Content.Shared.GameObjects.Components.PDA;
using JetBrains.Annotations;
using Robust.Client.GameObjects; using Robust.Client.GameObjects;
using Robust.Client.Interfaces.GameObjects.Components; using Robust.Client.Interfaces.GameObjects.Components;
using Robust.Shared.Interfaces.GameObjects;
using Robust.Shared.Utility;
using YamlDotNet.RepresentationModel;
namespace Content.Client.GameObjects.Components.PDA namespace Content.Client.GameObjects.Components.PDA
{ {
[UsedImplicitly]
// ReSharper disable once InconsistentNaming
public class PDAVisualizer : AppearanceVisualizer public class PDAVisualizer : AppearanceVisualizer
{ {
/// <summary>
/// The base PDA sprite state, eg. "pda", "pda-clown"
/// </summary>
private string _state;
private enum PDAVisualLayers private enum PDAVisualLayers
{ {
Base, 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>(); var sprite = component.Owner.GetComponent<ISpriteComponent>();
sprite.LayerSetVisible(PDAVisualLayers.Flashlight, false); 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); sprite.LayerSetVisible(PDAVisualLayers.Flashlight, isScreenLit);
}
if (component.TryGetData(PDAVisuals.IDCardInserted, out bool isCardInserted))
{
sprite.LayerSetVisible(PDAVisualLayers.IDLight, isCardInserted);
}
} }

View File

@@ -146,6 +146,7 @@ namespace Content.Server.GameObjects.Components.PDA
if (Owner.TryGetComponent(out AppearanceComponent? appearance)) if (Owner.TryGetComponent(out AppearanceComponent? appearance))
{ {
appearance.SetData(PDAVisuals.FlashlightLit, _lightOn); appearance.SetData(PDAVisuals.FlashlightLit, _lightOn);
appearance.SetData(PDAVisuals.IDCardInserted, !IdSlotEmpty);
} }
} }

View File

@@ -108,6 +108,7 @@ namespace Content.Shared.GameObjects.Components.PDA
public enum PDAVisuals public enum PDAVisuals
{ {
FlashlightLit, FlashlightLit,
IDCardInserted
} }
[Serializable, NetSerializable] [Serializable, NetSerializable]

View File

@@ -8,6 +8,13 @@
- type: Appearance - type: Appearance
visuals: visuals:
- type: PDAVisualizer - type: PDAVisualizer
state: pda
- type: Sprite
sprite: Objects/Devices/pda.rsi
netsync: false
- type: Icon
sprite: Objects/Devices/pda.rsi
state: pda
- type: Clothing - type: Clothing
QuickEquip: false QuickEquip: false
Slots: Slots:
@@ -29,33 +36,21 @@
components: components:
- type: PDA - type: PDA
idCard: AssistantIDCard 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 - type: entity
name: Chef PDA name: Chef PDA
parent: BasePDA parent: BasePDA
id: ChefPDA id: ChefPDA
description: Why isn't it gray? description: Covered in grease and flour.
components: components:
- type: PDA - type: PDA
idCard: ChefIDCard idCard: ChefIDCard
- type: Sprite - type: Appearance
sprite: Objects/Devices/pda.rsi visuals:
netsync: false - type: PDAVisualizer
layers: state: pda-cook
- state: pda-cook - type: Icon
map: ["enum.PDAVisualLayers.Base"] state: pda-cook
- state: light_overlay
shader: unshaded
map: ["enum.PDAVisualLayers.Flashlight"]
- type: entity - type: entity
name: Clown PDA name: Clown PDA
@@ -65,15 +60,12 @@
components: components:
- type: PDA - type: PDA
idCard: ClownIDCard idCard: ClownIDCard
- type: Sprite - type: Appearance
sprite: Objects/Devices/pda.rsi visuals:
netsync: false - type: PDAVisualizer
layers: state: pda-clown
- state: pda-clown - type: Icon
map: ["enum.PDAVisualLayers.Base"] state: pda-clown
- state: light_overlay
shader: unshaded
map: ["enum.PDAVisualLayers.Flashlight"]
- type: Slippery - type: Slippery
paralyzeTime: 4 paralyzeTime: 4
- type: Physics - type: Physics
@@ -91,15 +83,28 @@
components: components:
- type: PDA - type: PDA
idCard: MimeIDCard idCard: MimeIDCard
- type: Sprite - type: Appearance
sprite: Objects/Devices/pda.rsi visuals:
netsync: false - type: PDAVisualizer
layers: state: pda-mime
- state: pda-mime - type: Icon
map: ["enum.PDAVisualLayers.Base"] state: pda-mime
- state: light_overlay
shader: unshaded # TODO: uncomment this when the QM job gets added
map: ["enum.PDAVisualLayers.Flashlight"] #- 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 - type: entity
name: Cargo PDA name: Cargo PDA
@@ -109,16 +114,12 @@
components: components:
- type: PDA - type: PDA
idCard: CargoIDCard idCard: CargoIDCard
- type: Appearance
- type: Sprite visuals:
sprite: Objects/Devices/pda.rsi - type: PDAVisualizer
netsync: false state: pda-cargo
layers: - type: Icon
- state: pda-cargo state: pda-cargo
map: ["enum.PDAVisualLayers.Base"]
- state: light_overlay
shader: unshaded
map: ["enum.PDAVisualLayers.Flashlight"]
- type: entity - type: entity
name: Bartender PDA name: Bartender PDA
@@ -128,16 +129,12 @@
components: components:
- type: PDA - type: PDA
idCard: BartenderIDCard idCard: BartenderIDCard
- type: Appearance
- type: Sprite visuals:
sprite: Objects/Devices/pda.rsi - type: PDAVisualizer
netsync: false state: pda-bartender
layers: - type: Icon
- state: pda-bartender state: pda-bartender
map: ["enum.PDAVisualLayers.Base"]
- state: light_overlay
shader: unshaded
map: ["enum.PDAVisualLayers.Flashlight"]
- type: entity - type: entity
@@ -148,195 +145,180 @@
components: components:
- type: PDA - type: PDA
idCard: JanitorIDCard idCard: JanitorIDCard
- type: Appearance
- type: Sprite visuals:
sprite: Objects/Devices/pda.rsi - type: PDAVisualizer
netsync: false state: pda-janitor
layers: - type: Icon
- state: pda-janitor state: pda-janitor
map: ["enum.PDAVisualLayers.Base"]
- state: light_overlay
shader: unshaded
map: ["enum.PDAVisualLayers.Flashlight"]
- type: entity - type: entity
name: Captain PDA name: Captain PDA
parent: BasePDA parent: BasePDA
id: CaptainPDA id: CaptainPDA
description: Surprisingly no different than your PDA. description: Surprisingly no different from your PDA.
components: components:
- type: PDA - type: PDA
idCard: CaptainIDCard 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 - type: entity
name: HoP PDA name: Head of Personnel PDA
parent: BasePDA parent: BasePDA
id: HoPPDA id: HoPPDA
description: Looks like it's been chewed on.
components: components:
- type: PDA - type: PDA
idCard: HoPIDCard 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 - type: entity
name: CE PDA name: Chief Engineer PDA
parent: BasePDA parent: BasePDA
id: CEPDA id: CEPDA
description: Looks like it's barely been used.
components: components:
- type: PDA - type: PDA
idCard: CEIDCard idCard: CEIDCard
- type: Appearance
- type: Sprite visuals:
sprite: Objects/Devices/pda.rsi - type: PDAVisualizer
netsync: false state: pda-ce
layers: - type: Icon
- state: pda-ce state: pda-ce
map: ["enum.PDAVisualLayers.Base"]
- state: light_overlay
shader: unshaded
map: ["enum.PDAVisualLayers.Flashlight"]
- type: entity - type: entity
name: Engineer PDA name: Engineer PDA
parent: BasePDA parent: BasePDA
id: EngineerPDA id: EngineerPDA
description: Rugged and well-worn.
components: components:
- type: PDA - type: PDA
idCard: EngineeringIDCard 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 - type: entity
name: CMO PDA name: Chief Medical Officer PDA
parent: BasePDA parent: BasePDA
id: CMOPDA id: CMOPDA
description: Extraordinarily shiny and sterile.
components: components:
- type: PDA - type: PDA
idCard: CMOIDCard 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 - type: entity
name: Medical PDA name: Medical PDA
parent: BasePDA parent: BasePDA
id: MedicalPDA id: MedicalPDA
description: Shiny and sterile.
components: components:
- type: PDA - type: PDA
idCard: MedicalIDCard idCard: MedicalIDCard
- type: Appearance
- type: Sprite visuals:
sprite: Objects/Devices/pda.rsi - type: PDAVisualizer
netsync: false state: pda-medical
layers: - type: Icon
- state: pda-medical state: pda-medical
map: ["enum.PDAVisualLayers.Base"]
- state: light_overlay
shader: unshaded
map: ["enum.PDAVisualLayers.Flashlight"]
- type: entity - type: entity
name: RnD PDA name: Research Director PDA
parent: BasePDA parent: BasePDA
id: RnDPDA id: RnDPDA
description: It appears surprisingly ordinary.
components: components:
- type: PDA - type: PDA
idCard: RDIDCard idCard: RDIDCard
- type: Appearance
- type: Sprite visuals:
sprite: Objects/Devices/pda.rsi - type: PDAVisualizer
netsync: false state: pda-rd
layers: - type: Icon
- state: pda-rd state: pda-rd
map: ["enum.PDAVisualLayers.Base"]
- state: light_overlay
shader: unshaded
map: ["enum.PDAVisualLayers.Flashlight"]
- type: entity - type: entity
name: Science PDA name: Science PDA
parent: BasePDA parent: BasePDA
id: SciencePDA id: SciencePDA
description:
components: components:
- type: PDA - type: PDA
idCard: ResearchIDCard idCard: ResearchIDCard
- type: Appearance
- type: Sprite visuals:
sprite: Objects/Devices/pda.rsi - type: PDAVisualizer
netsync: false state: pda-science
layers: - type: Icon
- state: pda-rd state: pda-science
map: ["enum.PDAVisualLayers.Base"]
- state: light_overlay
shader: unshaded
map: ["enum.PDAVisualLayers.Flashlight"]
- type: entity - type: entity
name: HoS PDA name: Head of Security PDA
parent: BasePDA parent: BasePDA
id: HoSPDA id: HoSPDA
description: Whosoever bears this PDA is the law.
components: components:
- type: PDA - type: PDA
idCard: HoSIDCard idCard: HoSIDCard
- type: Appearance
visuals:
- type: PDAVisualizer
state: pda-hos
- type: Icon
state: pda-hos
- type: Sprite # TODO: Uncomment this when the Warden job gets added
sprite: Objects/Devices/pda.rsi #- type: entity
netsync: false # name: Warden PDA
layers: # parent: BasePDA
- state: pda-hos # id: WardenPDA
map: ["enum.PDAVisualLayers.Base"] # description: The OS appears to have been jailbroken.
- state: light_overlay # components:
shader: unshaded # - type: PDA
map: ["enum.PDAVisualLayers.Flashlight"] # idCard: WardenIDCard
# - type: Appearance
# visuals:
# - type: PDAVisualizer
# state: pda-warden
# - type: Icon
# state: pda-warden
- type: entity - type: entity
name: Security PDA name: Security PDA
parent: BasePDA parent: BasePDA
id: SecurityPDA id: SecurityPDA
description: Red to hide the stains of assistant blood.
components: components:
- type: PDA - type: PDA
idCard: SecurityIDCard idCard: SecurityIDCard
- type: Appearance
- type: Sprite visuals:
sprite: Objects/Devices/pda.rsi - type: PDAVisualizer
netsync: false state: pda-security
layers: - type: Icon
- state: pda-security state: pda-security
map: ["enum.PDAVisualLayers.Base"]
- state: light_overlay
shader: unshaded
map: ["enum.PDAVisualLayers.Flashlight"]