Losing a head doesn't mean you lose your eyes #3956 #4061 (#4225)

Co-authored-by: Michael Will <will_m@outlook.de>
This commit is contained in:
scrato
2021-08-07 23:18:42 +02:00
committed by GitHub
parent 83be320a74
commit 298a77c7af
2 changed files with 86 additions and 53 deletions

View File

@@ -1,4 +1,4 @@
using Content.Client.Cuffs.Components; using Content.Client.Cuffs.Components;
using Content.Shared.Body.Components; using Content.Shared.Body.Components;
using Content.Shared.Body.Part; using Content.Shared.Body.Part;
using Content.Shared.CharacterAppearance; using Content.Shared.CharacterAppearance;
@@ -120,14 +120,9 @@ namespace Content.Client.CharacterAppearance
return; return;
} }
var layer = args.Part.ToHumanoidLayer(); var layers = args.Part.ToHumanoidLayers();
if (layer == null)
{
return;
}
// TODO BODY Layer color, sprite and state // TODO BODY Layer color, sprite and state
foreach (var layer in layers)
sprite.LayerSetVisible(layer, true); sprite.LayerSetVisible(layer, true);
} }
@@ -143,14 +138,9 @@ namespace Content.Client.CharacterAppearance
return; return;
} }
var layer = args.Part.ToHumanoidLayer(); var layers = args.Part.ToHumanoidLayers();
if (layer == null)
{
return;
}
// TODO BODY Layer color, sprite and state // TODO BODY Layer color, sprite and state
foreach (var layer in layers)
sprite.LayerSetVisible(layer, false); sprite.LayerSetVisible(layer, false);
} }
} }

View File

@@ -1,47 +1,90 @@
using System; using System;
using System.Collections.Generic;
using Content.Shared.Body.Part; using Content.Shared.Body.Part;
namespace Content.Shared.CharacterAppearance namespace Content.Shared.CharacterAppearance
{ {
public static class HumanoidVisualLayersExtension public static class HumanoidVisualLayersExtension
{ {
public static HumanoidVisualLayers? ToHumanoidLayer(this SharedBodyPartComponent part) public static IEnumerable<HumanoidVisualLayers> ToHumanoidLayers(this SharedBodyPartComponent part)
{ {
return part.PartType switch switch (part.PartType)
{ {
BodyPartType.Other => null, case BodyPartType.Other:
BodyPartType.Torso => HumanoidVisualLayers.Chest, yield break;
BodyPartType.Head => HumanoidVisualLayers.Head, case BodyPartType.Torso:
BodyPartType.Arm => part.Symmetry switch 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)
{ {
BodyPartSymmetry.None => null, case BodyPartSymmetry.None:
BodyPartSymmetry.Left => HumanoidVisualLayers.LArm, yield break;
BodyPartSymmetry.Right => HumanoidVisualLayers.RArm, case BodyPartSymmetry.Left:
_ => throw new ArgumentOutOfRangeException() yield return HumanoidVisualLayers.LArm;
}, break;
BodyPartType.Hand => part.Symmetry switch case BodyPartSymmetry.Right:
yield return HumanoidVisualLayers.RArm;
break;
default:
yield break;
}
yield break;
case BodyPartType.Hand:
switch (part.Symmetry)
{ {
BodyPartSymmetry.None => null, case BodyPartSymmetry.None:
BodyPartSymmetry.Left => HumanoidVisualLayers.LHand, yield break;
BodyPartSymmetry.Right => HumanoidVisualLayers.RHand, case BodyPartSymmetry.Left:
_ => throw new ArgumentOutOfRangeException() yield return HumanoidVisualLayers.LHand;
}, break;
BodyPartType.Leg => part.Symmetry switch case BodyPartSymmetry.Right:
yield return HumanoidVisualLayers.RHand;
break;
default:
yield break;
}
yield break;
case BodyPartType.Leg:
switch (part.Symmetry)
{ {
BodyPartSymmetry.None => null, case BodyPartSymmetry.None:
BodyPartSymmetry.Left => HumanoidVisualLayers.LLeg, yield break;
BodyPartSymmetry.Right => HumanoidVisualLayers.RLeg, case BodyPartSymmetry.Left:
_ => throw new ArgumentOutOfRangeException() yield return HumanoidVisualLayers.LLeg;
}, break;
BodyPartType.Foot => part.Symmetry switch case BodyPartSymmetry.Right:
yield return HumanoidVisualLayers.RLeg;
break;
default:
yield break;
}
yield break;
case BodyPartType.Foot:
switch (part.Symmetry)
{ {
BodyPartSymmetry.None => null, case BodyPartSymmetry.None:
BodyPartSymmetry.Left => HumanoidVisualLayers.LFoot, yield break;
BodyPartSymmetry.Right => HumanoidVisualLayers.RFoot, case BodyPartSymmetry.Left:
_ => throw new ArgumentOutOfRangeException() yield return HumanoidVisualLayers.LFoot;
}, break;
_ => throw new ArgumentOutOfRangeException() case BodyPartSymmetry.Right:
}; yield return HumanoidVisualLayers.RFoot;
break;
default:
yield break;
}
yield break;
default:
yield break;
}
} }
} }
} }