| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- using Content.Shared.Movement.Components;
- using Content.Shared.Movement.Systems;
- using Robust.Client.GameObjects;
- using Robust.Client.Graphics;
- using Robust.Shared.Prototypes;
- namespace Content.Client.Movement.Systems;
- public sealed class FloorOcclusionSystem : SharedFloorOcclusionSystem
- {
- [Dependency] private readonly IPrototypeManager _proto = default!;
- private EntityQuery<SpriteComponent> _spriteQuery;
- public override void Initialize()
- {
- base.Initialize();
- _spriteQuery = GetEntityQuery<SpriteComponent>();
- SubscribeLocalEvent<FloorOcclusionComponent, ComponentStartup>(OnOcclusionStartup);
- SubscribeLocalEvent<FloorOcclusionComponent, ComponentShutdown>(OnOcclusionShutdown);
- SubscribeLocalEvent<FloorOcclusionComponent, AfterAutoHandleStateEvent>(OnOcclusionAuto);
- }
- private void OnOcclusionAuto(Entity<FloorOcclusionComponent> ent, ref AfterAutoHandleStateEvent args)
- {
- SetShader(ent.Owner, ent.Comp.Enabled);
- }
- private void OnOcclusionStartup(Entity<FloorOcclusionComponent> ent, ref ComponentStartup args)
- {
- SetShader(ent.Owner, ent.Comp.Enabled);
- }
- private void OnOcclusionShutdown(Entity<FloorOcclusionComponent> ent, ref ComponentShutdown args)
- {
- SetShader(ent.Owner, false);
- }
- protected override void SetEnabled(Entity<FloorOcclusionComponent> entity)
- {
- SetShader(entity.Owner, entity.Comp.Enabled);
- }
- private void SetShader(Entity<SpriteComponent?> sprite, bool enabled)
- {
- if (!_spriteQuery.Resolve(sprite.Owner, ref sprite.Comp, false))
- return;
- var shader = _proto.Index<ShaderPrototype>("HorizontalCut").Instance();
- if (sprite.Comp.PostShader is not null && sprite.Comp.PostShader != shader)
- return;
- if (enabled)
- {
- sprite.Comp.PostShader = shader;
- }
- else
- {
- sprite.Comp.PostShader = null;
- }
- }
- }
|