//markings.RemoveCategory(MarkingCategories.FacialHair);
// We need to ensure hair before applying it or coloring can try depend on markings that can be invalid
- var hairColor = _markingManager.MustMatchSkin(profile.Species, HumanoidVisualLayers.Hair, _prototypeManager)
- ? profile.Appearance.SkinColor : profile.Appearance.HairColor;
+ var hairColor = _markingManager.MustMatchSkin(profile.Species, HumanoidVisualLayers.Hair, out var hairAlpha, _prototypeManager)
+ ? profile.Appearance.SkinColor.WithAlpha(hairAlpha) : profile.Appearance.HairColor;
var hair = new Marking(profile.Appearance.HairStyleId,
new[] { hairColor });
- var facialHairColor = _markingManager.MustMatchSkin(profile.Species, HumanoidVisualLayers.FacialHair, _prototypeManager)
- ? profile.Appearance.SkinColor : profile.Appearance.FacialHairColor;
+ var facialHairColor = _markingManager.MustMatchSkin(profile.Species, HumanoidVisualLayers.FacialHair, out var facialHairAlpha, _prototypeManager)
+ ? profile.Appearance.SkinColor.WithAlpha(facialHairAlpha) : profile.Appearance.FacialHairColor;
var facialHair = new Marking(profile.Appearance.FacialHairStyleId,
new[] { facialHairColor });
markingSet.AddBack(MarkingCategories.FacialHair, FacialHairMarking);
}
- if (!_markingManager.MustMatchSkin(_currentSpecies, marking.BodyPart, _prototypeManager))
+ if (!_markingManager.MustMatchSkin(_currentSpecies, marking.BodyPart, out var _, _prototypeManager))
{
// Do default coloring
var colors = MarkingColoring.GetMarkingLayerColors(
{
if (_markingManager.CanBeApplied(Profile.Species, hairProto, _prototypeManager))
{
- if (_markingManager.MustMatchSkin(Profile.Species, HumanoidVisualLayers.Hair, _prototypeManager))
+ if (_markingManager.MustMatchSkin(Profile.Species, HumanoidVisualLayers.Hair, out var _, _prototypeManager))
{
hairColor = Profile.Appearance.SkinColor;
}
{
if (_markingManager.CanBeApplied(Profile.Species, facialHairProto, _prototypeManager))
{
- if (_markingManager.MustMatchSkin(Profile.Species, HumanoidVisualLayers.Hair, _prototypeManager))
+ if (_markingManager.MustMatchSkin(Profile.Species, HumanoidVisualLayers.Hair, out var _, _prototypeManager))
{
facialHairColor = Profile.Appearance.SkinColor;
}
// Hair/facial hair - this may eventually be deprecated.
// We need to ensure hair before applying it or coloring can try depend on markings that can be invalid
- var hairColor = _markingManager.MustMatchSkin(profile.Species, HumanoidVisualLayers.Hair, _prototypeManager)
- ? profile.Appearance.SkinColor : profile.Appearance.HairColor;
- var facialHairColor = _markingManager.MustMatchSkin(profile.Species, HumanoidVisualLayers.FacialHair, _prototypeManager)
- ? profile.Appearance.SkinColor : profile.Appearance.FacialHairColor;
+ var hairColor = _markingManager.MustMatchSkin(profile.Species, HumanoidVisualLayers.Hair, out var hairAlpha, _prototypeManager)
+ ? profile.Appearance.SkinColor.WithAlpha(hairAlpha) : profile.Appearance.HairColor;
+ var facialHairColor = _markingManager.MustMatchSkin(profile.Species, HumanoidVisualLayers.FacialHair, out var facialHairAlpha, _prototypeManager)
+ ? profile.Appearance.SkinColor.WithAlpha(facialHairAlpha) : profile.Appearance.FacialHairColor;
if (_markingManager.Markings.TryGetValue(profile.Appearance.HairStyleId, out var hairPrototype) &&
_markingManager.CanBeApplied(profile.Species, hairPrototype, _prototypeManager))
return true;
}
- public bool MustMatchSkin(string species, HumanoidVisualLayers layer, IPrototypeManager? prototypeManager = null)
+ public bool MustMatchSkin(string species, HumanoidVisualLayers layer, out float alpha, IPrototypeManager? prototypeManager = null)
{
IoCManager.Resolve(ref prototypeManager);
-
var speciesProto = prototypeManager.Index<SpeciesPrototype>(species);
if (
!prototypeManager.TryIndex(speciesProto.SpriteSet, out HumanoidSpeciesBaseSpritesPrototype? baseSprites) ||
!sprite.MarkingsMatchSkin
)
{
+ alpha = 1f;
return false;
}
+ alpha = sprite.LayerAlpha;
return true;
}
}
foreach (var marking in list)
{
if (markingManager.TryGetMarking(marking, out var prototype) &&
- markingManager.MustMatchSkin(species, prototype.BodyPart, prototypeManager))
+ markingManager.MustMatchSkin(species, prototype.BodyPart, out var alpha, prototypeManager))
{
- marking.SetColor(skinColor.Value);
+ marking.SetColor(skinColor.Value.WithAlpha(alpha));
}
}
}