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