Files
tbd-station-14/Content.Shared/Implants/ChameleonControllerImplantComponent.cs
beck-thompson 05fac53de6 Chameleon controller implant (Clothing fast switch) (#33887)
* Add the chameleon controller implant

* address the issues (Git please dont kill me)

* Address the review and fix some merge conflicts!

* Cleanup

* Add use delay

* Silly mistakes

* Making a PR at 2 am: Gone wrong

* Predict use delay and disable the buttons until you can choose another

* First phase custom clothing

* Better system, now relays to agent id and mindshield. Chameleon loadouts are a lot better to work with as well

* Address the review! No more evil goto

* Slams way is better I should have read more closely xD

* Some of the jobs

* Add to Cargo, CentComm, Service, Passenger, Ninja, Cluwne, Wizard + Minor changes to existing; Add chameleon to bandanas, medals, jugsuits and HUDs

* Add everything else

* Fix test

* Job name

* This looks better

* Add department organization

* Minor cleanup

* Added some mindshields

* Remove redudent comment and change funcion name to be clearer

* Fix cluwne outfit

* fix merge conflicts

---------

Co-authored-by: SlamBamActionman <slambamactionman@gmail.com>
2025-05-30 12:07:25 +02:00

59 lines
2.2 KiB
C#

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