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; } } }