Files
AlexCubeandClaude Opus 5.5 96d930e5bb Ремонтник и лутер: зона из 3x3 квадратов, лишние выключаются (#84)
Сетка «Где работать» в «Содержимом» урны, квадраты очерчены линиями при
показе границ; выключенные квадраты обход пропускает. Сохраняется пятым
числом v6 (старая DLL его пропустит). Консоль: necrourn x y z sectors.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 10:21:39 +03:00

80 lines
2.5 KiB
C#

using UnityEngine;
using UnityEngine.Scripting;
namespace NecromancerTome
{
/// <summary>
/// Квадраты зоны ремонтника и лутера (28.10.2026, #84): сетка 3x3 в окне «Содержимое» - окно necroUrnZone в группе окон
/// игры bagStorage (Config/XUi_InGame), как фильтр логиста. Север сверху, в среднем квадрате - урна. Щелчок включает /
/// выключает квадрат (TEFeatureCinerarium.ToggleSector); выключенный - тёмный с красной рамкой. Видна только у урн с
/// большой зоной; у прочих урн и сумок транспорта и волка скрыта. s0..s8 в XML - номера квадратов (столбец + строка * 3,
/// строка 0 - юг), f0..f8 - их рамки.
/// </summary>
[Preserve]
public class XUiC_NecroUrnZone : XUiController
{
readonly XUiController[] _cells = new XUiController[TEFeatureCinerarium.ZoneSectors];
readonly XUiController[] _frames = new XUiController[TEFeatureCinerarium.ZoneSectors];
static readonly Color On = new Color(0.3f, 0.6f, 0.45f, 0.9f);
static readonly Color Off = new Color(0.12f, 0.12f, 0.12f, 0.9f);
static readonly Color FrameOn = new Color(0.55f, 0.9f, 0.75f, 1f);
static readonly Color FrameOff = new Color(0.95f, 0.3f, 0.25f, 1f);
public override void Init()
{
base.Init();
for (int i = 0; i < _cells.Length; i++)
{
int s = i;
_cells[i] = GetChildById("s" + i);
_frames[i] = GetChildById("f" + i);
if (_cells[i] != null)
{
_cells[i].OnPress += (_x, _m) => Toggle(s);
}
}
}
public override void OnOpen()
{
base.OnOpen();
Refresh();
}
void Toggle(int _s)
{
TEFeatureCinerarium urn = CinerariumContents.Urn;
if (urn == null)
{
return;
}
urn.ToggleSector(_s);
Refresh();
}
void Refresh()
{
TEFeatureCinerarium urn = CinerariumContents.Urn;
bool show = urn != null && urn.IsBigZone;
ViewComponent.IsVisible = show;
if (!show)
{
return;
}
for (int i = 0; i < _cells.Length; i++)
{
bool on = urn.SectorOn(i);
if (_cells[i]?.ViewComponent is XUiV_Sprite sp)
{
sp.Color = on ? On : Off;
sp.ToolTip = Localization.Get(on ? "necroZoneSectorOn" : "necroZoneSectorOff");
}
if (_frames[i]?.ViewComponent is XUiV_Sprite fr)
{
fr.Color = on ? FrameOn : FrameOff;
}
}
}
}
}