Ремонтник и лутер: зона из 3x3 квадратов, лишние выключаются (#84)
Сетка «Где работать» в «Содержимом» урны, квадраты очерчены линиями при показе границ; выключенные квадраты обход пропускает. Сохраняется пятым числом v6 (старая DLL его пропустит). Консоль: necrourn x y z sectors. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
9a567b6ac0
commit
96d930e5bb
@@ -0,0 +1,79 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user