Improve marker visualization for mapping.

Command renamed to showmarkers.
Actually permanent (so if you place markers with it active, you immediately see them).
This commit is contained in:
Pieter-Jan Briers
2020-05-24 01:47:14 +02:00
parent 4b7937b4a1
commit 1fca133688
4 changed files with 75 additions and 18 deletions

View File

@@ -13,28 +13,14 @@ namespace Content.Client.Commands
internal sealed class ShowMarkersCommand : IConsoleCommand
{
// ReSharper disable once StringLiteralTypo
public string Command => "togglemarkers";
public string Command => "showmarkers";
public string Description => "Toggles visibility of markers such as spawn points.";
public string Help => "";
public bool Execute(IDebugConsole console, params string[] args)
{
bool? whichToSet = null;
foreach (var entity in IoCManager.Resolve<IEntityManager>()
.GetEntities(new TypeEntityQuery(typeof(SharedSpawnPointComponent))))
{
if (!entity.TryGetComponent(out ISpriteComponent sprite))
{
continue;
}
if (!whichToSet.HasValue)
{
whichToSet = !sprite.Visible;
}
sprite.Visible = whichToSet.Value;
}
EntitySystem.Get<MarkerSystem>()
.MarkersVisible ^= true;
return false;
}

View File

@@ -0,0 +1,30 @@
using Content.Client.GameObjects.EntitySystems;
using Robust.Client.Interfaces.GameObjects.Components;
using Robust.Shared.GameObjects;
using Robust.Shared.GameObjects.Systems;
namespace Content.Client.GameObjects.Components.Markers
{
[RegisterComponent]
public sealed class MarkerComponent : Component
{
public override string Name => "Marker";
protected override void Startup()
{
base.Startup();
UpdateVisibility();
}
public void UpdateVisibility()
{
var system = EntitySystem.Get<MarkerSystem>();
if (Owner.TryGetComponent(out ISpriteComponent sprite))
{
sprite.Visible = system.MarkersVisible;
}
}
}
}

View File

@@ -0,0 +1,36 @@
using Content.Client.GameObjects.Components.Markers;
using Robust.Shared.GameObjects;
using Robust.Shared.GameObjects.Systems;
namespace Content.Client.GameObjects.EntitySystems
{
public sealed class MarkerSystem : EntitySystem
{
private bool _markersVisible;
public override void Initialize()
{
base.Initialize();
EntityQuery = new TypeEntityQuery<MarkerComponent>();
}
public bool MarkersVisible
{
get => _markersVisible;
set
{
_markersVisible = value;
UpdateMarkers();
}
}
private void UpdateMarkers()
{
foreach (var entity in RelevantEntities)
{
entity.GetComponent<MarkerComponent>().UpdateVisibility();
}
}
}
}

View File

@@ -7,14 +7,19 @@
netsync: false
visible: false
sprite: Objects/markers.rsi
state: cross_blue
- type: Icon
sprite: Objects/markers.rsi
- type: SpawnPoint
- type: Marker
- type: Clickable
- type: InteractionOutline
- type: Collidable
placement:
mode: SnapgridCenter
mode: AlignTileAny
- type: entity
name: LateJoin Spawn Point