| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- using Content.Shared.Salvage.Expeditions.Modifiers;
- using Robust.Shared.Audio;
- using Robust.Shared.GameStates;
- using Robust.Shared.Serialization;
- using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
- namespace Content.Shared.Salvage.Expeditions;
- [Serializable, NetSerializable]
- public sealed class SalvageExpeditionConsoleState : BoundUserInterfaceState
- {
- public TimeSpan NextOffer;
- public bool Claimed;
- public bool Cooldown;
- public ushort ActiveMission;
- public List<SalvageMissionParams> Missions;
- public SalvageExpeditionConsoleState(TimeSpan nextOffer, bool claimed, bool cooldown, ushort activeMission, List<SalvageMissionParams> missions)
- {
- NextOffer = nextOffer;
- Claimed = claimed;
- Cooldown = cooldown;
- ActiveMission = activeMission;
- Missions = missions;
- }
- }
- /// <summary>
- /// Used to interact with salvage expeditions and claim them.
- /// </summary>
- [RegisterComponent, NetworkedComponent]
- public sealed partial class SalvageExpeditionConsoleComponent : Component
- {
- /// <summary>
- /// The sound made when spawning a coordinates disk
- /// </summary>
- [DataField]
- public SoundSpecifier PrintSound = new SoundPathSpecifier("/Audio/Machines/terminal_insert_disc.ogg");
- }
- [Serializable, NetSerializable]
- public sealed class ClaimSalvageMessage : BoundUserInterfaceMessage
- {
- public ushort Index;
- }
- /// <summary>
- /// Added per station to store data on their available salvage missions.
- /// </summary>
- [RegisterComponent, AutoGenerateComponentPause]
- public sealed partial class SalvageExpeditionDataComponent : Component
- {
- /// <summary>
- /// Is there an active salvage expedition.
- /// </summary>
- [ViewVariables]
- public bool Claimed => ActiveMission != 0;
- /// <summary>
- /// Are we actively cooling down from the last salvage mission.
- /// </summary>
- [ViewVariables(VVAccess.ReadWrite), DataField("cooldown")]
- public bool Cooldown = false;
- /// <summary>
- /// Nexy time salvage missions are offered.
- /// </summary>
- [ViewVariables(VVAccess.ReadWrite), DataField("nextOffer", customTypeSerializer:typeof(TimeOffsetSerializer))]
- [AutoPausedField]
- public TimeSpan NextOffer;
- [ViewVariables]
- public readonly Dictionary<ushort, SalvageMissionParams> Missions = new();
- [ViewVariables] public ushort ActiveMission;
- public ushort NextIndex = 1;
- }
- [Serializable, NetSerializable]
- public sealed record SalvageMissionParams
- {
- [ViewVariables]
- public ushort Index;
- [ViewVariables(VVAccess.ReadWrite)] public int Seed;
- public string Difficulty = string.Empty;
- }
- /// <summary>
- /// Created from <see cref="SalvageMissionParams"/>. Only needed for data the client also needs for mission
- /// display.
- /// </summary>
- public sealed record SalvageMission(
- int Seed,
- string Dungeon,
- string Faction,
- string Biome,
- string Air,
- float Temperature,
- Color? Color,
- TimeSpan Duration,
- List<string> Modifiers)
- {
- /// <summary>
- /// Seed used for the mission.
- /// </summary>
- public readonly int Seed = Seed;
- /// <summary>
- /// <see cref="SalvageDungeonModPrototype"/> to be used.
- /// </summary>
- public readonly string Dungeon = Dungeon;
- /// <summary>
- /// <see cref="SalvageFactionPrototype"/> to be used.
- /// </summary>
- public readonly string Faction = Faction;
- /// <summary>
- /// Biome to be used for the mission.
- /// </summary>
- public readonly string Biome = Biome;
- /// <summary>
- /// Air mixture to be used for the mission's planet.
- /// </summary>
- public readonly string Air = Air;
- /// <summary>
- /// Temperature of the planet's atmosphere.
- /// </summary>
- public readonly float Temperature = Temperature;
- /// <summary>
- /// Lighting color to be used (AKA outdoor lighting).
- /// </summary>
- public readonly Color? Color = Color;
- /// <summary>
- /// Mission duration.
- /// </summary>
- public TimeSpan Duration = Duration;
- /// <summary>
- /// Modifiers (outside of the above) applied to the mission.
- /// </summary>
- public List<string> Modifiers = Modifiers;
- }
- [Serializable, NetSerializable]
- public enum SalvageConsoleUiKey : byte
- {
- Expedition,
- }
|