using Content.Shared.Actions;
using Content.Shared.DoAfter;
using Robust.Shared.Audio;
using Robust.Shared.Map;
using Robust.Shared.Physics.Dynamics;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
using Content.Shared.FixedPoint;
namespace Content.Shared._White.Actions.Events;
///
/// Event for placing a tile and/or spawning an entity in under the object that triggers it with a delay.
///
public sealed partial class SpawnTileEntityActionEvent : InstantActionEvent
{
///
/// The prototype of the entity to be created
///
[DataField]
public EntProtoId? Entity;
///
/// The identifier of the tile to be placed
///
[DataField]
public string? TileId;
///
/// The sound that will be played when the action is performed
///
[DataField]
public SoundSpecifier? Audio;
[DataField(customTypeSerializer: typeof(FlagSerializer))]
public int BlockedCollisionMask;
[DataField(customTypeSerializer: typeof(FlagSerializer))]
public int BlockedCollisionLayer;
}
///
/// Event for placing a tile and/or spawning an entity at a specified position on the map with a delay.
///
public sealed partial class PlaceTileEntityEvent : WorldTargetActionEvent
{
///
/// The prototype of the entity to be created
///
[DataField]
public EntProtoId? Entity;
///
/// The identifier of the tile to be placed
///
[DataField]
public string? TileId;
///
/// The sound that will be played when the action is performed
///
[DataField]
public SoundSpecifier? Audio;
[DataField(customTypeSerializer: typeof(FlagSerializer))]
public int BlockedCollisionMask;
[DataField(customTypeSerializer: typeof(FlagSerializer))]
public int BlockedCollisionLayer;
///
/// The duration of the action in seconds
///
[DataField]
public float Length;
}
[Serializable, NetSerializable]
public sealed partial class PlaceTileEntityDoAfterEvent : DoAfterEvent
{
public NetCoordinates Target;
public EntProtoId? Entity;
public string? TileId;
public SoundSpecifier? Audio;
public int BlockedCollisionMask;
public int BlockedCollisionLayer;
public FixedPoint2 PlasmaCost; // Goobstation
public NetEntity Action; // Goobstation
public override DoAfterEvent Clone() => this;
}