7.2 KiB
7.2 KiB
Производство (Production)
Система производственных цепочек и процессов.
Обзор
Производство преобразует сырьё и компоненты в готовые товары через цепочки операций.
📂 Код: backend/src/MyBiz.Core/ProductionChain.cs
Архитектура
┌────────────────────────┐ ┌────────────────────────┐
│ ProductionChainConfig │ │ ActiveProductionChain │
│ (конфигурация) │ ──────► │ (активный процесс) │
│ - OutputProductId │ Config │ - CurrentStep │
│ - RequiredBuildingId │ │ - Progress │
│ - Steps[] │ │ - IsActive │
└────────────────────────┘ └────────────────────────┘
│
▼
┌────────────────────────┐
│ Building │
│ (где происходит) │
└────────────────────────┘
ProductionStep
Назначение: Один шаг производственного процесса.
📂 Исходный код: ProductionChain.cs
Свойства
| Свойство | Тип | Описание |
|---|---|---|
InputProductId |
string | ID требуемого продукта |
InputQuantity |
int | Количество |
ProductionTime |
int | Время выполнения в тиках |
ProductionChainConfig
Назначение: Конфигурация производственной цепочки (рецепт).
📂 Исходный код: ProductionChain.cs
Свойства
| Свойство | Тип | Описание |
|---|---|---|
Id |
string | Уникальный идентификатор |
Name |
string | Название цепочки |
OutputProductId |
string | ID выходного продукта |
OutputQuantity |
int | Количество выходного продукта |
RequiredBuildingId |
string | ID требуемого здания |
Steps |
List | Шаги производства |
RequiredTechnologies |
List | Требуемые технологии |
AvailableFromYear |
int | Год доступности |
ActiveProductionChain
Назначение: Активный процесс производства на здании.
📂 Исходный код: ProductionChain.cs
Свойства
| Свойство | Тип | Описание |
|---|---|---|
Config |
ProductionChainConfig | Конфигурация |
Building |
Building | Здание, где происходит |
CurrentStep |
int | Текущий шаг (0-based) |
Progress |
int | Прогресс текущего шага (в тиках) |
IsActive |
bool | Процесс активен |
StartedAtTick |
int | Тик запуска |
Вычисляемые свойства
IsStepComplete— завершён ли текущий шагIsComplete— завершено ли всё производство
Методы
| Метод | Описание |
|---|---|
Tick() |
Продвинуть производство на 1 тик |
Примеры производственных цепочек
🍞 Продукты питания
Сельхозпродукция (100) → [Пищекомбинат] → Продукты питания (80)
Время: 5 тиков
👕 Одежда
Шаг 1: Хлопок (50) → [Текстильная фабрика] → Ткань (40)
Время: 10 тиков
Шаг 2: Ткань (40) → [Швейная фабрика] → Одежда (30)
Время: 8 тиков
📱 Электроника
Шаг 1: Пластик (30) + Сталь (20) → [Завод компонентов] → Электронные компоненты (25)
Время: 15 тиков
Шаг 2: Электронные компоненты (25) + Пластик (15) → [Завод электроники] → Электроника (20)
Время: 20 тиков
🚗 Автомобили
Шаг 1: Сталь (100) → [Сталелитейный завод] → Металлоизделия (80)
Время: 20 тиков
Шаг 2: Металлоизделия (80) + Пластик (40) → [Автозавод] → Автомобили (5)
Время: 50 тиков
Примеры использования
Создание конфигурации цепочки
var breadChain = new ProductionChainConfig
{
Id = "chain_bread",
Name = "Производство хлеба",
OutputProductId = "goods_food",
OutputQuantity = 80,
RequiredBuildingId = "food_factory",
Steps = new List<ProductionStep>
{
new ProductionStep
{
InputProductId = "raw_food",
InputQuantity = 100,
ProductionTime = 5
}
},
AvailableFromYear = 1900
};
Запуск производства
var factory = new Building
{
TypeConfig = foodFactoryConfig,
Workers = 50
};
var production = new ActiveProductionChain
{
Config = breadChain,
Building = factory,
IsActive = true,
StartedAtTick = 0
};
// Каждый тик:
production.Tick();
if (production.IsComplete)
{
// Производство завершено, забрать продукт
var output = production.Config.OutputProductId;
var quantity = production.Config.OutputQuantity;
}
Отслеживание прогресса
if (production.IsStepComplete)
{
// Шаг завершён, можно забирать промежуточный продукт
var step = production.Config.Steps[production.CurrentStep];
// ...
}
Console.WriteLine(
$"Прогресс: {production.CurrentStep + 1}/{production.Config.Steps.Count} " +
$"({production.Progress}/{production.Config.Steps[production.CurrentStep].ProductionTime} тиков)"
);
Связанные документы
Последнее обновление: 20.02.2026