using Content.Shared.Eui; using Content.Shared.Roles; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.Ghost.Roles { [NetSerializable, Serializable] public struct GhostRoleInfo { public uint Identifier { get; set; } public string Name { get; set; } public string Description { get; set; } public string Rules { get; set; } /// /// A list of all antag and job prototype IDs of the ghost role and its mind role(s). /// public (List>?,List>?) RolePrototypes; /// public GhostRoleKind Kind { get; set; } /// /// if is , specifies how many players are currently /// in the raffle for this role. /// public uint RafflePlayerCount { get; set; } /// /// if is , specifies when raffle finishes. /// public TimeSpan RaffleEndTime { get; set; } } [NetSerializable, Serializable] public sealed class GhostRolesEuiState : EuiStateBase { public GhostRoleInfo[] GhostRoles { get; } public GhostRolesEuiState(GhostRoleInfo[] ghostRoles) { GhostRoles = ghostRoles; } } [NetSerializable, Serializable] public sealed class RequestGhostRoleMessage : EuiMessageBase { public uint Identifier { get; } public RequestGhostRoleMessage(uint identifier) { Identifier = identifier; } } [NetSerializable, Serializable] public sealed class FollowGhostRoleMessage : EuiMessageBase { public uint Identifier { get; } public FollowGhostRoleMessage(uint identifier) { Identifier = identifier; } } [NetSerializable, Serializable] public sealed class LeaveGhostRoleRaffleMessage : EuiMessageBase { public uint Identifier { get; } public LeaveGhostRoleRaffleMessage(uint identifier) { Identifier = identifier; } } /// /// Determines whether a ghost role is a raffle role, and if it is, whether it's running. /// [NetSerializable, Serializable] public enum GhostRoleKind { /// /// Role is not a raffle role and can be taken immediately. /// FirstComeFirstServe, /// /// Role is a raffle role, but raffle hasn't started yet. /// RaffleReady, /// /// Role is raffle role and currently being raffled, but player hasn't joined raffle. /// RaffleInProgress, /// /// Role is raffle role and currently being raffled, and player joined raffle. /// RaffleJoined } }