namespace MyBiz.Core;
///
/// Шаг производственной цепочки
///
public class ProductionStep
{
///
/// ID требуемого продукта
///
public string InputProductId { get; set; } = string.Empty;
///
/// Количество требуемого продукта
///
public int InputQuantity { get; set; }
///
/// Время производства (в тиках)
///
public int ProductionTime { get; set; }
}
///
/// Конфигурация производственной цепочки - для моддинга
///
public class ProductionChainConfig
{
///
/// Уникальный идентификатор цепочки
///
public string Id { get; set; } = string.Empty;
///
/// Название цепочки
///
public string Name { get; set; } = string.Empty;
///
/// ID выходного продукта
///
public string OutputProductId { get; set; } = string.Empty;
///
/// Количество выходного продукта за цикл
///
public int OutputQuantity { get; set; }
///
/// ID требуемого здания
///
public string RequiredBuildingId { get; set; } = string.Empty;
///
/// Шаги производства
///
public List Steps { get; set; } = new();
///
/// Требуемые технологии
///
public List RequiredTechnologies { get; set; } = new();
///
/// Год, когда цепочка становится доступной
///
public int AvailableFromYear { get; set; } = 1900;
}
///
/// Активная производственная цепочка на здании
///
public class ActiveProductionChain
{
public ProductionChainConfig Config { get; set; } = null!;
public Building Building { get; set; } = null!;
///
/// Текущий шаг производства
///
public int CurrentStep { get; set; } = 0;
///
/// Прогресс текущего шага (в тиках)
///
public int Progress { get; set; } = 0;
///
/// Цепочка активна
///
public bool IsActive { get; set; } = true;
///
/// Запущена в тик
///
public int StartedAtTick { get; set; }
///
/// Проверка: завершён ли текущий шаг
///
public bool IsStepComplete => CurrentStep < Config.Steps.Count &&
Progress >= Config.Steps[CurrentStep].ProductionTime;
///
/// Проверка: завершено ли всё производство
///
public bool IsComplete => CurrentStep >= Config.Steps.Count;
///
/// Продвинуть производство на 1 тик
///
public void Tick()
{
if (!IsActive || IsComplete)
return;
Progress++;
if (IsStepComplete)
{
CurrentStep++;
Progress = 0;
}
}
}