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