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:
@@ -1,13 +1,22 @@
|
||||
using Robust.Shared.GameStates;
|
||||
using System.Numerics;
|
||||
|
||||
namespace Content.Shared.Pointing.Components;
|
||||
|
||||
[NetworkedComponent]
|
||||
public abstract partial class SharedPointingArrowComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// The position of the sender when the point began.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public Vector2 StartPosition;
|
||||
|
||||
/// <summary>
|
||||
/// When the pointing arrow ends
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadWrite), DataField("endTime")]
|
||||
[DataField]
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public TimeSpan EndTime;
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user