197 lines
6.4 KiB
Markdown
197 lines
6.4 KiB
Markdown
# Здания (Buildings)
|
|
|
|
Система зданий и предприятий в игре.
|
|
|
|
## Обзор
|
|
|
|
Здания — места, где происходит производство, торговля или хранение товаров.
|
|
|
|
📂 **Код:** [`backend/src/MyBiz.Core/Building.cs`](../../backend/src/MyBiz.Core/Building.cs)
|
|
|
|
---
|
|
|
|
## Архитектура
|
|
|
|
```
|
|
┌─────────────────────┐ ┌───────────┐
|
|
│ BuildingTypeConfig │ ──────► │ Building │
|
|
│ (тип здания) │ Type │ (здание) │
|
|
│ - Id │ Config │ - Level │
|
|
│ - Name │ │ - Workers │
|
|
│ - Category │ │ - Inventory│
|
|
│ - BuildCost │ │ - Efficiency│
|
|
└─────────────────────┘ └───────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## BuildingTypeConfig
|
|
|
|
**Назначение:** Конфигурация типа здания для моддинга.
|
|
|
|
📂 **Исходный код:** [`Building.cs`](../../backend/src/MyBiz.Core/Building.cs#L10-L75)
|
|
|
|
### Основные свойства
|
|
|
|
| Свойство | Тип | Описание |
|
|
|----------|-----|----------|
|
|
| `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<string> | Требуемые технологии |
|
|
| `OutputProducts` | List<string> | Производимые продукты |
|
|
| `InputProducts` | List<string> | Потребляемые продукты |
|
|
|
|
### Категории зданий
|
|
|
|
| Категория | Описание | Примеры |
|
|
|-----------|----------|---------|
|
|
| `RawMaterial` | Добыча сырья | Ферма, шахта |
|
|
| `Production` | Производство | Завод, фабрика |
|
|
| `Trade` | Торговля | Магазин, салон |
|
|
| `Research` | Исследования | Лаборатория |
|
|
| `Storage` | Склад | Складское помещение |
|
|
| `Office` | Офис | Административное здание |
|
|
|
|
---
|
|
|
|
## Building
|
|
|
|
**Назначение:** Экземпляр здания в игре.
|
|
|
|
📂 **Исходный код:** [`Building.cs`](../../backend/src/MyBiz.Core/Building.cs#L89-L165)
|
|
|
|
### Основные свойства
|
|
|
|
| Свойство | Тип | Описание |
|
|
|----------|-----|----------|
|
|
| `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%**
|
|
|
|
---
|
|
|
|
## Примеры использования
|
|
|
|
### Создание типа здания
|
|
|
|
```csharp
|
|
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" }
|
|
};
|
|
```
|
|
|
|
### Создание здания
|
|
|
|
```csharp
|
|
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(); // Пересчитать эффективность
|
|
```
|
|
|
|
### Расчёт эффективности
|
|
|
|
```csharp
|
|
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`](../../backend/tests/MyBiz.Tests/BuildingTests.cs)
|
|
|
|
| Тест | Описание |
|
|
|------|----------|
|
|
| `Building_CalculateEfficiency_FullWorkers_ShouldBeMax` | Полная укомплектованность |
|
|
| `Building_CalculateEfficiency_NoWorkers_ShouldBeZero` | Нет рабочих |
|
|
| `Building_LevelBonus_ShouldIncreaseEfficiency` | Бонус за уровень |
|
|
|
|
---
|
|
|
|
## Связанные документы
|
|
|
|
- [Ядро](core.md) — базовые классы
|
|
- [Производство](production.md) — использование зданий в производстве
|
|
- [Города](core.md#city) — размещение зданий в городах
|
|
|
|
---
|
|
|
|
**Последнее обновление:** 20.02.2026
|