3D: версия на экране, отладочная сетка, сборка APK одной кнопкой и починка сборки Android

This commit is contained in:
2026-11-05 15:12:19 +03:00
parent 88f460a4a6
commit e26eeaffaf
11 changed files with 324 additions and 4 deletions
+20 -2
View File
@@ -35,6 +35,20 @@ public class BuildGrid : MonoBehaviour
[Tooltip("Посчитать область самому: старые участки + Ратуша + запас")]
public bool autoArea = true;
// Отладка (05.11, просьба Миши): сетка видна всегда и ярче, каждая 5-я линия жирнее -- чтобы примерять
// к ней размеры зданий и референсы. Включается кнопкой "Сетка" в панели DEV.
public static bool DebugVisible { get; private set; }
public static void SetDebugVisible(bool on, bool buildModeActive)
{
DebugVisible = on;
if (BuildManager.Instance == null) return; // 2D-город не открыт -- сетка появится, когда откроется
var grid = Instance;
if (grid == null) return;
grid.lastOverlayKey = null;
grid.ShowOverlay(on || buildModeActive);
}
// Здание, которое сейчас переносят: его клетки считаются свободными (режим стройки, перенос)
public static GameObject IgnoredBuilding;
[Tooltip("Запас вокруг старых участков, клеток")]
@@ -258,6 +272,7 @@ public class BuildGrid : MonoBehaviour
public void ShowOverlay(bool show)
{
EnsureInit();
show |= DebugVisible; // отладочная сетка не прячется при выходе из режима стройки
if (show && overlay == null) CreateOverlay();
if (overlay == null) return;
overlay.enabled = show;
@@ -283,7 +298,8 @@ public class BuildGrid : MonoBehaviour
void RedrawOverlay()
{
// перерисовываем только если занятость поменялась
var key = new System.Text.StringBuilder(Width * Height);
var key = new System.Text.StringBuilder(Width * Height + 1);
key.Append(DebugVisible ? 'D' : 'n');
for (int y = 0; y < Height; y++) for (int x = 0; x < Width; x++) key.Append(busy[x, y] ? '1' : '0');
string k = key.ToString();
if (k == lastOverlayKey) return;
@@ -291,7 +307,8 @@ public class BuildGrid : MonoBehaviour
int w = overlayTex.width, h = overlayTex.height;
var px = new Color32[w * h];
Color32 line = lineColor, free = freeColor, bad = busyColor;
Color32 line = DebugVisible ? new Color(1f, 1f, 1f, 0.7f) : lineColor, free = freeColor, bad = busyColor;
Color32 major = new Color32(255, 230, 80, 230); // каждая 5-я клетка -- жёлтая линия (только в отладке)
for (int y = 0; y < h; y++)
{
int cy = y / PixelsPerCell, iy = y % PixelsPerCell;
@@ -300,6 +317,7 @@ public class BuildGrid : MonoBehaviour
int cx = x / PixelsPerCell, ix = x % PixelsPerCell;
bool edge = ix == 0 || iy == 0 || x == w - 1 || y == h - 1;
px[y * w + x] = busy[cx, cy] ? bad : (edge ? line : free);
if (DebugVisible && ((ix == 0 && cx % 5 == 0) || (iy == 0 && cy % 5 == 0))) px[y * w + x] = major;
if (busy[cx, cy] && edge) px[y * w + x] = new Color32(bad.r, bad.g, bad.b, (byte)Mathf.Min(255, bad.a + 50));
}
}