namespace Content.Server.GameTicking.Rules.Components;
[RegisterComponent, Access(typeof(CaptureAreaSystem))]
public sealed partial class CaptureAreaRuleComponent : Component
{
}
[RegisterComponent]
public sealed partial class CaptureAreaComponent : Component
{
///
/// The name for this capturable area
///
[DataField("name")]
public string Name { get; set; } = "Objective Area";
///
/// How long does the area need to be held for, in seconds
///
[DataField("captureDuration")]
public float CaptureDuration { get; set; } = 300f;
///
/// How far entities need to be to count towards capture
///
[DataField("captureRadius")]
public float CaptureRadius { get; set; } = 4f;
///
/// What the capture timer is currently at
///
[DataField("captureTimer")]
public float CaptureTimer { get; set; } = 0f;
///
/// Has 1 minute left been announced?
///
[DataField("captureTimerAnnouncement1")]
public bool CaptureTimerAnnouncement1 { get; set; } = false;
///
/// Has 2 minute left been announced?
///
[DataField("captureTimerAnnouncement2")]
public bool CaptureTimerAnnouncement2 { get; set; } = false;
///
/// Is the area currently occupied?
///
[DataField("occupied")]
public bool Occupied { get; set; } = false;
///
/// Which faction is occupying the area?
///
[DataField("controller")]
public string Controller { get; set; } = "";
///
/// The previous controller (for announcements when controller changes)
///
[DataField("previousController")]
public string PreviousController { get; set; } = "";
///
/// Which factions can occupy this area?
///
[DataField("capturableFactions")]
public List CapturableFactions { get; set; } = [];
///
/// How long the area needs to be contested or lost before the capture timer resets
///
[DataField("contestedResetTime")]
public float ContestedResetTime { get; set; } = 10f;
///
/// Current timer tracking how long the area has been contested or lost
///
[DataField("contestedTimer")]
public float ContestedTimer { get; set; } = 0f;
///
/// The last controller before the area became contested or lost
///
[DataField("lastController")]
public string LastController { get; set; } = "";
}