Files
my-biz/docs/tech/production.md
2026-02-21 10:26:23 +03:00

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