using Content.Shared.Actions;
using Content.Shared.Actions.ActionTypes;
using Robust.Shared.GameStates;
using Robust.Shared.Serialization;
namespace Content.Shared.Speech.Components;
[RegisterComponent, NetworkedComponent]
[AutoGenerateComponentState]
public sealed partial class MeleeSpeechComponent : Component
{
///
/// The battlecry to be said when an entity attacks with this component
///
[ViewVariables(VVAccess.ReadWrite)]
[DataField("Battlecry")]
[AutoNetworkedField]
public string? Battlecry;
///
/// The maximum amount of characters allowed in a battlecry
///
[ViewVariables(VVAccess.ReadWrite)]
[DataField("MaxBattlecryLength")]
[AutoNetworkedField]
public int MaxBattlecryLength = 12;
///
/// The action to open the battlecry UI
///
[DataField("configureAction")]
public InstantAction ConfigureAction = new()
{
UseDelay = TimeSpan.FromSeconds(1),
ItemIconStyle = ItemActionIconStyle.BigItem,
DisplayName = "melee-speech-config",
Description = "melee-speech-config-desc",
Priority = -20,
Event = new MeleeSpeechConfigureActionEvent(),
};
}
///
/// Key representing which is currently open.
/// Useful when there are multiple UI for an object. Here it's future-proofing only.
///
[Serializable, NetSerializable]
public enum MeleeSpeechUiKey : byte
{
Key,
}
///
/// Represents an state that can be sent to the client
///
[Serializable, NetSerializable]
public sealed class MeleeSpeechBoundUserInterfaceState : BoundUserInterfaceState
{
public string CurrentBattlecry { get; }
public MeleeSpeechBoundUserInterfaceState(string currentBattlecry)
{
CurrentBattlecry = currentBattlecry;
}
}
[Serializable, NetSerializable]
public sealed class MeleeSpeechBattlecryChangedMessage : BoundUserInterfaceMessage
{
public string Battlecry { get; }
public MeleeSpeechBattlecryChangedMessage(string battlecry)
{
Battlecry = battlecry;
}
}
public sealed partial class MeleeSpeechConfigureActionEvent : InstantActionEvent { }