From f6d81c04c0b84d685bc0c09d4ddb802cd40f8df8 Mon Sep 17 00:00:00 2001 From: Tornado Tech <54727692+Tornado-Technology@users.noreply.github.com> Date: Tue, 20 Aug 2024 01:41:56 +1000 Subject: [PATCH] Added world sprite system (#397) * Added world sprite system * Added important comment --- .../WorldSprite/CP14WorldSpriteComponent.cs | 10 +++ .../WorldSprite/CP14WorldSpriteSystem.cs | 65 +++++++++++++++++++ Content.Server/Entry/IgnoredComponents.cs | 3 +- .../WorldSprite/WorldSpriteVisualLayer.cs | 6 ++ Resources/Prototypes/_CP14/debug.yml | 31 +++++++++ 5 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 Content.Client/_CP14/WorldSprite/CP14WorldSpriteComponent.cs create mode 100644 Content.Client/_CP14/WorldSprite/CP14WorldSpriteSystem.cs create mode 100644 Content.Shared/_CP14/WorldSprite/WorldSpriteVisualLayer.cs create mode 100644 Resources/Prototypes/_CP14/debug.yml diff --git a/Content.Client/_CP14/WorldSprite/CP14WorldSpriteComponent.cs b/Content.Client/_CP14/WorldSprite/CP14WorldSpriteComponent.cs new file mode 100644 index 0000000000..135f27591b --- /dev/null +++ b/Content.Client/_CP14/WorldSprite/CP14WorldSpriteComponent.cs @@ -0,0 +1,10 @@ +namespace Content.Client._CP14.WorldSprite; + +/// +/// RUN, IF YOU SEE THE CODE TO THIS FUCKING THING, YOU'LL DIE ON THE SPOT. +/// +[RegisterComponent] +public sealed partial class CP14WorldSpriteComponent : Component +{ + public bool Inited; +} diff --git a/Content.Client/_CP14/WorldSprite/CP14WorldSpriteSystem.cs b/Content.Client/_CP14/WorldSprite/CP14WorldSpriteSystem.cs new file mode 100644 index 0000000000..e995ab7a93 --- /dev/null +++ b/Content.Client/_CP14/WorldSprite/CP14WorldSpriteSystem.cs @@ -0,0 +1,65 @@ +using Content.Shared._CP14.WorldSprite; +using Content.Shared.Throwing; +using Robust.Client.GameObjects; +using Robust.Shared.Map.Components; + +namespace Content.Client._CP14.WorldSprite; + +public sealed class CP14WorldSpriteSystem : EntitySystem +{ + [Dependency] private readonly AppearanceSystem _appearance = default!; + + public override void Initialize() + { + base.Initialize(); + +#if DEBUG + SubscribeLocalEvent(OnComponentInit); +#endif + + SubscribeLocalEvent(OnParentChanged); + SubscribeLocalEvent(OnThrown); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var worldSpriteComponent)) + { + if (worldSpriteComponent.Inited) + continue; + + Update(uid); + } + } + +#if DEBUG + private void OnComponentInit(Entity entity, ref ComponentInit args) + { + if (!HasComp(entity)) + Log.Error($"Requires an {nameof(AppearanceComponent)} for {entity}"); + } +#endif + + private void OnParentChanged(Entity entity, ref EntParentChangedMessage args) + { + Update(entity); + } + + private void OnThrown(Entity entity, ref ThrownEvent args) + { + // Idk, but throw don't call reparent + Update(entity, args.User); + } + + private void Update(EntityUid entity, EntityUid? parent = null) + { + parent ??= Transform(entity).ParentUid; + + var inWorld = HasComp(parent) || HasComp(parent); + + _appearance.SetData(entity, WorldSpriteVisualLayers.Layer, inWorld); + } +} diff --git a/Content.Server/Entry/IgnoredComponents.cs b/Content.Server/Entry/IgnoredComponents.cs index 092c947e1e..bd44146c83 100644 --- a/Content.Server/Entry/IgnoredComponents.cs +++ b/Content.Server/Entry/IgnoredComponents.cs @@ -4,7 +4,8 @@ namespace Content.Server.Entry public static class IgnoredComponents { public static string[] List => new[] { - "CP14WaveShader", //CP14 Wave shader + "CP14WaveShader", // CP14 Wave shader + "CP14WorldSprite", // CP14 World Sprite "ConstructionGhost", "IconSmooth", "InteractionOutline", diff --git a/Content.Shared/_CP14/WorldSprite/WorldSpriteVisualLayer.cs b/Content.Shared/_CP14/WorldSprite/WorldSpriteVisualLayer.cs new file mode 100644 index 0000000000..058adaf133 --- /dev/null +++ b/Content.Shared/_CP14/WorldSprite/WorldSpriteVisualLayer.cs @@ -0,0 +1,6 @@ +namespace Content.Shared._CP14.WorldSprite; + +public enum WorldSpriteVisualLayers : byte +{ + Layer, +} diff --git a/Resources/Prototypes/_CP14/debug.yml b/Resources/Prototypes/_CP14/debug.yml new file mode 100644 index 0000000000..541ce33db9 --- /dev/null +++ b/Resources/Prototypes/_CP14/debug.yml @@ -0,0 +1,31 @@ +- type: entity + parent: BaseItem + id: CP14DebugWorldSprite + name: strange copper bar + suffix: CP, DEBUG + components: + # Just copy me, I am block with name Bob + - type: Appearance + - type: CP14WorldSprite + - type: GenericVisualizer + visuals: + enum.WorldSpriteVisualLayers.Layer: + world: + True: + visible: true + False: + visible: false + content: + True: + visible: false + False: + visible: true + # Just copy me, I am block with name Bob + + - type: Sprite + sprite: /Textures/_CP14/Objects/Materials/copper_bar.rsi + layers: + - map: ["world"] + state: bar + - map: ["content"] + state: bar_2