diff --git a/Content.Client/CharacterAppearance/HumanoidAppearanceComponent.cs b/Content.Client/CharacterAppearance/HumanoidAppearanceComponent.cs index d4c0c3ce4e..0d55e206d9 100644 --- a/Content.Client/CharacterAppearance/HumanoidAppearanceComponent.cs +++ b/Content.Client/CharacterAppearance/HumanoidAppearanceComponent.cs @@ -1,4 +1,4 @@ -using Content.Client.Cuffs.Components; +using Content.Client.Cuffs.Components; using Content.Shared.Body.Components; using Content.Shared.Body.Part; using Content.Shared.CharacterAppearance; @@ -120,15 +120,10 @@ namespace Content.Client.CharacterAppearance return; } - var layer = args.Part.ToHumanoidLayer(); - - if (layer == null) - { - return; - } - + var layers = args.Part.ToHumanoidLayers(); // TODO BODY Layer color, sprite and state - sprite.LayerSetVisible(layer, true); + foreach (var layer in layers) + sprite.LayerSetVisible(layer, true); } public void BodyPartRemoved(BodyPartRemovedEventArgs args) @@ -143,15 +138,10 @@ namespace Content.Client.CharacterAppearance return; } - var layer = args.Part.ToHumanoidLayer(); - - if (layer == null) - { - return; - } - + var layers = args.Part.ToHumanoidLayers(); // TODO BODY Layer color, sprite and state - sprite.LayerSetVisible(layer, false); + foreach (var layer in layers) + sprite.LayerSetVisible(layer, false); } } } diff --git a/Content.Shared/CharacterAppearance/HumanoidVisualLayersExtension.cs b/Content.Shared/CharacterAppearance/HumanoidVisualLayersExtension.cs index bec83f47df..7416420837 100644 --- a/Content.Shared/CharacterAppearance/HumanoidVisualLayersExtension.cs +++ b/Content.Shared/CharacterAppearance/HumanoidVisualLayersExtension.cs @@ -1,47 +1,90 @@ -using System; +using System; +using System.Collections.Generic; using Content.Shared.Body.Part; namespace Content.Shared.CharacterAppearance { public static class HumanoidVisualLayersExtension { - public static HumanoidVisualLayers? ToHumanoidLayer(this SharedBodyPartComponent part) + public static IEnumerable ToHumanoidLayers(this SharedBodyPartComponent part) { - return part.PartType switch + switch (part.PartType) { - BodyPartType.Other => null, - BodyPartType.Torso => HumanoidVisualLayers.Chest, - BodyPartType.Head => HumanoidVisualLayers.Head, - BodyPartType.Arm => part.Symmetry switch - { - BodyPartSymmetry.None => null, - BodyPartSymmetry.Left => HumanoidVisualLayers.LArm, - BodyPartSymmetry.Right => HumanoidVisualLayers.RArm, - _ => throw new ArgumentOutOfRangeException() - }, - BodyPartType.Hand => part.Symmetry switch - { - BodyPartSymmetry.None => null, - BodyPartSymmetry.Left => HumanoidVisualLayers.LHand, - BodyPartSymmetry.Right => HumanoidVisualLayers.RHand, - _ => throw new ArgumentOutOfRangeException() - }, - BodyPartType.Leg => part.Symmetry switch - { - BodyPartSymmetry.None => null, - BodyPartSymmetry.Left => HumanoidVisualLayers.LLeg, - BodyPartSymmetry.Right => HumanoidVisualLayers.RLeg, - _ => throw new ArgumentOutOfRangeException() - }, - BodyPartType.Foot => part.Symmetry switch - { - BodyPartSymmetry.None => null, - BodyPartSymmetry.Left => HumanoidVisualLayers.LFoot, - BodyPartSymmetry.Right => HumanoidVisualLayers.RFoot, - _ => throw new ArgumentOutOfRangeException() - }, - _ => throw new ArgumentOutOfRangeException() - }; + case BodyPartType.Other: + yield break; + case BodyPartType.Torso: + yield return HumanoidVisualLayers.Chest; + break; + case BodyPartType.Head: + yield return HumanoidVisualLayers.Head; + yield return HumanoidVisualLayers.Eyes; + yield return HumanoidVisualLayers.FacialHair; + yield return HumanoidVisualLayers.Hair; + yield return HumanoidVisualLayers.StencilMask; + break; + case BodyPartType.Arm: + switch (part.Symmetry) + { + case BodyPartSymmetry.None: + yield break; + case BodyPartSymmetry.Left: + yield return HumanoidVisualLayers.LArm; + break; + case BodyPartSymmetry.Right: + yield return HumanoidVisualLayers.RArm; + break; + default: + yield break; + } + yield break; + case BodyPartType.Hand: + switch (part.Symmetry) + { + case BodyPartSymmetry.None: + yield break; + case BodyPartSymmetry.Left: + yield return HumanoidVisualLayers.LHand; + break; + case BodyPartSymmetry.Right: + yield return HumanoidVisualLayers.RHand; + break; + default: + yield break; + } + yield break; + case BodyPartType.Leg: + switch (part.Symmetry) + { + case BodyPartSymmetry.None: + yield break; + case BodyPartSymmetry.Left: + yield return HumanoidVisualLayers.LLeg; + break; + case BodyPartSymmetry.Right: + yield return HumanoidVisualLayers.RLeg; + break; + default: + yield break; + } + yield break; + case BodyPartType.Foot: + switch (part.Symmetry) + { + case BodyPartSymmetry.None: + yield break; + case BodyPartSymmetry.Left: + yield return HumanoidVisualLayers.LFoot; + break; + case BodyPartSymmetry.Right: + yield return HumanoidVisualLayers.RFoot; + break; + default: + yield break; + } + yield break; + default: + yield break; + } } } }