using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using Il2CppDG.Tweening;
using Il2CppDG.Tweening.Core;
using Il2CppDG.Tweening.Plugins.Options;
using Il2CppSystem;
using InventoryFramework;
using InventoryUI;
using MelonLoader;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: MelonInfo(typeof(Core), "InventoryUI", "1.0.0", "gameknight963", null)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("InventoryUI")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+8b331d20188ffcb1de292afb888655f917a04c0c")]
[assembly: AssemblyProduct("InventoryUI")]
[assembly: AssemblyTitle("InventoryUI")]
[assembly: NeutralResourcesLanguage("en-US")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace InventoryUI
{
public class Core : MelonMod
{
private ItemPicker? _picker;
private Hotbar? _hotbar;
public override void OnSceneWasLoaded(int buildIndex, string sceneName)
{
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Expected O, but got Unknown
if (!(sceneName != "Version 1.9 POST"))
{
_picker?.Dispose();
_hotbar?.Dispose();
GameObject val = new GameObject("InventoryCanvas");
Canvas val2 = val.AddComponent<Canvas>();
val2.renderMode = (RenderMode)0;
val.AddComponent<CanvasScaler>();
val.AddComponent<GraphicRaycaster>();
val.AddComponent<HotbarBehaviour>();
_hotbar = new Hotbar(val);
val.AddComponent<ItemPickerBehaviour>();
_picker = new ItemPicker(val);
}
}
}
public class Hotbar
{
private const int SlotCount = 9;
private readonly GameObject[] _slots = (GameObject[])(object)new GameObject[9];
private int _selectedIndex = 0;
private static readonly Color SlotNormal = new Color(0f, 0f, 0f, 0.7f);
private static readonly Color SlotSelected = new Color(1f, 1f, 1f, 0.4f);
private readonly Text _itemLabel;
private const float LabelDuration = 2f;
private readonly Action _onChanged;
public static Hotbar? Instance { get; private set; }
public Hotbar(GameObject canvas)
{
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Expected O, but got Unknown
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
//IL_013f: Unknown result type (might be due to invalid IL or missing references)
//IL_0145: Expected O, but got Unknown
//IL_016c: Unknown result type (might be due to invalid IL or missing references)
//IL_0183: Unknown result type (might be due to invalid IL or missing references)
//IL_019a: Unknown result type (might be due to invalid IL or missing references)
//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
//IL_0216: Unknown result type (might be due to invalid IL or missing references)
Instance = this;
_onChanged = delegate
{
Refresh(InventoryManager.Instance.PlayerInventory.Items);
};
InventoryManager.Instance.PlayerInventory.OnChanged += _onChanged;
GameObject val = new GameObject("Hotbar");
val.transform.SetParent(canvas.transform, false);
RectTransform val2 = val.AddComponent<RectTransform>();
val2.anchorMin = new Vector2(0.5f, 0f);
val2.anchorMax = new Vector2(0.5f, 0f);
val2.pivot = new Vector2(0.5f, 0f);
val2.anchoredPosition = new Vector2(0f, 10f);
val2.sizeDelta = new Vector2(482f, 50f);
HorizontalLayoutGroup val3 = val.AddComponent<HorizontalLayoutGroup>();
((HorizontalOrVerticalLayoutGroup)val3).spacing = 4f;
((HorizontalOrVerticalLayoutGroup)val3).childForceExpandWidth = false;
((HorizontalOrVerticalLayoutGroup)val3).childForceExpandHeight = false;
((HorizontalOrVerticalLayoutGroup)val3).childControlWidth = false;
((HorizontalOrVerticalLayoutGroup)val3).childControlHeight = false;
for (int i = 0; i < 9; i++)
{
_slots[i] = CreateSlot(val, i);
}
GameObject val4 = new GameObject("ItemLabel");
val4.transform.SetParent(canvas.transform, false);
RectTransform val5 = val4.AddComponent<RectTransform>();
val5.anchorMin = new Vector2(0.5f, 0f);
val5.anchorMax = new Vector2(0.5f, 0f);
val5.pivot = new Vector2(0.5f, 0f);
val5.anchoredPosition = new Vector2(0f, 68f);
val5.sizeDelta = new Vector2(300f, 20f);
_itemLabel = val4.AddComponent<Text>();
_itemLabel.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
_itemLabel.fontSize = 14;
_itemLabel.alignment = (TextAnchor)4;
((Graphic)_itemLabel).color = Color.white;
Refresh(InventoryManager.Instance.PlayerInventory.Items);
}
public void Dispose()
{
InventoryManager.Instance.PlayerInventory.OnChanged -= _onChanged;
}
private GameObject CreateSlot(GameObject parent, int index)
{
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Expected O, but got Unknown
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Expected O, but got Unknown
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_0104: Unknown result type (might be due to invalid IL or missing references)
//IL_010b: Expected O, but got Unknown
//IL_0134: Unknown result type (might be due to invalid IL or missing references)
//IL_014b: Unknown result type (might be due to invalid IL or missing references)
//IL_0162: Unknown result type (might be due to invalid IL or missing references)
//IL_0179: Unknown result type (might be due to invalid IL or missing references)
//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
GameObject val = new GameObject($"Slot_{index}");
val.transform.SetParent(parent.transform, false);
RectTransform val2 = val.AddComponent<RectTransform>();
val2.sizeDelta = new Vector2(50f, 50f);
Image val3 = val.AddComponent<Image>();
((Graphic)val3).color = new Color(0f, 0f, 0f, 0.7f);
GameObject val4 = new GameObject("Icon");
val4.transform.SetParent(val.transform, false);
RectTransform val5 = val4.AddComponent<RectTransform>();
val5.anchorMin = Vector2.zero;
val5.anchorMax = Vector2.one;
val5.offsetMin = new Vector2(4f, 4f);
val5.offsetMax = new Vector2(-4f, -4f);
((Behaviour)val4.AddComponent<Image>()).enabled = false;
GameObject val6 = new GameObject("Quantity");
val6.transform.SetParent(val.transform, false);
RectTransform val7 = val6.AddComponent<RectTransform>();
val7.anchorMin = new Vector2(1f, 0f);
val7.anchorMax = new Vector2(1f, 0f);
val7.pivot = new Vector2(1f, 0f);
val7.anchoredPosition = new Vector2(-2f, 2f);
Text val8 = val6.AddComponent<Text>();
val8.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
val8.fontSize = 10;
val8.alignment = (TextAnchor)8;
((Graphic)val8).color = Color.white;
return val;
}
public void SelectSlot(int index)
{
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
((Graphic)_slots[_selectedIndex].GetComponent<Image>()).color = SlotNormal;
_selectedIndex = index;
((Graphic)_slots[_selectedIndex].GetComponent<Image>()).color = SlotSelected;
InventoryItem val = ((_selectedIndex < InventoryManager.Instance.PlayerInventory.Items.Count) ? InventoryManager.Instance.PlayerInventory.Items[_selectedIndex] : null);
InventoryManager.Instance.SelectItem(val);
DOTween.Kill((Object)(object)_itemLabel, false);
if (val != null)
{
_itemLabel.text = val.Definition.Name;
((Graphic)_itemLabel).color = Color.white;
TweenSettingsExtensions.SetId<TweenerCore<float, float, FloatOptions>>(TweenSettingsExtensions.SetDelay<TweenerCore<float, float, FloatOptions>>(DOTween.To(DOGetter<float>.op_Implicit((Func<float>)(() => ((Graphic)_itemLabel).color.a)), DOSetter<float>.op_Implicit((Action<float>)delegate(float a)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
((Graphic)_itemLabel).color = new Color(1f, 1f, 1f, a);
}), 0f, 0.5f), 1.5f), (Object)(object)_itemLabel);
}
else
{
_itemLabel.text = "";
}
}
public void Refresh(IReadOnlyList<InventoryItem> items)
{
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
for (int i = 0; i < 9; i++)
{
GameObject val = _slots[i];
Image component = ((Component)val.transform.Find("Icon")).GetComponent<Image>();
Text component2 = ((Component)val.transform.Find("Quantity")).GetComponent<Text>();
Image component3 = val.GetComponent<Image>();
((Graphic)component3).color = ((i == _selectedIndex) ? SlotSelected : SlotNormal);
if (i < items.Count)
{
InventoryItem val2 = items[i];
((Behaviour)component).enabled = (Object)(object)val2.Definition.Image != (Object)null;
if ((Object)(object)val2.Definition.Image != (Object)null)
{
component.sprite = val2.Definition.Image;
}
else
{
component.sprite = null;
}
component2.text = ((val2.Quantity > 1) ? val2.Quantity.ToString() : "");
}
else
{
((Behaviour)component).enabled = false;
component2.text = "";
}
}
}
}
[RegisterTypeInIl2Cpp]
public class HotbarBehaviour : MonoBehaviour
{
public HotbarBehaviour(IntPtr ptr)
: base(ptr)
{
}
public void Update()
{
if (Hotbar.Instance == null)
{
return;
}
for (int i = 0; i < 9; i++)
{
if (Input.GetKeyDown((KeyCode)(49 + i)))
{
Hotbar.Instance.SelectSlot(i);
}
}
}
}
public class ItemPicker
{
private const int Columns = 9;
private const float CellSize = 50f;
private const float Padding = 10f;
private const float Spacing = 4f;
private GameObject _root;
private GameObject _grid;
private bool _visible = false;
private readonly Action<ItemDefinition> _onItemRegistered;
private CursorLockMode _previousLockState;
private bool _previousCursorVisible;
public static ItemPicker? Instance { get; private set; }
public ItemPicker(GameObject canvas)
{
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Expected O, but got Unknown
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
//IL_00d4: Expected O, but got Unknown
//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
//IL_010a: Unknown result type (might be due to invalid IL or missing references)
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_0136: Unknown result type (might be due to invalid IL or missing references)
//IL_0158: Unknown result type (might be due to invalid IL or missing references)
//IL_016e: Unknown result type (might be due to invalid IL or missing references)
Instance = this;
_root = new GameObject("ItemPicker");
_root.transform.SetParent(canvas.transform, false);
RectTransform val = _root.AddComponent<RectTransform>();
val.anchorMin = new Vector2(0.5f, 0.5f);
val.anchorMax = new Vector2(0.5f, 0.5f);
val.pivot = new Vector2(0.5f, 0.5f);
val.anchoredPosition = Vector2.zero;
Image val2 = _root.AddComponent<Image>();
((Graphic)val2).color = new Color(0f, 0f, 0f, 0.85f);
_grid = new GameObject("Grid");
_grid.transform.SetParent(_root.transform, false);
RectTransform val3 = _grid.AddComponent<RectTransform>();
val3.anchorMin = Vector2.zero;
val3.anchorMax = Vector2.one;
val3.offsetMin = new Vector2(10f, 10f);
val3.offsetMax = new Vector2(-10f, -10f);
GridLayoutGroup val4 = _grid.AddComponent<GridLayoutGroup>();
val4.cellSize = new Vector2(50f, 70f);
val4.spacing = new Vector2(4f, 4f);
val4.constraint = (Constraint)1;
val4.constraintCount = 9;
_root.SetActive(false);
Populate();
_onItemRegistered = delegate
{
Populate();
};
InventoryManager.Instance.OnItemRegistered += _onItemRegistered;
}
public void Dispose()
{
InventoryManager.Instance.OnItemRegistered -= _onItemRegistered;
}
public void Populate()
{
//IL_0115: Unknown result type (might be due to invalid IL or missing references)
for (int num = _grid.transform.childCount - 1; num >= 0; num--)
{
Object.Destroy((Object)(object)((Component)_grid.transform.GetChild(num)).gameObject);
}
List<ItemDefinition> list = new List<ItemDefinition>(InventoryManager.Instance.Registry.Values);
int num2 = Mathf.CeilToInt((float)list.Count / 9f);
float num3 = 502f;
float num4 = (float)num2 * 70f + (float)(num2 - 1) * 4f + 20f;
MelonLogger.Msg($"Items: {list.Count}, Rows: {num2}, Width: {num3}, Height: {num4}");
RectTransform component = _root.GetComponent<RectTransform>();
component.sizeDelta = new Vector2(num3, num4);
foreach (ItemDefinition item in list)
{
CreateCell(item);
}
}
private void CreateCell(ItemDefinition def)
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Expected O, but got Unknown
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Expected O, but got Unknown
//IL_00be: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_0159: Unknown result type (might be due to invalid IL or missing references)
//IL_0169: Unknown result type (might be due to invalid IL or missing references)
//IL_0170: Expected O, but got Unknown
//IL_0199: Unknown result type (might be due to invalid IL or missing references)
//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
//IL_0205: Unknown result type (might be due to invalid IL or missing references)
ItemDefinition def2 = def;
GameObject val = new GameObject(def2.Id);
val.transform.SetParent(_grid.transform, false);
val.AddComponent<RectTransform>();
Image val2 = val.AddComponent<Image>();
((Graphic)val2).color = new Color(0.2f, 0.2f, 0.2f, 1f);
Button val3 = val.AddComponent<Button>();
((UnityEvent)val3.onClick).AddListener(UnityAction.op_Implicit((Action)delegate
{
InventoryManager.Instance.PlayerInventory.AddItem(def2.Id, 1);
}));
GameObject val4 = new GameObject("Icon");
val4.transform.SetParent(val.transform, false);
RectTransform val5 = val4.AddComponent<RectTransform>();
val5.anchorMin = new Vector2(0f, 0.35f);
val5.anchorMax = new Vector2(1f, 1f);
val5.offsetMin = new Vector2(4f, 4f);
val5.offsetMax = new Vector2(-4f, -4f);
Image val6 = val4.AddComponent<Image>();
if ((Object)(object)def2.Image != (Object)null)
{
val6.sprite = def2.Image;
}
else
{
((Graphic)val6).color = new Color(0.4f, 0.4f, 0.4f, 1f);
}
GameObject val7 = new GameObject("Label");
val7.transform.SetParent(val.transform, false);
RectTransform val8 = val7.AddComponent<RectTransform>();
val8.anchorMin = new Vector2(0f, 0f);
val8.anchorMax = new Vector2(1f, 0.35f);
val8.offsetMin = Vector2.zero;
val8.offsetMax = Vector2.zero;
Text val9 = val7.AddComponent<Text>();
val9.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
val9.fontSize = 9;
val9.alignment = (TextAnchor)4;
((Graphic)val9).color = Color.white;
val9.text = def2.Name;
}
public void Toggle()
{
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
_visible = !_visible;
_root.SetActive(_visible);
if (_visible)
{
_previousLockState = Cursor.lockState;
_previousCursorVisible = Cursor.visible;
Cursor.lockState = (CursorLockMode)0;
Cursor.visible = true;
}
else
{
Cursor.lockState = _previousLockState;
Cursor.visible = _previousCursorVisible;
}
}
}
[RegisterTypeInIl2Cpp]
public class ItemPickerBehaviour : MonoBehaviour
{
public ItemPickerBehaviour(IntPtr ptr)
: base(ptr)
{
}
public void Update()
{
if (Input.GetKeyDown((KeyCode)101))
{
ItemPicker.Instance?.Toggle();
}
}
}
}