6.4 KiB
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