wallmount debug overlay (#38495)
* wallmount debug overlay * make circles a little smoother * add permissions * Update Resources/Locale/en-US/commands/show-wallmounts-command.ftl Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com> * fix --------- Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com> Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
This commit is contained in:
parent
07b74a9e75
commit
f19ee48df9
|
|
@ -0,0 +1,24 @@
|
||||||
|
using Content.Client.Wall;
|
||||||
|
using Robust.Client.Graphics;
|
||||||
|
using Robust.Shared.Console;
|
||||||
|
|
||||||
|
namespace Content.Client.Commands;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Shows the area in which entities with <see cref="Content.Shared.Wall.WallMountComponent" /> can be interacted from.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class ShowWallmountsCommand : LocalizedCommands
|
||||||
|
{
|
||||||
|
[Dependency] private readonly IOverlayManager _overlay = default!;
|
||||||
|
|
||||||
|
public override string Command => "showwallmounts";
|
||||||
|
|
||||||
|
public override void Execute(IConsoleShell shell, string argStr, string[] args)
|
||||||
|
{
|
||||||
|
var existing = _overlay.RemoveOverlay<WallmountDebugOverlay>();
|
||||||
|
if (!existing)
|
||||||
|
_overlay.AddOverlay(new WallmountDebugOverlay());
|
||||||
|
|
||||||
|
shell.WriteLine(Loc.GetString("cmd-showwallmounts-status", ("status", !existing)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
using Content.Shared.Interaction;
|
||||||
|
using Content.Shared.Wall;
|
||||||
|
using Robust.Client.Graphics;
|
||||||
|
using Robust.Shared.Enums;
|
||||||
|
using System.Numerics;
|
||||||
|
|
||||||
|
namespace Content.Client.Wall;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Shows the area in which entities with <see cref="WallMountComponent" /> can be interacted from.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class WallmountDebugOverlay : Overlay
|
||||||
|
{
|
||||||
|
[Dependency] private readonly IEntityManager _entManager = default!;
|
||||||
|
private readonly SharedTransformSystem _transform;
|
||||||
|
private readonly EntityLookupSystem _lookup;
|
||||||
|
private readonly HashSet<Entity<WallMountComponent>> _intersecting = [];
|
||||||
|
|
||||||
|
public override OverlaySpace Space => OverlaySpace.WorldSpace;
|
||||||
|
|
||||||
|
public WallmountDebugOverlay()
|
||||||
|
{
|
||||||
|
IoCManager.InjectDependencies(this);
|
||||||
|
|
||||||
|
_transform = _entManager.System<SharedTransformSystem>();
|
||||||
|
_lookup = _entManager.System<EntityLookupSystem>();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Draw(in OverlayDrawArgs args)
|
||||||
|
{
|
||||||
|
_intersecting.Clear();
|
||||||
|
_lookup.GetEntitiesIntersecting(args.MapId, args.WorldBounds, _intersecting);
|
||||||
|
foreach (var ent in _intersecting)
|
||||||
|
{
|
||||||
|
var (worldPos, worldRot) = _transform.GetWorldPositionRotation(ent.Owner);
|
||||||
|
DrawArc(args.WorldHandle, worldPos, SharedInteractionSystem.InteractionRange, worldRot + ent.Comp.Direction, ent.Comp.Arc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void DrawArc(DrawingHandleWorld handle, Vector2 position, float radius, Angle rot, Angle arc)
|
||||||
|
{
|
||||||
|
// 32 segments for a full circle, but 2 at least
|
||||||
|
var segments = Math.Max((int)(arc.Theta / Math.Tau * 32), 2);
|
||||||
|
var step = arc.Theta / (segments - 1);
|
||||||
|
var verts = new Vector2[segments + 1];
|
||||||
|
|
||||||
|
verts[0] = position;
|
||||||
|
for (var i = 0; i < segments; i++)
|
||||||
|
{
|
||||||
|
var angle = (float)(-arc.Theta / 2 + i * step - rot.Theta + Math.PI);
|
||||||
|
var pos = new Vector2(MathF.Sin(angle), MathF.Cos(angle));
|
||||||
|
|
||||||
|
verts[i + 1] = position + pos * radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
handle.DrawPrimitives(DrawPrimitiveTopology.TriangleFan, verts, Color.Green.WithAlpha(0.5f));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
cmd-showwallmounts-desc = Toggles showing wallmount interaction areas.
|
||||||
|
cmd-showwallmounts-help = Usage: {$command}
|
||||||
|
cmd-showwallmounts-status = Set wallmount debug overlay to {$status}.
|
||||||
|
|
@ -73,6 +73,7 @@
|
||||||
- fullstatereset
|
- fullstatereset
|
||||||
- dumpentities
|
- dumpentities
|
||||||
- fuckrules # DeltaV: move fuckrules to DEBUG
|
- fuckrules # DeltaV: move fuckrules to DEBUG
|
||||||
|
- showwallmounts
|
||||||
- showaccessreaders
|
- showaccessreaders
|
||||||
- quickinspect
|
- quickinspect
|
||||||
|
|
||||||
|
|
@ -88,6 +89,7 @@
|
||||||
- showsubfloorforever
|
- showsubfloorforever
|
||||||
- toggleautosave
|
- toggleautosave
|
||||||
- toggledecals
|
- toggledecals
|
||||||
|
- showwallmounts
|
||||||
- showaccessreaders
|
- showaccessreaders
|
||||||
|
|
||||||
- Flags: QUERY
|
- Flags: QUERY
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue