private void UpdateLooks(EntityUid uid, HumanoidAppearanceComponent component, ChangedHumanoidAppearanceEvent args)
        {
            if (!EntityManager.TryGetComponent(uid, out SpriteComponent? sprite))
            {
                return;
            }

            if (EntityManager.TryGetComponent(uid, out SharedBodyComponent? body))
            {
                foreach (var(part, _) in body.Parts)
                {
                    if (part.Owner.TryGetComponent(out SpriteComponent? partSprite))
                    {
                        partSprite !.Color = component.Appearance.SkinColor;
                    }
                }
            }

            sprite.LayerSetColor(HumanoidVisualLayers.Hair,
                                 component.CanColorHair ? component.Appearance.HairColor : Color.White);
            sprite.LayerSetColor(HumanoidVisualLayers.FacialHair,
                                 component.CanColorFacialHair ? component.Appearance.FacialHairColor : Color.White);

            sprite.LayerSetColor(HumanoidVisualLayers.Eyes, component.Appearance.EyeColor);

            sprite.LayerSetState(HumanoidVisualLayers.Chest, component.Sex == Sex.Male ? "torso_m" : "torso_f");
            sprite.LayerSetState(HumanoidVisualLayers.Head, component.Sex == Sex.Male ? "head_m" : "head_f");

            if (sprite.LayerMapTryGet(HumanoidVisualLayers.StencilMask, out _))
            {
                sprite.LayerSetVisible(HumanoidVisualLayers.StencilMask, component.Sex == Sex.Female);
            }

            if (EntityManager.TryGetComponent <CuffableComponent>(uid, out var cuffed))
            {
                sprite.LayerSetVisible(HumanoidVisualLayers.Handcuffs, !cuffed.CanStillInteract);
            }
            else
            {
                sprite.LayerSetVisible(HumanoidVisualLayers.Handcuffs, false);
            }

            var hairStyle = component.Appearance.HairStyleId;

            if (string.IsNullOrWhiteSpace(hairStyle) ||
                !_accessoryManager.IsValidAccessoryInCategory(hairStyle, component.CategoriesHair))
            {
                hairStyle = HairStyles.DefaultHairStyle;
            }

            var facialHairStyle = component.Appearance.FacialHairStyleId;

            if (string.IsNullOrWhiteSpace(facialHairStyle) ||
                !_accessoryManager.IsValidAccessoryInCategory(facialHairStyle, component.CategoriesFacialHair))
            {
                facialHairStyle = HairStyles.DefaultFacialHairStyle;
            }

            var hairPrototype       = _prototypeManager.Index <SpriteAccessoryPrototype>(hairStyle);
            var facialHairPrototype = _prototypeManager.Index <SpriteAccessoryPrototype>(facialHairStyle);

            sprite.LayerSetSprite(HumanoidVisualLayers.Hair, hairPrototype.Sprite);
            sprite.LayerSetSprite(HumanoidVisualLayers.FacialHair, facialHairPrototype.Sprite);
        }
 private void UpdateSkinColor(EntityUid uid, HumanoidAppearanceComponent component, ChangedHumanoidAppearanceEvent _)
 {
     if (EntityManager.TryGetComponent <SharedBodyComponent>(uid, out SharedBodyComponent?  body))
     {
         foreach (var(part, _) in body.Parts)
         {
             if (EntityManager.TryGetComponent(part.Owner, out SpriteComponent? sprite))
             {
                 sprite !.Color = component.Appearance.SkinColor;
             }
         }
     }
 }
        private void UpdateLooks(EntityUid uid, HumanoidAppearanceComponent component,
                                 ChangedHumanoidAppearanceEvent args)
        {
            var spriteQuery = EntityManager.GetEntityQuery <SpriteComponent>();

            if (!spriteQuery.TryGetComponent(uid, out var sprite))
            {
                return;
            }

            if (EntityManager.TryGetComponent(uid, out SharedBodyComponent? body))
            {
                foreach (var(part, _) in body.Parts)
                {
                    if (spriteQuery.TryGetComponent(part.Owner, out var partSprite))
                    {
                        partSprite.Color = component.Appearance.SkinColor;
                    }
                }
            }

            // Like body parts some stuff may not have hair.
            if (sprite.LayerMapTryGet(HumanoidVisualLayers.Hair, out var hairLayer))
            {
                var hairColor = component.CanColorHair ? component.Appearance.HairColor : Color.White;
                hairColor = component.HairMatchesSkin ? component.Appearance.SkinColor : hairColor;
                sprite.LayerSetColor(hairLayer, hairColor.WithAlpha(component.HairAlpha));

                var hairStyle = component.Appearance.HairStyleId;
                if (string.IsNullOrWhiteSpace(hairStyle) ||
                    !_accessoryManager.IsValidAccessoryInCategory(hairStyle, component.CategoriesHair))
                {
                    hairStyle = HairStyles.DefaultHairStyle;
                }

                var hairPrototype = _prototypeManager.Index <SpriteAccessoryPrototype>(hairStyle);
                sprite.LayerSetSprite(hairLayer, hairPrototype.Sprite);
            }

            if (sprite.LayerMapTryGet(HumanoidVisualLayers.FacialHair, out var facialLayer))
            {
                var facialHairColor = component.CanColorHair ? component.Appearance.FacialHairColor : Color.White;
                facialHairColor = component.HairMatchesSkin ? component.Appearance.SkinColor : facialHairColor;
                sprite.LayerSetColor(facialLayer, facialHairColor.WithAlpha(component.HairAlpha));

                var facialHairStyle = component.Appearance.FacialHairStyleId;
                if (string.IsNullOrWhiteSpace(facialHairStyle) ||
                    !_accessoryManager.IsValidAccessoryInCategory(facialHairStyle, component.CategoriesFacialHair))
                {
                    facialHairStyle = HairStyles.DefaultFacialHairStyle;
                }

                var facialHairPrototype = _prototypeManager.Index <SpriteAccessoryPrototype>(facialHairStyle);
                sprite.LayerSetSprite(facialLayer, facialHairPrototype.Sprite);
            }

            foreach (var layer in BodyPartLayers)
            {
                // Not every mob may have the furry layers hence we just skip it.
                if (!sprite.LayerMapTryGet(layer, out var actualLayer))
                {
                    continue;
                }
                if (!sprite[actualLayer].Visible)
                {
                    continue;
                }

                sprite.LayerSetColor(actualLayer, component.Appearance.SkinColor);
            }

            sprite.LayerSetColor(HumanoidVisualLayers.Eyes, component.Appearance.EyeColor);
            sprite.LayerSetState(HumanoidVisualLayers.Chest, component.Sex == Sex.Male ? "torso_m" : "torso_f");
            sprite.LayerSetState(HumanoidVisualLayers.Head, component.Sex == Sex.Male ? "head_m" : "head_f");

            if (sprite.LayerMapTryGet(HumanoidVisualLayers.StencilMask, out _))
            {
                sprite.LayerSetVisible(HumanoidVisualLayers.StencilMask, component.Sex == Sex.Female);
            }

            if (EntityManager.TryGetComponent <CuffableComponent>(uid, out var cuffed))
            {
                sprite.LayerSetVisible(HumanoidVisualLayers.Handcuffs, !cuffed.CanStillInteract);
            }
            else
            {
                sprite.LayerSetVisible(HumanoidVisualLayers.Handcuffs, false);
            }
        }