From e90fd01e5b946eacd5874ea0258e891bd6deaf1d Mon Sep 17 00:00:00 2001 From: Ed Date: Fri, 21 Feb 2025 20:28:03 +0300 Subject: [PATCH] try --- .../CP14SimpleDisplacementMapComponent.cs | 16 +++++ .../CP14SimpleDisplacementMapSystem.cs | 36 ++++++++++++ Content.Server/Entry/IgnoredComponents.cs | 4 +- .../_CP14/Entities/Mobs/Species/goblin.yml | 58 +++++++++++++++++++ 4 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 Content.Client/_CP14/Displacement/CP14SimpleDisplacementMapComponent.cs create mode 100644 Content.Client/_CP14/Displacement/CP14SimpleDisplacementMapSystem.cs diff --git a/Content.Client/_CP14/Displacement/CP14SimpleDisplacementMapComponent.cs b/Content.Client/_CP14/Displacement/CP14SimpleDisplacementMapComponent.cs new file mode 100644 index 0000000000..3c2e57f2fe --- /dev/null +++ b/Content.Client/_CP14/Displacement/CP14SimpleDisplacementMapComponent.cs @@ -0,0 +1,16 @@ +using Content.Shared.DisplacementMap; + +namespace Content.Client._CP14.Displacement; + +/// +/// Simply apply displacements to sprite layers +/// +[RegisterComponent] +public sealed partial class CP14SimpleDisplacementMapComponent : Component +{ + [DataField] + public Dictionary Displacements = new(); + + public readonly HashSet RevealedLayers = new(); +} + diff --git a/Content.Client/_CP14/Displacement/CP14SimpleDisplacementMapSystem.cs b/Content.Client/_CP14/Displacement/CP14SimpleDisplacementMapSystem.cs new file mode 100644 index 0000000000..7ee701d740 --- /dev/null +++ b/Content.Client/_CP14/Displacement/CP14SimpleDisplacementMapSystem.cs @@ -0,0 +1,36 @@ +using Content.Client.DisplacementMap; +using Content.Shared.Item; +using Robust.Client.GameObjects; + +namespace Content.Client._CP14.Displacement; + +public sealed class CP14SimpleDisplacementMapSystem : EntitySystem +{ + [Dependency] private readonly DisplacementMapSystem _displacement = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnVisualChanged); + } + + private void OnVisualChanged(Entity ent, ref VisualsChangedEvent args) + { + if (!TryComp(ent, out var sprite)) + return; + + foreach (var key in ent.Comp.RevealedLayers) + { + sprite.RemoveLayer(key); + } + ent.Comp.RevealedLayers.Clear(); + + foreach (var (key, dData) in ent.Comp.Displacements) + { + if (!sprite.LayerMapTryGet(key, out var index)) + continue; + + _displacement.TryAddDisplacement(dData, sprite, index, key, ent.Comp.RevealedLayers); + } + } +} diff --git a/Content.Server/Entry/IgnoredComponents.cs b/Content.Server/Entry/IgnoredComponents.cs index 5f18c5472a..5bd84f48ff 100644 --- a/Content.Server/Entry/IgnoredComponents.cs +++ b/Content.Server/Entry/IgnoredComponents.cs @@ -4,8 +4,8 @@ namespace Content.Server.Entry public static class IgnoredComponents { public static string[] List => new[] { - "CP14WaveShader", // CP14 Wave shader - "CP14WorldSprite", // CP14 World Sprite + "CP14WaveShader", // CP14 + "CP14SimpleDisplacementMap", // CP14 "ConstructionGhost", "IconSmooth", "InteractionOutline", diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/Species/goblin.yml b/Resources/Prototypes/_CP14/Entities/Mobs/Species/goblin.yml index ada22c8cc4..fcfaa186f6 100644 --- a/Resources/Prototypes/_CP14/Entities/Mobs/Species/goblin.yml +++ b/Resources/Prototypes/_CP14/Entities/Mobs/Species/goblin.yml @@ -4,6 +4,54 @@ name: Mr. Goblin abstract: true components: + - type: Sprite + layers: + - map: [ "enum.HumanoidVisualLayers.Chest" ] + - map: [ "enum.HumanoidVisualLayers.Head" ] + - map: [ "enum.HumanoidVisualLayers.Snout" ] + - map: [ "enum.HumanoidVisualLayers.Eyes" ] + - map: [ "enum.HumanoidVisualLayers.RArm" ] + - map: [ "enum.HumanoidVisualLayers.LArm" ] + - map: [ "enum.HumanoidVisualLayers.RLeg" ] + - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - shader: StencilClear + sprite: _CP14/Mobs/Species/Human/parts.rsi + state: l_leg + - shader: StencilMask + map: [ "enum.HumanoidVisualLayers.StencilMask" ] + sprite: Mobs/Customization/masking_helpers.rsi + state: unisex_full + visible: false + - map: [ "enum.HumanoidVisualLayers.LFoot" ] + - map: [ "enum.HumanoidVisualLayers.RFoot" ] + - map: [ "pants" ] + - map: [ "shoes" ] + - map: [ "shirt" ] + - map: [ "enum.HumanoidVisualLayers.LHand" ] + - map: [ "enum.HumanoidVisualLayers.RHand" ] + - map: [ "gloves" ] + - map: [ "ears" ] + - map: [ "outerClothing" ] + - map: [ "cloak" ] + - map: [ "eyes" ] + - map: [ "belt1" ] + - map: [ "belt2" ] + - map: [ "neck" ] + - map: [ "back" ] + - map: [ "enum.HumanoidVisualLayers.FacialHair" ] + - map: [ "enum.HumanoidVisualLayers.Hair", "HairDisplacement" ] + - map: [ "enum.HumanoidVisualLayers.HeadSide" ] + - map: [ "enum.HumanoidVisualLayers.HeadTop" ] + - map: [ "enum.HumanoidVisualLayers.Tail" ] + - map: [ "mask" ] + - map: [ "head" ] + - map: [ "pocket1" ] + - map: [ "pocket2" ] + - map: ["enum.HumanoidVisualLayers.Handcuffs"] + color: "#ffffff" + sprite: Objects/Misc/handcuffs.rsi + state: body-overlay-2 + visible: false - type: HumanoidAppearance species: CP14Goblin - type: Hunger @@ -73,6 +121,16 @@ 32: sprite: _CP14/Mobs/Species/Goblin/displacement.rsi state: hands + - type: CP14SimpleDisplacementMap + displacements: + HairDisplacement: + sizeMaps: + 32: + sprite: _CP14/Mobs/Species/Goblin/displacement.rsi + state: head + 48: + sprite: _CP14/Mobs/Species/Goblin/displacement48.rsi + state: head - type: Inventory templateId: CP14Human speciesId: goblin