69 lines
3.9 KiB
C#
69 lines
3.9 KiB
C#
using UnityEngine;
|
|
|
|
// ТАБЛИЦА ГОСПИТАЛЯ: места и время лечения раненых (регламент 31.10, решения по 8 вопросам Саши от 31.10, п. 7). Числа -- ТЕСТ.
|
|
//
|
|
// Ассет: Assets/Resources/HospitalConfig.asset (выдели его в окне Project и меняй числа в Inspector;
|
|
// изменения действуют со следующего запуска игры). Создать заново: правый клик в Project ->
|
|
// Create -> Bogatyri -> Hospital Config, имя файла -- HospitalConfig, папка -- Resources.
|
|
//
|
|
// Модуль Армии таблицу не видит: App/GameModules передаёт числа в ArmyService.
|
|
// Места даёт здание «Госпиталь» (Meta/Build/Hospital.cs) через контракт IHospital.
|
|
[CreateAssetMenu(fileName = "HospitalConfig", menuName = "Bogatyri/Hospital Config")]
|
|
public class HospitalConfig : ScriptableObject
|
|
{
|
|
[Header("Здание «Госпиталь» (ТЕСТ)")]
|
|
[Tooltip("Мест для лечения по уровням госпиталя I..V. Регламент 31.10: 20..60. Число строк -- число уровней")]
|
|
public int[] bedsByLevel = { 20, 30, 40, 50, 60 };
|
|
[Tooltip("Мест, пока в городе нет госпиталя. Решения 01.11, п. 3: 5. После постройки заменяются штатными, не складываются")]
|
|
public int temporaryBeds = 5;
|
|
[Tooltip("С какого уровня Ратуши можно строить")]
|
|
public int requiredTownHallLevel = 1;
|
|
[Tooltip("Цена постройки: дерево")]
|
|
public int buildWood = 250;
|
|
[Tooltip("Цена постройки: камень")]
|
|
public int buildStone = 150;
|
|
|
|
[Header("Лечение одного воина, ИГРОВЫХ часов (1 игровой час = 5 реальных минут)")]
|
|
[Tooltip("Пехота, лучники, кавалерия, осадные. Регламент 31.10: 4 / 4 / 6 / 8")]
|
|
public int[] healGameHours = { 4, 4, 6, 8 };
|
|
|
|
[Header("Цена лечения одного воина (решения 01.11, п. 3: золото 1 / 1 / 2 / 3)")]
|
|
[Tooltip("Еды за воина: пехота, лучники, кавалерия, осадные")]
|
|
public int[] healFoodPerSoldier = { 0, 0, 0, 0 };
|
|
[Tooltip("Золота за воина: пехота, лучники, кавалерия, осадные")]
|
|
public int[] healGoldPerSoldier = { 1, 1, 2, 3 };
|
|
|
|
static HospitalConfig cached;
|
|
|
|
public static HospitalConfig Load()
|
|
{
|
|
if (cached != null) return cached;
|
|
cached = Resources.Load<HospitalConfig>("HospitalConfig");
|
|
if (cached == null)
|
|
{
|
|
Debug.LogWarning("[ГОСПИТАЛЬ] Нет Assets/Resources/HospitalConfig.asset -- берутся числа по умолчанию из HospitalConfig.cs.");
|
|
cached = CreateInstance<HospitalConfig>();
|
|
}
|
|
return cached;
|
|
}
|
|
|
|
public HospitalRules ToRules()
|
|
{
|
|
var hours = new int[TroopType.Count];
|
|
var cost = new ResourceAmount[TroopType.Count][];
|
|
for (int i = 0; i < TroopType.Count; i++)
|
|
{
|
|
hours[i] = healGameHours != null && i < healGameHours.Length ? Mathf.Max(0, healGameHours[i]) : 4;
|
|
int food = healFoodPerSoldier != null && i < healFoodPerSoldier.Length ? Mathf.Max(0, healFoodPerSoldier[i]) : 0;
|
|
int gold = healGoldPerSoldier != null && i < healGoldPerSoldier.Length ? Mathf.Max(0, healGoldPerSoldier[i]) : 0;
|
|
cost[i] = new[] { new ResourceAmount(ResourceType.Food, food), new ResourceAmount(ResourceType.Gold, gold) };
|
|
}
|
|
return new HospitalRules
|
|
{
|
|
TemporaryBeds = Mathf.Max(0, temporaryBeds),
|
|
HealGameHours = hours,
|
|
HealCostPerSoldier = cost
|
|
};
|
|
}
|
|
}
|