using Content.Shared.Actions;
using Content.Shared.Inventory;
using Content.Shared.Preferences.Loadouts;
using Content.Shared.Roles;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
namespace Content.Shared.Implants;
///
/// Will allow anyone implanted with the implant to have more control over their chameleon clothing and items.
///
[RegisterComponent, NetworkedComponent]
public sealed partial class ChameleonControllerImplantComponent : Component;
///
/// This is sent when someone clicks on the hud icon and will open the menu.
///
public sealed partial class ChameleonControllerOpenMenuEvent : InstantActionEvent;
[Serializable, NetSerializable]
public enum ChameleonControllerKey : byte
{
Key,
}
[Serializable, NetSerializable]
public sealed class ChameleonControllerBuiState : BoundUserInterfaceState;
///
/// Triggered when the user clicks on a job in the menu.
///
[Serializable, NetSerializable]
public sealed class ChameleonControllerSelectedOutfitMessage(ProtoId selectedOutfit) : BoundUserInterfaceMessage
{
public readonly ProtoId SelectedChameleonOutfit = selectedOutfit;
}
///
/// This event is raised on clothing when the chameleon controller wants it to change sprite based off selecting an
/// outfit.
///
/// The outfit being switched to.
/// The users custom loadout for the chameleon outfits job.
/// The default loadout for the chameleon outfits job.
/// The starting gear of the chameleon outfits job.
[ByRefEvent]
public record struct ChameleonControllerOutfitSelectedEvent(
ChameleonOutfitPrototype ChameleonOutfit,
RoleLoadout? CustomRoleLoadout,
RoleLoadout? DefaultRoleLoadout,
StartingGearPrototype? JobStartingGearPrototype,
StartingGearPrototype? StartingGearPrototype
) : IInventoryRelayEvent
{
SlotFlags IInventoryRelayEvent.TargetSlots => SlotFlags.WITHOUT_POCKET;
}