2024-06-05 00:54:49 +10:00
|
|
|
using Robust.Shared.GameStates;
|
2024-08-10 08:12:13 +10:00
|
|
|
using Robust.Shared.Prototypes;
|
2024-06-05 00:54:49 +10:00
|
|
|
using Robust.Shared.Serialization;
|
|
|
|
|
|
2024-08-10 08:12:13 +10:00
|
|
|
namespace Content.Shared._CP14.DayCycle.Components;
|
2024-06-05 00:54:49 +10:00
|
|
|
|
|
|
|
|
/// <summary>
|
2024-08-10 08:12:13 +10:00
|
|
|
/// Stores all the necessary data for the day and night cycle system to work.
|
2024-06-05 00:54:49 +10:00
|
|
|
/// </summary>
|
2024-08-10 08:12:13 +10:00
|
|
|
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(CP14SharedDayCycleSystem))]
|
2024-06-05 00:54:49 +10:00
|
|
|
public sealed partial class CP14DayCycleComponent : Component
|
|
|
|
|
{
|
|
|
|
|
[ViewVariables]
|
|
|
|
|
public int NextTimeEntryIndex => CurrentTimeEntryIndex + 1 >= TimeEntries.Count ? 0 : CurrentTimeEntryIndex + 1;
|
|
|
|
|
|
|
|
|
|
[ViewVariables]
|
|
|
|
|
public DayCycleEntry CurrentTimeEntry => TimeEntries[CurrentTimeEntryIndex];
|
|
|
|
|
|
|
|
|
|
[ViewVariables]
|
|
|
|
|
public DayCycleEntry NextCurrentTimeEntry => TimeEntries[NextTimeEntryIndex];
|
|
|
|
|
|
|
|
|
|
[ViewVariables]
|
|
|
|
|
public Color StartColor => CurrentTimeEntry.Color;
|
|
|
|
|
|
|
|
|
|
[ViewVariables]
|
|
|
|
|
public Color EndColor => NextCurrentTimeEntry.Color;
|
|
|
|
|
|
2024-08-10 08:12:13 +10:00
|
|
|
[ViewVariables]
|
|
|
|
|
public ProtoId<CP14DayCyclePeriodPrototype> CurrentPeriod => CurrentTimeEntry.Period;
|
|
|
|
|
|
2024-06-05 00:54:49 +10:00
|
|
|
[DataField(required: true), ViewVariables, AutoNetworkedField]
|
|
|
|
|
public List<DayCycleEntry> TimeEntries = new();
|
|
|
|
|
|
|
|
|
|
[DataField, ViewVariables, AutoNetworkedField]
|
|
|
|
|
public int CurrentTimeEntryIndex;
|
|
|
|
|
|
|
|
|
|
[DataField, ViewVariables, AutoNetworkedField]
|
|
|
|
|
public TimeSpan EntryStartTime;
|
|
|
|
|
|
|
|
|
|
[DataField, ViewVariables, AutoNetworkedField]
|
|
|
|
|
public TimeSpan EntryEndTime;
|
2024-09-01 17:22:16 +05:00
|
|
|
|
|
|
|
|
[DataField]
|
|
|
|
|
public bool StartWithRandomEntry = true;
|
2024-06-05 00:54:49 +10:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[DataDefinition, NetSerializable, Serializable]
|
|
|
|
|
public readonly partial record struct DayCycleEntry()
|
|
|
|
|
{
|
2024-10-31 19:13:44 +03:00
|
|
|
public DayCycleEntry(Color _color, TimeSpan _duration, string _period) : this()
|
|
|
|
|
{
|
|
|
|
|
Color = _color;
|
|
|
|
|
Duration = _duration;
|
|
|
|
|
Period = _period;
|
|
|
|
|
}
|
2024-06-05 00:54:49 +10:00
|
|
|
/// <summary>
|
|
|
|
|
/// The color of the world's lights at the beginning of this time of day
|
|
|
|
|
/// </summary>
|
|
|
|
|
[DataField]
|
|
|
|
|
public Color Color { get; init; } = Color.White;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Duration of color shift to the next time of day
|
|
|
|
|
/// </summary>
|
|
|
|
|
[DataField]
|
|
|
|
|
public TimeSpan Duration { get; init; } = TimeSpan.FromSeconds(60);
|
|
|
|
|
|
|
|
|
|
[DataField]
|
2024-08-10 08:12:13 +10:00
|
|
|
public ProtoId<CP14DayCyclePeriodPrototype> Period { get; init; } = "Day";
|
2024-06-05 00:54:49 +10:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2024-08-10 08:12:13 +10:00
|
|
|
/// Event raised on map entity, wen day cycle changed.
|
2024-06-05 00:54:49 +10:00
|
|
|
/// </summary>
|
|
|
|
|
[ByRefEvent]
|
2024-08-10 08:12:13 +10:00
|
|
|
public readonly record struct DayCycleChangedEvent(DayCycleEntry Entry);
|