Travelling pointing arrows, brains can no longer point (#24864)

* Decoupled from gravity, constant animation time, manual networking, cubic interpolation

* Reduced overshoot

* Implemented PointAttemptEvent, reacts with mobstate & sleeping

* Brains can no longer point, PBs must be inside a chassis

* Removed chassis check, made callback more obvious
This commit is contained in:
Krunklehorn
2024-02-03 03:09:20 -05:00
committed by GitHub
parent 240ebfa3a6
commit d01d75073c
10 changed files with 172 additions and 64 deletions

View File

@@ -1,17 +1,36 @@
using Robust.Shared.Serialization;
using System.Numerics;
namespace Content.Shared.Pointing;
public abstract class SharedPointingSystem : EntitySystem
{
[Serializable, NetSerializable]
protected sealed class PointingArrowComponentState : ComponentState
{
public TimeSpan EndTime;
protected readonly TimeSpan PointDuration = TimeSpan.FromSeconds(4);
protected readonly float PointKeyTimeMove = 0.1f;
protected readonly float PointKeyTimeHover = 0.5f;
public PointingArrowComponentState(TimeSpan endTime)
{
EndTime = endTime;
}
[Serializable, NetSerializable]
public sealed class SharedPointingArrowComponentState : ComponentState
{
public Vector2 StartPosition { get; init; }
public TimeSpan EndTime { get; init; }
}
public bool CanPoint(EntityUid uid)
{
var ev = new PointAttemptEvent(uid);
RaiseLocalEvent(uid, ev, true);
return !ev.Cancelled;
}
}
public sealed class PointAttemptEvent : CancellableEntityEventArgs
{
public PointAttemptEvent(EntityUid uid)
{
Uid = uid;
}
public EntityUid Uid { get; }
}