Adds validation bool for setting humanoid skin color (#15360)

This commit is contained in:
Flipp Syder
2023-04-23 02:16:59 -07:00
committed by GitHub
parent c8a61a08a8
commit c29968372e
3 changed files with 12 additions and 14 deletions

View File

@@ -164,7 +164,7 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem
? profile.Appearance.SkinColor.WithAlpha(hairAlpha) : profile.Appearance.HairColor; ? profile.Appearance.SkinColor.WithAlpha(hairAlpha) : profile.Appearance.HairColor;
var hair = new Marking(profile.Appearance.HairStyleId, var hair = new Marking(profile.Appearance.HairStyleId,
new[] { hairColor }); new[] { hairColor });
var facialHairColor = _markingManager.MustMatchSkin(profile.Species, HumanoidVisualLayers.FacialHair, out var facialHairAlpha, _prototypeManager) var facialHairColor = _markingManager.MustMatchSkin(profile.Species, HumanoidVisualLayers.FacialHair, out var facialHairAlpha, _prototypeManager)
? profile.Appearance.SkinColor.WithAlpha(facialHairAlpha) : profile.Appearance.FacialHairColor; ? profile.Appearance.SkinColor.WithAlpha(facialHairAlpha) : profile.Appearance.FacialHairColor;
var facialHair = new Marking(profile.Appearance.FacialHairStyleId, var facialHair = new Marking(profile.Appearance.FacialHairStyleId,
@@ -178,7 +178,7 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem
{ {
markings.AddBack(MarkingCategories.FacialHair, facialHair); markings.AddBack(MarkingCategories.FacialHair, facialHair);
} }
// Finally adding marking with forced colors // Finally adding marking with forced colors
foreach (var (marking, prototype) in markingFColored) foreach (var (marking, prototype) in markingFColored)
{ {
@@ -190,10 +190,10 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem
); );
markings.AddBack(prototype.MarkingCategory, new Marking(marking.MarkingId, markingColors)); markings.AddBack(prototype.MarkingCategory, new Marking(marking.MarkingId, markingColors));
} }
markings.EnsureSpecies(profile.Species, profile.Appearance.SkinColor, _markingManager, _prototypeManager); markings.EnsureSpecies(profile.Species, profile.Appearance.SkinColor, _markingManager, _prototypeManager);
markings.EnsureDefault( markings.EnsureDefault(
profile.Appearance.SkinColor, profile.Appearance.SkinColor,
profile.Appearance.EyeColor, profile.Appearance.EyeColor,
_markingManager); _markingManager);
@@ -318,13 +318,13 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem
} }
sprite.LayerSetVisible(layerId, visible); sprite.LayerSetVisible(layerId, visible);
if (!visible || setting == null) // this is kinda implied if (!visible || setting == null) // this is kinda implied
{ {
continue; continue;
} }
if (colors != null) if (colors != null)
{ {
sprite.LayerSetColor(layerId, colors[j]); sprite.LayerSetColor(layerId, colors[j]);
} }
@@ -335,15 +335,12 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem
} }
} }
public override void SetSkinColor(EntityUid uid, Color skinColor, bool sync = true, HumanoidAppearanceComponent? humanoid = null) public override void SetSkinColor(EntityUid uid, Color skinColor, bool sync = true, bool verify = true, HumanoidAppearanceComponent? humanoid = null)
{ {
if (!Resolve(uid, ref humanoid) || humanoid.SkinColor == skinColor) if (!Resolve(uid, ref humanoid) || humanoid.SkinColor == skinColor)
return; return;
humanoid.SkinColor = skinColor; base.SetSkinColor(uid, skinColor, false, verify, humanoid);
if (sync)
Dirty(humanoid);
if (!TryComp(uid, out SpriteComponent? sprite)) if (!TryComp(uid, out SpriteComponent? sprite))
return; return;

View File

@@ -145,7 +145,7 @@ namespace Content.Server.Zombies
zombiecomp.BeforeZombifiedSkinColor = huApComp.SkinColor; zombiecomp.BeforeZombifiedSkinColor = huApComp.SkinColor;
zombiecomp.BeforeZombifiedCustomBaseLayers = new(huApComp.CustomBaseLayers); zombiecomp.BeforeZombifiedCustomBaseLayers = new(huApComp.CustomBaseLayers);
_sharedHuApp.SetSkinColor(target, zombiecomp.SkinColor, humanoid: huApComp); _sharedHuApp.SetSkinColor(target, zombiecomp.SkinColor, verify: false, humanoid: huApComp);
_sharedHuApp.SetBaseLayerColor(target, HumanoidVisualLayers.Eyes, zombiecomp.EyeColor, humanoid: huApComp); _sharedHuApp.SetBaseLayerColor(target, HumanoidVisualLayers.Eyes, zombiecomp.EyeColor, humanoid: huApComp);
// this might not resync on clone? // this might not resync on clone?

View File

@@ -144,8 +144,9 @@ public abstract class SharedHumanoidAppearanceSystem : EntitySystem
/// <param name="uid">The humanoid mob's UID.</param> /// <param name="uid">The humanoid mob's UID.</param>
/// <param name="skinColor">Skin color to set on the humanoid mob.</param> /// <param name="skinColor">Skin color to set on the humanoid mob.</param>
/// <param name="sync">Whether to synchronize this to the humanoid mob, or not.</param> /// <param name="sync">Whether to synchronize this to the humanoid mob, or not.</param>
/// <param name="verify">Whether to verify the skin color can be set on this humanoid or not</param>
/// <param name="humanoid">Humanoid component of the entity</param> /// <param name="humanoid">Humanoid component of the entity</param>
public virtual void SetSkinColor(EntityUid uid, Color skinColor, bool sync = true, HumanoidAppearanceComponent? humanoid = null) public virtual void SetSkinColor(EntityUid uid, Color skinColor, bool sync = true, bool verify = true, HumanoidAppearanceComponent? humanoid = null)
{ {
if (!Resolve(uid, ref humanoid)) if (!Resolve(uid, ref humanoid))
return; return;
@@ -155,7 +156,7 @@ public abstract class SharedHumanoidAppearanceSystem : EntitySystem
return; return;
} }
if (!SkinColor.VerifySkinColor(species.SkinColoration, skinColor)) if (verify && !SkinColor.VerifySkinColor(species.SkinColoration, skinColor))
{ {
skinColor = SkinColor.ValidSkinTone(species.SkinColoration, skinColor); skinColor = SkinColor.ValidSkinTone(species.SkinColoration, skinColor);
} }