using SPTarkov.Server.Core.Helpers;
using SPTarkov.Server.Core.Models.Eft.Common.Tables;
using SPTarkov.Server.Core.Models.Enums.Hideout;
namespace SPTarkov.Server.Core.Extensions;
public static class ProductionExtensions
{
///
/// Has the craft completed
/// Ignores bitcoin farm/cultist circle as they're continuous crafts
///
/// Craft to check
/// True when craft is complete
public static bool IsCraftComplete(this Production craft)
{
return craft.Progress >= craft.ProductionTime
&& !craft.IsCraftOfType(HideoutAreas.BitcoinFarm)
&& !craft.IsCraftOfType(HideoutAreas.CircleOfCultists);
}
///
/// Is a craft from a particular hideout area
///
/// Craft to check
/// Type to check craft against
/// True if it is from that area
public static bool IsCraftOfType(this Production craft, HideoutAreas hideoutType)
{
switch (hideoutType)
{
case HideoutAreas.WaterCollector:
return craft.RecipeId == HideoutHelper.WaterCollectorId;
case HideoutAreas.BitcoinFarm:
return craft.RecipeId == HideoutHelper.BitcoinProductionId;
case HideoutAreas.ScavCase:
return craft.SptIsScavCase ?? false;
case HideoutAreas.CircleOfCultists:
return craft.SptIsCultistCircle ?? false;
default:
return false;
}
}
///
/// Craft has completed, update its properties to reflect its new state
///
/// Craft to update
public static void FlagCultistCircleCraftAsComplete(this Production production)
{
production.AvailableForFinish = true;
// The client expects `Progress` to be 0, and `inProgress` to be false when a circle is complete
production.Progress = 0;
production.InProgress = false;
}
}