using Content.Server.Physics.Controllers;
using Content.Shared.Physics;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
namespace Content.Server.Physics.Components;
///
/// A component which makes its entity periodically chaotic jumps arounds
///
[RegisterComponent, Access(typeof(ChaoticJumpSystem))]
public sealed partial class ChaoticJumpComponent : Component
{
///
/// The next moment in time when the entity is pushed toward its goal
///
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), ViewVariables(VVAccess.ReadWrite)]
public TimeSpan NextJumpTime;
///
/// Minimum interval between jumps
///
[DataField, ViewVariables(VVAccess.ReadWrite)]
public float JumpMinInterval = 5f;
///
/// Maximum interval between jumps
///
[DataField, ViewVariables(VVAccess.ReadWrite)]
public float JumpMaxInterval = 15f;
///
/// collision limits for which it is impossible to make a jump
///
[DataField, ViewVariables(VVAccess.ReadWrite)]
public int CollisionMask = (int) CollisionGroup.Impassable;
///
/// Minimum jump range
///
[DataField, ViewVariables(VVAccess.ReadWrite)]
public float RangeMin = 5f;
///
/// Maximum jump range
///
[DataField, ViewVariables(VVAccess.ReadWrite)]
public float RangeMax = 10f;
///
/// Spawn before jump
///
[DataField, ViewVariables(VVAccess.ReadWrite)]
public EntProtoId Effect = "EffectEmpPulse";
}