using UnityEngine;
namespace NecromancerTome
{
///
/// «Багажник» урны-цинерария (решение 16.10: «урна как транспорт» - на E круговое меню, как у велосипеда:
/// багажник с ячейкой черепа и сумка духа). Окно necroCinerariumTrunk (Config/XUi_InGame) - панель с одной
/// ячейкой игры для обязательного предмета (XUiC_RequiredItemStack, как в панели модификаций коллектора
/// росы), рядом рюкзак (open_backpack_on_open). Ячейка принимает только череп и не больше одного
/// (override_stack_count="1" в XML). Череп - обычный предмет (ItemClass): в сейвах он уже есть, менять ему
/// класс на модификацию нельзя (см. память про сейвы), поэтому ячейка, а не сборка как у робомолота.
///
public class XUiC_NecroCinerariumSkullGrid : XUiC_ItemStackGrid
{
public const string WindowGroup = "necroCinerariumTrunk";
/// Урна, чей багажник открыт (ставится перед открытием окна).
public static TEFeatureCinerarium Urn;
public static void Open(EntityPlayerLocal _player, TEFeatureCinerarium _urn)
{
LocalPlayerUI ui = _player?.PlayerUI;
if (ui == null || _urn == null)
{
return;
}
Urn = _urn;
ui.windowManager.Open(WindowGroup, true);
}
public override void OnOpen()
{
base.OnOpen();
ItemValue skull = ItemClass.GetItem(TEFeatureCinerarium.SkullItemName);
for (int i = 0; i < itemControllers.Length; i++)
{
if (itemControllers[i] is XUiC_RequiredItemStack slot)
{
slot.SetAllowedItemClassSingle(TEFeatureCinerarium.SkullItemName);
slot.RequiredItemOnly = true;
slot.StackLocation = XUiC_ItemStack.StackLocationTypes.Workstation;
}
}
ItemStack[] stacks = new ItemStack[itemControllers.Length];
for (int i = 0; i < stacks.Length; i++)
{
stacks[i] = ItemStack.Empty.Clone();
}
if (stacks.Length > 0 && Urn != null && Urn.HasSkull && skull != null && skull.type > 0)
{
stacks[0] = new ItemStack(skull, 1);
}
SetStacks(stacks);
}
public override void OnClose()
{
base.OnClose();
Urn = null;
}
public override void UpdateBackend(ItemStack[] stackList)
{
base.UpdateBackend(stackList);
bool has = stackList != null && stackList.Length > 0 && stackList[0] != null && !stackList[0].IsEmpty();
Urn?.SetSkull(has);
}
/// Урна убрана или выгружена, пока открыт её багажник, - закрыть окно (иначе череп в ячейке
/// уже ни к чему не привязан).
public static void CloseIfShowing(TEFeatureCinerarium _urn)
{
if (Urn == null || Urn != _urn)
{
return;
}
LocalPlayerUI ui = GameManager.Instance?.World?.GetPrimaryPlayer()?.PlayerUI;
if (ui != null && ui.windowManager.IsWindowOpen(WindowGroup))
{
ui.windowManager.Close(WindowGroup);
}
Urn = null;
}
}
}