diff --git a/Assets/Scripts/App/BuildingWindow.cs b/Assets/Scripts/App/BuildingWindow.cs index 313a940..20bdb75 100644 --- a/Assets/Scripts/App/BuildingWindow.cs +++ b/Assets/Scripts/App/BuildingWindow.cs @@ -320,7 +320,7 @@ public static class BuildingWindow } Rebuild(); }, -1, 80, 26); - b.interactable = canPay; + LiveAfford(b, canPay, () => townHall != null && townHall.CanUpgrade()); } // Каких зданий на следующем уровне Ратуши можно построить больше: "Лес 2 → 3, Дом 3 → 4" @@ -554,7 +554,25 @@ public static class BuildingWindow } Rebuild(); }, -1, 80, 26); + LiveAfford(b, canPay, () => GameServices.TryGet(out IEconomy now) && now.CanAfford(cost)); + } + + // Кнопка «Улучшить» следит за ресурсами, пока окно открыто: ресурсов стало хватать -- зелёная и нажимается, + // перестало -- серая (05.11: раньше нужно было закрыть и открыть окно) + static void LiveAfford(Button b, bool canPay, Func can) + { b.interactable = canPay; + bool shown = canPay; + live.Add(() => + { + if (b == null) return; + bool c = can(); + if (c == shown) return; + shown = c; + b.interactable = c; + var img = b.GetComponent(); + if (img != null) img.color = c ? UIKit.Theme.Green : UIKit.Theme.Gray; + }); } // ---------------- Стройка по времени (BuildTimer) ---------------- diff --git a/Assets/Scripts/City3D/City3DCamera.cs b/Assets/Scripts/City3D/City3DCamera.cs index 1211385..3e728f9 100644 --- a/Assets/Scripts/City3D/City3DCamera.cs +++ b/Assets/Scripts/City3D/City3DCamera.cs @@ -99,11 +99,20 @@ public class City3DCamera : MonoBehaviour target.y = 0; } + // Дымка начинается за городом, а не на фиксированном расстоянии от камеры: иначе при отдалении весь город + // уходил в серую дымку -- казалось, что камера не отдаляется, а сцена сереет (05.11) + public float fogStartBehind = 4f, fogEndBehind = 59f; + public void Apply() { Quaternion rot = Quaternion.Euler(pitch, yaw, 0); transform.rotation = rot; transform.position = target - rot * Vector3.forward * distance; + if (RenderSettings.fog && RenderSettings.fogMode == FogMode.Linear) + { + RenderSettings.fogStartDistance = distance + fogStartBehind; + RenderSettings.fogEndDistance = distance + fogEndBehind; + } } // Точка на плоскости земли (y = 0) под экранной точкой diff --git a/Docs/Modules/Settlement.md b/Docs/Modules/Settlement.md index 91f1330..f670ab1 100644 --- a/Docs/Modules/Settlement.md +++ b/Docs/Modules/Settlement.md @@ -119,6 +119,7 @@ | Дата | Кто | Что | | --- | --- | --- | +| 05.11.2026 | Claude (Саша) | 3D: дымка идёт за камерой (`City3DCamera.Apply`: начало и конец — от расстояния камеры), поэтому при отдалении город больше не уходит в серую дымку. Окно здания: кнопка «Улучшить» (Ратуша и уровни зданий) сама становится зелёной, когда ресурсов стало хватать (`BuildingWindow.LiveAfford`) — не нужно закрывать и открывать окно. | | 05.11.2026 | Claude (Саша) | 3D: здание, которое ещё строится, теперь видно — оно серее, над ним «Стройка 0:45» (`BuildTimer` затемнял только 2D-спрайты, поэтому Казармы выглядели готовыми, а «Войска» писали «казарм: 0»). Окно «Войска»: пока Казармы строятся — «Казармы строятся, осталось …», после стройки окно перерисовывается само; «Построить Казармы» в 3D ставит призрак Казарм (`City3DController.PlaceBuilding`). Кнопки «+ / −» справа — приближение камеры (в Device Simulator колесо мыши не доходит до игры). | | 05.11.2026 | Claude (Саша) | Интеграция 3D: (1) снимок 3D-города для сохранения до расстановки сохранённых зданий отдаёт загруженное состояние — сохранение в первом кадре (поход вернулся офлайн) больше не затирает 3D-город пустым; (2) `ISettlement.TownHallLevel` вне города — уровень Ратуши последнего открытого города (2D или 3D), а не всегда 2D-сохранения: на карте мира предел жилья, резерв и открытие войск считаются по 3D-Ратуше. | | 04.11.2026 | Claude | Решения 04.11: снос убран, остался бесплатный перенос; офлайн по временным меткам — стройка, закончившаяся офлайн, вступает в силу в момент завершения внутри расчёта добычи (`ConstructionClock`, `GameTimeSimulatedEvent`, `BuildTimer.MayComplete`); проверки таймеров из сохранения; уровень при завершении только растёт. |