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

6.4 KiB

Здания (Buildings)

Система зданий и предприятий в игре.

Обзор

Здания — места, где происходит производство, торговля или хранение товаров.

📂 Код: backend/src/MyBiz.Core/Building.cs


Архитектура

┌─────────────────────┐         ┌───────────┐
│ BuildingTypeConfig  │ ──────► │ Building  │
│ (тип здания)        │  Type   │ (здание)  │
│ - Id                │ Config  │ - Level   │
│ - Name              │         │ - Workers │
│ - Category          │         │ - Inventory│
│ - BuildCost         │         │ - Efficiency│
└─────────────────────┘         └───────────┘

BuildingTypeConfig

Назначение: Конфигурация типа здания для моддинга.

📂 Исходный код: Building.cs

Основные свойства

Свойство Тип Описание
Id string Уникальный идентификатор
Name string Отображаемое имя
Description string Описание
Category BuildingCategory Категория здания
BuildCost decimal Стоимость постройки
UpkeepCost decimal Содержание в тик
StorageCapacity int Вместимость склада
WorkerSlots int Количество рабочих мест
BaseEfficiency int Базовая эффективность (0-100)
MaxLevel int Максимальный уровень
AvailableFromYear int Год доступности
RequiredTechnologies List Требуемые технологии
OutputProducts List Производимые продукты
InputProducts List Потребляемые продукты

Категории зданий

Категория Описание Примеры
RawMaterial Добыча сырья Ферма, шахта
Production Производство Завод, фабрика
Trade Торговля Магазин, салон
Research Исследования Лаборатория
Storage Склад Складское помещение
Office Офис Административное здание

Building

Назначение: Экземпляр здания в игре.

📂 Исходный код: Building.cs

Основные свойства

Свойство Тип Описание
Id Guid Уникальный ID здания
TypeConfig BuildingTypeConfig Конфигурация типа
Name string Отображаемое имя (кастомизируемое)
CityId string ID города
X, Y int Координаты на карте
Level int Уровень здания
Workers int Количество рабочих
CurrentEfficiency int Текущая эффективность
Inventory Dictionary<string, int> Запасы на складе
IsActive bool Здание работает
BuiltAtTick int Тик постройки

Вычисляемые свойства

  • WorkerSlots — из конфигурации типа
  • StorageCapacity — из конфигурации типа

Методы

Метод Описание
CalculateEfficiency() Расчёт эффективности
Update() Обновление состояния

Формула эффективности

Efficiency = BaseEfficiency + (Level - 1) * 5 - WorkerPenalty

WorkerPenalty = (WorkerSlots - Workers) * 100 / WorkerSlots

Пример:

  • BaseEfficiency = 100
  • Level = 3 → +10% бонус
  • Workers = 8/10 → -20% штраф
  • Итого: 100 + 10 - 20 = 90%

Примеры использования

Создание типа здания

var textileFactory = new BuildingTypeConfig
{
    Id = "textile_factory",
    Name = "Текстильная фабрика",
    Category = BuildingCategory.Production,
    BuildCost = 50000m,
    UpkeepCost = 500m,
    WorkerSlots = 50,
    StorageCapacity = 1000,
    BaseEfficiency = 100,
    AvailableFromYear = 1900,
    InputProducts = { "raw_cotton" },
    OutputProducts = { "comp_fabric" }
};

Создание здания

var factory = new Building
{
    TypeConfig = textileFactory,
    Name = "Главная фабрика",
    CityId = "city_1",
    X = 100,
    Y = 200,
    Level = 1,
    Workers = 0,  // Пока нет рабочих
    IsActive = true
};

factory.Workers = 40;  // Наняли рабочих
factory.Update();      // Пересчитать эффективность

Расчёт эффективности

var building = new Building
{
    TypeConfig = new BuildingTypeConfig
    {
        BaseEfficiency = 100,
        WorkerSlots = 10
    },
    Level = 5,
    Workers = 10
};

building.CalculateEfficiency();
// 100 + (5-1)*5 - 0 = 120%

Тесты

📂 Код: backend/tests/MyBiz.Tests/BuildingTests.cs

Тест Описание
Building_CalculateEfficiency_FullWorkers_ShouldBeMax Полная укомплектованность
Building_CalculateEfficiency_NoWorkers_ShouldBeZero Нет рабочих
Building_LevelBonus_ShouldIncreaseEfficiency Бонус за уровень

Связанные документы


Последнее обновление: 20.02.2026