using Content.Shared.Charges.Components;
using Content.Shared.Cloning;
using Robust.Shared.Audio;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
namespace Content.Shared.Changeling.Components;
///
/// Changeling transformation in item form!
/// An entity with this component works like an implanter:
/// First you use it on a humanoid to make a copy of their identity, along with all species relevant components,
/// then use it on someone else to tranform them into a clone of them.
/// Can be used in combination with
///
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class ChangelingClonerComponent : Component
{
///
/// A clone of the player you have copied the identity from.
/// This is a full humanoid backup, stored on a paused map.
///
///
/// Since this entity is stored on a separate map it will be outside PVS range.
///
[DataField, AutoNetworkedField]
public EntityUid? ClonedBackup;
///
/// Current state of the item.
///
[DataField, AutoNetworkedField]
public ChangelingClonerState State = ChangelingClonerState.Empty;
///
/// The cloning settings to use.
///
[DataField, AutoNetworkedField]
public ProtoId Settings = "ChangelingCloningSettings";
///
/// Doafter time for drawing and injecting.
///
[DataField, AutoNetworkedField]
public TimeSpan DoAfter = TimeSpan.FromSeconds(5);
///
/// Can this item be used more than once?
///
[DataField, AutoNetworkedField]
public bool Reusable = true;
///
/// Whether or not to add a reset verb to purge the stored identity,
/// allowing you to draw a new one.
///
[DataField, AutoNetworkedField]
public bool CanReset = true;
///
/// Raise events when renaming the target?
/// This will change their ID card, crew manifest entry, and so on.
/// For admeme purposes.
///
[DataField, AutoNetworkedField]
public bool RaiseNameChangeEvents;
///
/// The sound to play when taking someone's identity with the item.
///
[DataField, AutoNetworkedField]
public SoundSpecifier? DrawSound;
///
/// The sound to play when someone is transformed.
///
[DataField, AutoNetworkedField]
public SoundSpecifier? InjectSound;
}
///
/// Current state of the item.
///
[Serializable, NetSerializable]
public enum ChangelingClonerState : byte
{
///
/// No sample taken yet.
///
Empty,
///
/// Filled with a DNA sample.
///
Filled,
///
/// Has been used (single use only).
///
Spent,
}