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 }; [Header("Пропавшие без вести (решения 01.11, п. 5). Долю пропавших в бою задаёт BattleConfig.missingSharePermille")] [Tooltip("Сколько пропавших вернётся, %. Утверждён диапазон 10-90%, формула НЕ утверждена -- ТЕСТ")] public int missingReturnPercent = 50; [Tooltip("Из вернувшихся ранены, %. Утверждено: 30 (70% здоровыми)")] public int missingWoundedPercent = 30; [Tooltip("Окно возвращения после обратного пути, ИГРОВЫХ часов. Утверждено: до 6")] public int missingWindowGameHours = 6; [Tooltip("Возвращаются группами: от 2 до стольких. Утверждено: 2-4")] public int missingMaxGroups = 4; static HospitalConfig cached; public static HospitalConfig Load() { if (cached != null) return cached; cached = Resources.Load("HospitalConfig"); if (cached == null) { Debug.LogWarning("[ГОСПИТАЛЬ] Нет Assets/Resources/HospitalConfig.asset -- берутся числа по умолчанию из HospitalConfig.cs."); cached = CreateInstance(); } return cached; } public MissingRules ToMissingRules() { return new MissingRules { ReturnPercent = Mathf.Clamp(missingReturnPercent, 0, 100), WoundedPercent = Mathf.Clamp(missingWoundedPercent, 0, 100), WindowGameHours = Mathf.Max(0, missingWindowGameHours), MaxGroups = Mathf.Max(2, missingMaxGroups) }; } 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 }; } }