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