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; } } }