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; }