Pinpointer (#5131)
* Add pinpointer sprites * Start working on pinpointer * Updated pinpointer * Working on visuals * Working on a pinpointer and eye rotation * Add client/server pinpointers systems * Minor cleanup * Add distance support * Add nuke tag * Remove redundant flag and add pinpointer to caps locker * Disable rotation of pinpointer * Fixed distance Co-authored-by: Alexander Evgrashin <evgrashin.adl@gmail.com>
This commit is contained in:
60
Content.Client/Pinpointer/PinpointerVisualizer.cs
Normal file
60
Content.Client/Pinpointer/PinpointerVisualizer.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
using Content.Shared.Pinpointer;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Shared.Maths;
|
||||
|
||||
namespace Content.Client.Pinpointer
|
||||
{
|
||||
[UsedImplicitly]
|
||||
public class PinpointerVisualizer : AppearanceVisualizer
|
||||
{
|
||||
public override void OnChangeData(AppearanceComponent component)
|
||||
{
|
||||
base.OnChangeData(component);
|
||||
|
||||
if (!component.Owner.TryGetComponent<SpriteComponent>(out var sprite))
|
||||
return;
|
||||
|
||||
// check if pinpointer screen is active
|
||||
if (!component.TryGetData(PinpointerVisuals.IsActive, out bool isActive) || !isActive)
|
||||
{
|
||||
sprite.LayerSetVisible(PinpointerLayers.Screen, false);
|
||||
return;
|
||||
}
|
||||
|
||||
// check if it has direction to target
|
||||
sprite.LayerSetVisible(PinpointerLayers.Screen, true);
|
||||
sprite.LayerSetRotation(PinpointerLayers.Screen, Angle.Zero);
|
||||
|
||||
if (!component.TryGetData(PinpointerVisuals.TargetDirection, out Direction dir) || dir == Direction.Invalid)
|
||||
{
|
||||
sprite.LayerSetState(PinpointerLayers.Screen, "pinonnull");
|
||||
return;
|
||||
}
|
||||
|
||||
// check distance to target
|
||||
if (!component.TryGetData(PinpointerVisuals.TargetDistance, out Distance dis))
|
||||
dis = Distance.UNKNOWN;
|
||||
|
||||
switch (dis)
|
||||
{
|
||||
case Distance.REACHED:
|
||||
sprite.LayerSetState(PinpointerLayers.Screen, "pinondirect");
|
||||
break;
|
||||
case Distance.CLOSE:
|
||||
sprite.LayerSetState(PinpointerLayers.Screen, "pinonclose");
|
||||
sprite.LayerSetRotation(PinpointerLayers.Screen, dir.ToAngle());
|
||||
break;
|
||||
case Distance.MEDIUM:
|
||||
sprite.LayerSetState(PinpointerLayers.Screen, "pinonmedium");
|
||||
sprite.LayerSetRotation(PinpointerLayers.Screen, dir.ToAngle());
|
||||
break;
|
||||
case Distance.FAR:
|
||||
case Distance.UNKNOWN:
|
||||
sprite.LayerSetState(PinpointerLayers.Screen, "pinonfar");
|
||||
sprite.LayerSetRotation(PinpointerLayers.Screen, dir.ToAngle());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user