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.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);
}
}
}

View File

@@ -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<HumanoidVisualLayers> 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;
}
}
}
}