using UnityEngine; // Защита ресурсов от грабежа (контракт IResourceProtection, 01.11, ТЕСТ). // Часть запаса прячут Склады и Амбары: EconomyConfig, раздел "Защита ресурсов". Уровни зданий сообщает // App/CitySync; на карте мира, где города нет, действуют последние известные уровни. public sealed class ResourceProtection : IResourceProtection { public static int WarehouseLevels { get; private set; } public static int GranaryLevels { get; private set; } public static void SetLevels(int warehouseLevels, int granaryLevels) { WarehouseLevels = Mathf.Max(0, warehouseLevels); GranaryLevels = Mathf.Max(0, granaryLevels); } public float Protected(ResourceType type) { return EconomyConfig.Load().GetProtected(type, WarehouseLevels, GranaryLevels); } public float Lootable(ResourceType type) => Lootable(type, false); // Кристаллы: без «Грабежа» -- 0; с ним -- не больше доли запаса (EconomyConfig, ТЕСТ, точные ограничения -- позже) public float Lootable(ResourceType type, bool attackerHasPlunder) { if (!GameServices.TryGet(out IEconomy economy)) return 0f; float have = Mathf.Max(0f, economy.Get(type)); if (type == ResourceType.Gems) return attackerHasPlunder ? Mathf.Floor(have * Mathf.Clamp01(EconomyConfig.Load().protection.plunderGemsShare)) : 0f; return Mathf.Max(0f, have - Protected(type)); } }