| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- using Robust.Client.GameObjects;
- using Robust.Client.Graphics;
- using Robust.Client.Input;
- using Robust.Client.Player;
- using Robust.Client.UserInterface;
- using Robust.Shared.Enums;
- using Robust.Shared.Prototypes;
- using static Content.Client.Mapping.MappingState;
- namespace Content.Client.Mapping;
- public sealed class MappingOverlay : Overlay
- {
- [Dependency] private readonly IEntityManager _entities = default!;
- [Dependency] private readonly IPlayerManager _player = default!;
- [Dependency] private readonly IPrototypeManager _prototypes = default!;
- // 1 off in case something else uses these colors since we use them to compare
- private static readonly Color PickColor = new(1, 255, 0);
- private static readonly Color DeleteColor = new(255, 1, 0);
- private readonly Dictionary<EntityUid, Color> _oldColors = new();
- private readonly MappingState _state;
- private readonly ShaderInstance _shader;
- public override OverlaySpace Space => OverlaySpace.WorldSpace;
- public MappingOverlay(MappingState state)
- {
- IoCManager.InjectDependencies(this);
- _state = state;
- _shader = _prototypes.Index<ShaderPrototype>("unshaded").Instance();
- }
- protected override void Draw(in OverlayDrawArgs args)
- {
- foreach (var (id, color) in _oldColors)
- {
- if (!_entities.TryGetComponent(id, out SpriteComponent? sprite))
- continue;
- if (sprite.Color == DeleteColor || sprite.Color == PickColor)
- sprite.Color = color;
- }
- _oldColors.Clear();
- if (_player.LocalEntity == null)
- return;
- var handle = args.WorldHandle;
- handle.UseShader(_shader);
- switch (_state.State)
- {
- case CursorState.Pick:
- {
- if (_state.GetHoveredEntity() is { } entity &&
- _entities.TryGetComponent(entity, out SpriteComponent? sprite))
- {
- _oldColors[entity] = sprite.Color;
- sprite.Color = PickColor;
- }
- break;
- }
- case CursorState.Delete:
- {
- if (_state.GetHoveredEntity() is { } entity &&
- _entities.TryGetComponent(entity, out SpriteComponent? sprite))
- {
- _oldColors[entity] = sprite.Color;
- sprite.Color = DeleteColor;
- }
- break;
- }
- }
- handle.UseShader(null);
- }
- }
|