using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using On.RoR2;
using On.RoR2.Artifacts;
using On.RoR2.UI;
using RoR2;
using RoR2.Artifacts;
using RoR2.UI;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
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: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("CommandQueue")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+762639175dbd6bbb84bfa35b1bd68d6fc00c42f8")]
[assembly: AssemblyProduct("CommandQueue")]
[assembly: AssemblyTitle("CommandQueue")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
namespace CommandQueue;
[BepInPlugin("com.kuberoot.commandqueue", "CommandQueue", "1.6.1")]
public class CommandQueue : BaseUnityPlugin
{
public static bool IsLoaded;
private static GameObject commandUIPrefab;
private bool isFakeReloading = false;
public static event Action PluginUnloaded;
public void Awake()
{
ModConfig.InitConfig(((BaseUnityPlugin)this).Config);
ModConfig.enabledTabs.SettingChanged += delegate
{
FakeReload();
};
ModConfig.bigItemButtonContainer.SettingChanged += delegate
{
FakeReload();
};
ModConfig.bigItemButtonScale.SettingChanged += delegate
{
FakeReload();
};
}
private void FakeReload()
{
if (!isFakeReloading)
{
isFakeReloading = true;
((MonoBehaviour)this).StartCoroutine(doFakeReload());
}
IEnumerator doFakeReload()
{
yield return 0;
OnDisable();
yield return 0;
OnEnable();
isFakeReloading = false;
}
}
public void OnEnable()
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Expected O, but got Unknown
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Expected O, but got Unknown
GameObject commandCubePrefab = CommandArtifactManager.commandCubePrefab;
commandUIPrefab = ((commandCubePrefab != null) ? commandCubePrefab.GetComponent<PickupPickerController>().panelPrefab : null);
IsLoaded = true;
PickupPickerController.OnDisplayBegin += new hook_OnDisplayBegin(HandleCommandDisplayBegin);
ScoreboardController.Awake += new hook_Awake(ScoreboardController_Awake);
CommandArtifactManager.Init += new hook_Init(CommandArtifactManager_Init);
QueueManager.Enable();
HUD[] array = Object.FindObjectsOfType<HUD>();
foreach (HUD val in array)
{
val.scoreboardPanel.AddComponent<UIManager>();
}
}
public void OnDisable()
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Expected O, but got Unknown
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Expected O, but got Unknown
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Expected O, but got Unknown
IsLoaded = false;
CommandQueue.PluginUnloaded?.Invoke();
PickupPickerController.OnDisplayBegin -= new hook_OnDisplayBegin(HandleCommandDisplayBegin);
ScoreboardController.Awake -= new hook_Awake(ScoreboardController_Awake);
CommandArtifactManager.Init -= new hook_Init(CommandArtifactManager_Init);
QueueManager.Disable();
}
private void CommandArtifactManager_Init(orig_Init orig)
{
orig.Invoke();
((MonoBehaviour)this).StartCoroutine(coroutine());
static IEnumerator coroutine()
{
while ((Object)(object)CommandArtifactManager.commandCubePrefab == (Object)null)
{
yield return (object)new WaitForSeconds(1f);
}
GameObject commandCubePrefab = CommandArtifactManager.commandCubePrefab;
commandUIPrefab = ((commandCubePrefab != null) ? commandCubePrefab.GetComponent<PickupPickerController>().panelPrefab : null);
}
}
private void HandleCommandDisplayBegin(orig_OnDisplayBegin orig, PickupPickerController self, NetworkUIPromptController networkUIPromptController, LocalUser localUser, CameraRigController cameraRigController)
{
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)self.panelPrefab == (Object)(object)commandUIPrefab)
{
foreach (var (tier, val) in QueueManager.PeekAll())
{
if (!self.IsChoiceAvailable(val))
{
continue;
}
QueueManager.Pop(tier);
Option[] options = self.options;
int i;
for (i = 0; i < options.Length; i++)
{
if (options[i].pickupIndex == val && options[i].available)
{
((MonoBehaviour)self).StartCoroutine(submitChoiceNextFrame());
break;
}
}
return;
IEnumerator submitChoiceNextFrame()
{
yield return 0;
self.SubmitChoice(i);
}
}
}
orig.Invoke(self, networkUIPromptController, localUser, cameraRigController);
}
private void ScoreboardController_Awake(orig_Awake orig, ScoreboardController self)
{
((Component)self).gameObject.AddComponent<UIManager>();
orig.Invoke(self);
}
}
public static class ModConfig
{
public class ItemTierSet : SortedSet<ItemTier>
{
public static string Serialize(ItemTierSet self)
{
return string.Join(", ", self.Select((ItemTier x) => ((object)(ItemTier)(ref x)).ToString()));
}
public static ItemTierSet Deserialize(string src)
{
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
ItemTierSet itemTierSet = new ItemTierSet();
foreach (string item in from s in src.Split(',')
select s.Trim())
{
int result2;
if (Enum.TryParse<ItemTier>(item, out ItemTier result))
{
itemTierSet.Add(result);
}
else if (int.TryParse(item, out result2))
{
itemTierSet.Add((ItemTier)result2);
}
}
return itemTierSet;
}
public override string ToString()
{
return Serialize(this);
}
}
private static ConfigFile config;
public static ConfigEntry<ItemTierSet> enabledTabs;
public static ConfigEntry<bool> bigItemButtonContainer;
public static ConfigEntry<float> bigItemButtonScale;
public static ConfigEntry<bool> rightClickRemovesStack;
private const string fileName = "commandQueueSlot_";
private const string extension = "save";
internal static void InitConfig(ConfigFile _config)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Expected O, but got Unknown
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Expected O, but got Unknown
//IL_00cc: Expected O, but got Unknown
//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_00fb: Expected O, but got Unknown
//IL_00fb: Expected O, but got Unknown
//IL_010f: Unknown result type (might be due to invalid IL or missing references)
//IL_0124: Unknown result type (might be due to invalid IL or missing references)
//IL_012e: Expected O, but got Unknown
//IL_012e: Expected O, but got Unknown
//IL_0142: Unknown result type (might be due to invalid IL or missing references)
//IL_0153: Unknown result type (might be due to invalid IL or missing references)
//IL_015d: Expected O, but got Unknown
//IL_015d: Expected O, but got Unknown
config = _config;
TomlTypeConverter.AddConverter(typeof(ItemTierSet), new TypeConverter
{
ConvertToObject = (string str, Type type) => ItemTierSet.Deserialize(str),
ConvertToString = (object obj, Type type) => obj.ToString()
});
enabledTabs = config.Bind<ItemTierSet>(new ConfigDefinition("General", "EnabledQueues"), new ItemTierSet
{
(ItemTier)0,
(ItemTier)1,
(ItemTier)2
}, new ConfigDescription("Which item tiers should have queues?\nValid values: " + string.Join(", ", Enum.GetNames(typeof(ItemTier))), (AcceptableValueBase)null, Array.Empty<object>()));
bigItemButtonContainer = config.Bind<bool>(new ConfigDefinition("General", "BigItemSelectionContainer"), true, new ConfigDescription("false: Default command button layout\ntrue: Increase the space for buttons, helps avoid overflow with modded items", (AcceptableValueBase)null, Array.Empty<object>()));
bigItemButtonScale = config.Bind<float>(new ConfigDefinition("General", "BigItemSelectionScale"), 1f, new ConfigDescription("Scale applied to item buttons in the menu - decrease it if your buttons don't fit\nApplies only if BigItemSelectionContainer is true", (AcceptableValueBase)null, Array.Empty<object>()));
rightClickRemovesStack = config.Bind<bool>(new ConfigDefinition("General", "RightClickRemovesStack"), true, new ConfigDescription("Should right-clicking an item in the queue remove the whole stack?", (AcceptableValueBase)null, Array.Empty<object>()));
}
public static void SaveQueue(int slot)
{
string path = string.Format("{0}{1}.{2}", "commandQueueSlot_", slot, "save");
string value = QueueManager.mainQueues.Where((KeyValuePair<ItemTier, List<QueueManager.QueueEntry>> entry) => entry.Value.Count > 0).SelectMany((KeyValuePair<ItemTier, List<QueueManager.QueueEntry>> pair) => pair.Value).Aggregate("", (string current, QueueManager.QueueEntry queueEntry) => current + $"{((object)(PickupIndex)(ref queueEntry.pickupIndex)).ToString()}*{queueEntry.count},");
if (!File.Exists(path))
{
File.Create(path).Dispose();
}
using StreamWriter streamWriter = new StreamWriter(path);
streamWriter.WriteLine(value);
streamWriter.Dispose();
}
public static void LoadQueue(int slot)
{
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
string path = string.Format("{0}{1}.{2}", "commandQueueSlot_", slot, "save");
if (!File.Exists(path))
{
return;
}
QueueManager.ClearAllQueues();
string text = File.ReadAllText(path).Trim();
if (string.IsNullOrEmpty(text))
{
return;
}
try
{
string[] array = text.Split(',');
foreach (string text2 in array)
{
if (!string.IsNullOrEmpty(text2))
{
string[] array2 = text2.Split('*');
for (int j = 0; j < int.Parse(array2[1]); j++)
{
QueueManager.Enqueue(PickupCatalog.FindPickupIndex(array2[0]));
}
}
}
}
catch (Exception)
{
Debug.Log((object)$"File for save slot {slot} contains errors.");
}
}
public static string PreviewSlot(int slot)
{
string path = string.Format("{0}{1}.{2}", "commandQueueSlot_", slot, "save");
if (!File.Exists(path))
{
return "No Save";
}
string text = File.ReadAllText(path).Trim();
if (string.IsNullOrEmpty(text))
{
return "Empty";
}
int num = 0;
try
{
num += (from o in text.Split(',')
where !string.IsNullOrEmpty(o)
select o.Split('*') into o
select int.Parse(o[1])).Sum();
}
catch (Exception)
{
return "Error";
}
return (num > 0) ? string.Format("{0} item{1}", num, (num > 1) ? "s" : "") : "Empty";
}
}
internal class QueueDisplay : MonoBehaviour
{
public class QueueItemBehavior : MonoBehaviour, IBeginDragHandler, IEventSystemHandler, IDragHandler, IEndDragHandler, IPointerClickHandler
{
private GameObject m_DraggingIcon;
private QueueDisplay m_Queue;
private ItemIcon m_ItemIcon;
public void Init(QueueDisplay queue)
{
m_Queue = queue;
m_ItemIcon = ((Component)this).GetComponent<ItemIcon>();
}
public void OnBeginDrag(PointerEventData eventData)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Invalid comparison between Unknown and I4
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Expected O, but got Unknown
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
//IL_0106: Unknown result type (might be due to invalid IL or missing references)
InputButton button = eventData.button;
InputButton val = button;
if ((int)val <= 1)
{
m_DraggingIcon = new GameObject("QueueItemDragIcon");
m_DraggingIcon.transform.SetParent(((Component)m_Queue).transform, false);
m_DraggingIcon.transform.SetAsLastSibling();
RawImage val2 = m_DraggingIcon.AddComponent<RawImage>();
val2.texture = m_ItemIcon.image.texture;
RectTransform rectTransform = ((Graphic)val2).rectTransform;
Rect rect = ((Graphic)m_ItemIcon.image).rectTransform.rect;
float height = ((Rect)(ref rect)).height;
rectTransform.anchorMin = new Vector2(0.5f, 0.5f);
rectTransform.anchorMax = new Vector2(0.5f, 0.5f);
rectTransform.sizeDelta = new Vector2(height, height);
((Transform)rectTransform).localScale = ((Transform)m_ItemIcon.rectTransform).localScale;
((Graphic)val2).color = new Color(1f, 1f, 1f, 0.6f);
SetDraggedPosition(eventData);
((AbstractEventData)eventData).Use();
}
}
public void OnDrag(PointerEventData eventData)
{
if (Object.op_Implicit((Object)(object)m_DraggingIcon))
{
SetDraggedPosition(eventData);
((AbstractEventData)eventData).Use();
}
}
public void OnEndDrag(PointerEventData eventData)
{
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_00db: Unknown result type (might be due to invalid IL or missing references)
//IL_00e1: Invalid comparison between Unknown and I4
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)m_DraggingIcon))
{
return;
}
Object.Destroy((Object)(object)m_DraggingIcon);
Vector2 val = default(Vector2);
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(m_Queue.rectTransform, eventData.position, eventData.pressEventCamera, ref val))
{
float num = val.x / (m_Queue.iconScale * (m_Queue.itemIconPrefabWidth + 5f));
int newIndex = Mathf.RoundToInt(num);
int num2 = m_Queue.icons.FindIndex((ItemIcon icon) => (Object)(object)((Component)icon).gameObject == (Object)(object)((Component)this).gameObject);
List<QueueManager.QueueEntry> queue = m_Queue.queue;
if (num2 < 0 || num2 > queue.Count)
{
return;
}
int num3 = m_Queue.queue[num2].count;
if ((int)eventData.button == 1 && num3 > 1)
{
num3 /= 2;
}
QueueManager.Move(m_Queue.tier, num2, newIndex, num3);
}
((AbstractEventData)eventData).Use();
}
private void SetDraggedPosition(PointerEventData data)
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
RectTransform component = m_DraggingIcon.GetComponent<RectTransform>();
Vector3 position = default(Vector3);
if (RectTransformUtility.ScreenPointToWorldPointInRectangle(m_Queue.rectTransform, data.position, data.pressEventCamera, ref position))
{
((Transform)component).position = position;
}
}
public void OnPointerClick(PointerEventData eventData)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Invalid comparison between Unknown and I4
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
if ((int)eventData.button != 1 || !ModConfig.rightClickRemovesStack.Value)
{
return;
}
List<ItemIcon> icons = m_Queue.icons;
for (int i = 0; i < icons.Count; i++)
{
if ((Object)(object)((Component)icons[i]).gameObject == (Object)(object)((Component)this).gameObject)
{
QueueManager.QueueEntry queueEntry = m_Queue.queue[i];
QueueManager.Remove(m_Queue.tier, i, queueEntry.count);
break;
}
}
((AbstractEventData)eventData).Use();
}
}
public GameObject itemIconPrefab;
public float itemIconPrefabWidth = 64f;
public ItemTier tier;
private float iconScale = 1f;
private RectTransform rectTransform;
private readonly List<ItemIcon> icons = new List<ItemIcon>();
private List<QueueManager.QueueEntry> queue;
public void Awake()
{
ref RectTransform reference = ref rectTransform;
Transform transform = ((Component)this).transform;
reference = (RectTransform)(object)((transform is RectTransform) ? transform : null);
}
public void Start()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
Rect rect = rectTransform.rect;
iconScale = (((Rect)(ref rect)).height - 10f) / itemIconPrefabWidth;
LayoutIcons();
}
public void LayoutIcon(int index, RectTransform transform)
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
transform.anchoredPosition = new Vector2((float)index * iconScale * (itemIconPrefabWidth + 5f), 5f);
((Transform)transform).localScale = new Vector3(iconScale, iconScale, 1f);
}
public void LayoutIcons(int first = 0)
{
for (int i = first; i < icons.Count; i++)
{
LayoutIcon(i, icons[i].rectTransform);
}
}
public ItemIcon AllocateIcon(int index)
{
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Expected O, but got Unknown
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
ItemIcon icon = Object.Instantiate<GameObject>(itemIconPrefab, (Transform)(object)rectTransform, false).GetComponent<ItemIcon>();
RectTransform val = icon.rectTransform;
Button val2 = ((Component)icon).gameObject.AddComponent<Button>();
((UnityEvent)val2.onClick).AddListener((UnityAction)delegate
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
for (int i = 0; i < icons.Count; i++)
{
if ((Object)(object)icons[i] == (Object)(object)icon)
{
QueueManager.Remove(tier, i);
break;
}
}
});
Navigation navigation = default(Navigation);
((Navigation)(ref navigation)).mode = (Mode)0;
((Selectable)val2).navigation = navigation;
val.anchorMin = new Vector2(0f, 1f);
val.anchorMax = new Vector2(0f, 1f);
LayoutIcon(index, val);
QueueItemBehavior queueItemBehavior = ((Component)icon).gameObject.AddComponent<QueueItemBehavior>();
queueItemBehavior.Init(this);
icons.Insert(index, icon);
return icon;
}
public void AllocateIcons(int count, Action<int, ItemIcon> action = null)
{
for (int num = icons.Count - 1; num >= count; num--)
{
Object.Destroy((Object)(object)((Component)icons[num]).gameObject);
icons.RemoveAt(num);
}
for (int i = icons.Count; i < count; i++)
{
ItemIcon arg = AllocateIcon(i);
action?.Invoke(i, arg);
}
}
public void DestroyUI()
{
foreach (ItemIcon icon in icons)
{
Object.Destroy((Object)(object)((Component)icon).gameObject);
}
icons.Clear();
}
public void UpdateUI()
{
AllocateIcons(queue.Count);
UpdateIcons();
}
private void UpdateIcon(int i)
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
ItemIcon val = icons[i];
QueueManager.QueueEntry queueEntry = queue[i];
val.SetItemIndex(PickupCatalog.GetPickupDef(queueEntry.pickupIndex).itemIndex, queueEntry.count);
}
private void UpdateIcons()
{
for (int i = 0; i < icons.Count; i++)
{
UpdateIcon(i);
}
}
private void HandleQueueChange(QueueManager.QueueChange change, ItemTier tier, int index)
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
if (Object.op_Implicit((Object)(object)itemIconPrefab) && tier == this.tier)
{
switch (change)
{
case QueueManager.QueueChange.Changed:
UpdateIcon(index);
break;
case QueueManager.QueueChange.Added:
AllocateIcon(index);
UpdateIcon(index);
break;
case QueueManager.QueueChange.Removed:
Object.Destroy((Object)(object)((Component)icons[index]).gameObject);
icons.RemoveAt(index);
LayoutIcons(index);
break;
case QueueManager.QueueChange.Moved:
UpdateUI();
break;
}
}
}
public void OnEnable()
{
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
if (Object.op_Implicit((Object)(object)itemIconPrefab))
{
queue = QueueManager.mainQueues[tier];
UpdateUI();
QueueManager.OnQueueChanged += HandleQueueChange;
}
}
public void OnDisable()
{
QueueManager.OnQueueChanged -= HandleQueueChange;
}
}
public static class QueueManager
{
public struct QueueEntry
{
public PickupIndex pickupIndex;
public int count;
}
public enum QueueChange
{
Removed,
Added,
Changed,
Moved
}
public static Dictionary<ItemTier, List<QueueEntry>> mainQueues = new Dictionary<ItemTier, List<QueueEntry>>
{
{
(ItemTier)0,
new List<QueueEntry>()
},
{
(ItemTier)1,
new List<QueueEntry>()
},
{
(ItemTier)2,
new List<QueueEntry>()
}
};
public static Dictionary<ItemTier, bool> queueRepeat = new Dictionary<ItemTier, bool>();
public static event Action<Run> OnRunQueueInit;
public static event Action<QueueChange, ItemTier, int> OnQueueChanged;
internal static void Enable()
{
Run.onRunStartGlobal += InitQueues;
UpdateQueueAvailability();
}
internal static void Disable()
{
Run.onRunStartGlobal -= InitQueues;
}
public static void UpdateQueueAvailability()
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
ModConfig.ItemTierSet value = ModConfig.enabledTabs.Value;
ItemTier[] array = mainQueues.Keys.ToArray();
foreach (ItemTier val in array)
{
if (!value.Contains(val))
{
mainQueues.Remove(val);
}
}
foreach (ItemTier item in value)
{
if (!mainQueues.ContainsKey(item))
{
mainQueues.Add(item, new List<QueueEntry>());
}
}
}
private static void InitQueues(Run run)
{
mainQueues.Clear();
UpdateQueueAvailability();
QueueManager.OnRunQueueInit?.Invoke(run);
}
public static bool DoesRepeat(ItemTier tier)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
bool value;
return queueRepeat.TryGetValue(tier, out value) && value;
}
public static void ToggleRepeat(ItemTier tier)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
queueRepeat[tier] = !DoesRepeat(tier);
}
public static void Enqueue(PickupIndex pickupIndex)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
ItemTier tier = ItemCatalog.GetItemDef(PickupCatalog.GetPickupDef(pickupIndex).itemIndex).tier;
List<QueueEntry> list = mainQueues[tier];
if (list.Count > 0)
{
QueueEntry value = list[list.Count - 1];
if (value.pickupIndex == pickupIndex)
{
value.count++;
list[list.Count - 1] = value;
QueueManager.OnQueueChanged?.Invoke(QueueChange.Changed, tier, list.Count - 1);
return;
}
}
QueueEntry queueEntry = default(QueueEntry);
queueEntry.pickupIndex = pickupIndex;
queueEntry.count = 1;
QueueEntry item = queueEntry;
list.Add(item);
QueueManager.OnQueueChanged?.Invoke(QueueChange.Added, tier, list.Count - 1);
}
public static PickupIndex Peek(ItemTier tier)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: 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_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
List<QueueEntry> list = mainQueues[tier];
if (list.Count == 0)
{
return PickupIndex.none;
}
return list[0].pickupIndex;
}
public static PickupIndex Pop(ItemTier tier)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
PickupIndex val = Remove(tier, 0);
if (DoesRepeat(tier))
{
Enqueue(val);
}
return val;
}
public static PickupIndex Remove(ItemTier tier, int index, int count = 1)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
List<QueueEntry> list = mainQueues[tier];
QueueEntry value = list[index];
value.count -= count;
if (value.count <= 0)
{
list.RemoveAt(index);
QueueManager.OnQueueChanged?.Invoke(QueueChange.Removed, tier, index);
if (TryMerge(tier, index - 1, index))
{
QueueManager.OnQueueChanged?.Invoke(QueueChange.Removed, tier, index);
QueueManager.OnQueueChanged?.Invoke(QueueChange.Changed, tier, index - 1);
}
}
else
{
list[index] = value;
QueueManager.OnQueueChanged?.Invoke(QueueChange.Changed, tier, index);
}
return value.pickupIndex;
}
private static bool TryMerge(ItemTier tier, int into, int from)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
List<QueueEntry> list = mainQueues[tier];
if (into < 0 || into >= list.Count || from < 0 || from >= list.Count)
{
return false;
}
QueueEntry value = list[into];
QueueEntry queueEntry = list[from];
if (value.pickupIndex != queueEntry.pickupIndex)
{
return false;
}
value.count += queueEntry.count;
list[into] = value;
list.RemoveAt(from);
return true;
}
public static void ClearAllQueues()
{
mainQueues.Clear();
UpdateQueueAvailability();
}
public static void Move(ItemTier tier, int oldIndex, int newIndex, int count = 1)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
List<QueueEntry> list = mainQueues[tier];
newIndex = Math.Max(0, Math.Min(list.Count, newIndex));
if (newIndex == oldIndex)
{
return;
}
QueueEntry item = list[oldIndex];
if (item.count < count)
{
return;
}
if (item.count == count)
{
list.RemoveAt(oldIndex);
if (newIndex > oldIndex)
{
newIndex--;
}
}
else
{
QueueEntry value = list[oldIndex];
value.count -= count;
list[oldIndex] = value;
}
item.count = count;
if (TryMerge(tier, oldIndex - 1, oldIndex) && newIndex > oldIndex)
{
newIndex--;
}
list.Insert(newIndex, item);
TryMerge(tier, newIndex - 1, newIndex);
TryMerge(tier, newIndex, newIndex + 1);
QueueManager.OnQueueChanged?.Invoke(QueueChange.Moved, tier, -1);
}
public static IEnumerable<(ItemTier, PickupIndex)> PeekAll()
{
return from entry in mainQueues
where entry.Value.Count > 0
select (entry.Key, entry.Value.First().pickupIndex);
}
}
internal class UIManager : MonoBehaviour
{
private struct ButtonWrapper
{
public HGButton hgButton { get; private set; }
public TextMeshProUGUI textComponent { get; private set; }
public RectTransform rectTransform { get; private set; }
public LanguageTextMeshController languageTextMeshController { get; private set; }
public ButtonClickedEvent _onClick => ((Button)hgButton).onClick;
public string text
{
get
{
return languageTextMeshController.token;
}
set
{
languageTextMeshController.token = value;
}
}
public string directText
{
get
{
TextMeshProUGUI obj = textComponent;
return (obj != null) ? ((TMP_Text)obj).text : null;
}
set
{
((TMP_Text)textComponent).text = value;
}
}
public event UnityAction onClick
{
add
{
((UnityEvent)_onClick).AddListener(value);
}
remove
{
((UnityEvent)_onClick).RemoveListener(value);
}
}
public ButtonWrapper(HGButton button)
{
hgButton = button;
textComponent = ((Component)button).GetComponentInChildren<TextMeshProUGUI>();
rectTransform = ((Component)button).GetComponent<RectTransform>();
languageTextMeshController = ((Component)button).GetComponent<LanguageTextMeshController>();
}
}
private static readonly GameObject commandUIPrefab;
private static readonly GameObject commandCancelButton;
private static readonly PickupPickerPanel prefabPickupPickerPanel;
private static readonly GameObject commandItemButton;
private static readonly GameObject commandItemContainer;
private static Texture2D repeatIconTexture;
private float saveSlots = 5f;
private static readonly Color selectedColorMult;
private Sprite missingUnlockIcon;
private GameObject itemIconPrefab;
private ItemInventoryDisplay itemInventoryDisplayPrefab;
private ScoreboardController scoreboard;
private HUD hud;
private GameObject container;
private GameObject origContainer;
private GameObject saveLoadContainer;
private ColorBlock origButtonColors;
private ColorBlock selectedButtonColors;
private ButtonWrapper scoreboardButton;
private ButtonWrapper queueButton;
private ButtonWrapper saveLoadButton;
private GameObject queueContainer;
private readonly Dictionary<ItemTier, GameObject> queueDisplays = new Dictionary<ItemTier, GameObject>();
private readonly Dictionary<ItemTier, ButtonWrapper> queueButtons = new Dictionary<ItemTier, ButtonWrapper>();
private int displayingQueues = 1;
private ItemTier selectedQueue = (ItemTier)0;
private List<GameObject> uiElements = new List<GameObject>();
private int DisplayingQueues
{
get
{
return displayingQueues;
}
set
{
if (displayingQueues == value)
{
return;
}
if (Object.op_Implicit((Object)(object)origContainer) && Object.op_Implicit((Object)(object)queueContainer) && Object.op_Implicit((Object)(object)saveLoadContainer))
{
switch (value)
{
case 0:
container.SetActive(false);
queueContainer.SetActive(true);
saveLoadContainer.SetActive(false);
break;
case 1:
container.SetActive(true);
queueContainer.SetActive(false);
saveLoadContainer.SetActive(false);
break;
default:
container.SetActive(false);
queueContainer.SetActive(false);
saveLoadContainer.SetActive(true);
break;
}
}
displayingQueues = value;
UpdateButtonColors();
}
}
private ItemTier SelectedQueue
{
get
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
return selectedQueue;
}
set
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: 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)
if (selectedQueue != value)
{
queueDisplays[selectedQueue].SetActive(false);
queueDisplays[value].SetActive(true);
ButtonWrapper[] buttons = new ButtonWrapper[2]
{
queueButtons[value],
queueButtons[selectedQueue]
};
TransitionEnabledButton(buttons);
selectedQueue = value;
}
}
}
static UIManager()
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
selectedColorMult = new Color(0.3f, 0.3f, 0.3f);
commandUIPrefab = CommandArtifactManager.commandCubePrefab.GetComponent<PickupPickerController>().panelPrefab;
commandCancelButton = ((Component)commandUIPrefab.GetComponentsInChildren<HGButton>().First((HGButton a) => ((Object)a).name == "CancelButton")).gameObject;
prefabPickupPickerPanel = commandUIPrefab.GetComponent<PickupPickerPanel>();
commandItemButton = prefabPickupPickerPanel.buttonPrefab;
commandItemContainer = ((Component)prefabPickupPickerPanel.buttonContainer).gameObject;
}
private static void CopyRectTransform(RectTransform dest, RectTransform source)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: 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)
dest.anchorMin = source.anchorMin;
dest.anchorMax = source.anchorMax;
dest.anchoredPosition = source.anchoredPosition;
((Transform)dest).position = ((Transform)source).position;
dest.sizeDelta = source.sizeDelta;
}
private static void ReparentChildren(Transform dest, Transform source, bool keepWorldPos = false, Action<Transform> additionalAction = null)
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Expected O, but got Unknown
List<Transform> list = new List<Transform>();
foreach (Transform item in source)
{
Transform val = item;
if ((Object)(object)val != (Object)(object)dest)
{
list.Add(val);
}
}
foreach (Transform item2 in list)
{
item2.SetParent(dest, keepWorldPos);
additionalAction?.Invoke(item2);
}
}
private static IEnumerator ExecuteNextFrameInner(Action action)
{
yield return 0;
action();
}
private void ExecuteNextFrame(Action action)
{
((MonoBehaviour)this).StartCoroutine(ExecuteNextFrameInner(action));
}
private ButtonWrapper CreateButton(GameObject parent = null, UnityAction onClick = null, string text = null)
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Expected O, but got Unknown
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Expected O, but got Unknown
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Expected O, but got Unknown
GameObject val = Object.Instantiate<GameObject>(commandCancelButton, (parent != null) ? parent.transform : null);
uiElements.Add(val);
HGButton component = val.GetComponent<HGButton>();
((MPButton)component).onSelect = new UnityEvent();
((MPButton)component).onDeselect = new UnityEvent();
((Button)component).onClick = new ButtonClickedEvent();
ButtonWrapper result = new ButtonWrapper(component);
if (text != null)
{
result.text = text;
}
if (onClick != null)
{
result.onClick += onClick;
}
return result;
}
private void MarkButton(ButtonWrapper button, bool state)
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: 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)
((Selectable)button.hgButton).colors = (state ? selectedButtonColors : origButtonColors);
((Graphic)button.hgButton.imageOnHover).color = (state ? selectedColorMult : Color.white);
}
private void TransitionEnabledButton(ButtonWrapper[] buttons)
{
int num = 0;
foreach (ButtonWrapper button in buttons)
{
if (num == 0)
{
MarkButton(button, state: true);
}
else
{
MarkButton(button, state: false);
}
num++;
}
}
private void UpdateButtonColors()
{
ButtonWrapper[] array = new ButtonWrapper[3];
if (Object.op_Implicit((Object)(object)queueButton.hgButton) && Object.op_Implicit((Object)(object)scoreboardButton.hgButton) && Object.op_Implicit((Object)(object)saveLoadButton.hgButton))
{
if (DisplayingQueues == 0)
{
array[0] = queueButton;
array[1] = scoreboardButton;
array[2] = saveLoadButton;
}
else if (DisplayingQueues == 1)
{
array[0] = scoreboardButton;
array[1] = queueButton;
array[2] = saveLoadButton;
}
else
{
array[0] = saveLoadButton;
array[1] = queueButton;
array[2] = scoreboardButton;
}
TransitionEnabledButton(array);
}
}
private void PrintObject(GameObject obj, bool components = false, int depth = 0)
{
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Expected O, but got Unknown
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append(' ', depth * 2);
stringBuilder.Append(((object)obj).ToString());
Debug.Log((object)stringBuilder.ToString());
if (components)
{
Component[] components2 = obj.GetComponents<Component>();
foreach (Component val in components2)
{
stringBuilder.Clear();
stringBuilder.Append(' ', depth * 2);
stringBuilder.Append('-');
stringBuilder.Append(((object)val).ToString());
Debug.Log((object)stringBuilder.ToString());
}
}
foreach (Transform item in obj.transform)
{
Transform val2 = item;
PrintObject(((Component)val2).gameObject, components, depth + 1);
}
}
private PickupIndex GetPickupIndexOfItemTier(ItemTier itemTier)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Expected I4, but got Unknown
//IL_00be: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: 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_00c7: Unknown result type (might be due to invalid IL or missing references)
List<PickupIndex> list = null;
switch ((int)itemTier)
{
case 0:
list = Run.instance.availableTier1DropList;
break;
case 1:
list = Run.instance.availableTier2DropList;
break;
case 2:
list = Run.instance.availableTier3DropList;
break;
case 4:
list = Run.instance.availableBossDropList;
break;
case 3:
list = Run.instance.availableLunarItemDropList;
break;
case 6:
list = Run.instance.availableVoidTier1DropList;
break;
case 7:
list = Run.instance.availableVoidTier2DropList;
break;
case 8:
list = Run.instance.availableVoidTier3DropList;
break;
case 9:
list = Run.instance.availableVoidBossDropList;
break;
}
return list?.FirstOrDefault() ?? PickupIndex.none;
}
private RectTransform CreateQueueContainer(ItemTier itemTier, RectTransform parent, Action<PickupIndex> callback)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Expected O, but got Unknown
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ff: 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_012f: Expected O, but got Unknown
//IL_014d: Unknown result type (might be due to invalid IL or missing references)
//IL_0164: Unknown result type (might be due to invalid IL or missing references)
//IL_017b: Unknown result type (might be due to invalid IL or missing references)
//IL_0192: Unknown result type (might be due to invalid IL or missing references)
//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
//IL_01e3: Expected O, but got Unknown
//IL_0208: Unknown result type (might be due to invalid IL or missing references)
//IL_021f: Unknown result type (might be due to invalid IL or missing references)
//IL_0236: Unknown result type (might be due to invalid IL or missing references)
//IL_025f: Unknown result type (might be due to invalid IL or missing references)
//IL_0299: Unknown result type (might be due to invalid IL or missing references)
//IL_029e: Unknown result type (might be due to invalid IL or missing references)
//IL_0404: Unknown result type (might be due to invalid IL or missing references)
//IL_041f: Unknown result type (might be due to invalid IL or missing references)
//IL_043a: Unknown result type (might be due to invalid IL or missing references)
//IL_0455: Unknown result type (might be due to invalid IL or missing references)
//IL_0468: Unknown result type (might be due to invalid IL or missing references)
//IL_046e: Unknown result type (might be due to invalid IL or missing references)
//IL_0328: Unknown result type (might be due to invalid IL or missing references)
//IL_0337: Unknown result type (might be due to invalid IL or missing references)
//IL_0352: Unknown result type (might be due to invalid IL or missing references)
//IL_036d: Unknown result type (might be due to invalid IL or missing references)
//IL_0388: Unknown result type (might be due to invalid IL or missing references)
//IL_03a3: Unknown result type (might be due to invalid IL or missing references)
//IL_03be: Unknown result type (might be due to invalid IL or missing references)
//IL_047a: Unknown result type (might be due to invalid IL or missing references)
//IL_047f: Unknown result type (might be due to invalid IL or missing references)
GameObject val = new GameObject($"{itemTier}QueueContainer", new Type[1] { typeof(RectTransform) });
Transform transform = val.transform;
RectTransform val2 = (RectTransform)(object)((transform is RectTransform) ? transform : null);
((Transform)val2).SetParent((Transform)(object)parent, false);
GameObject val3 = Object.Instantiate<GameObject>(((Component)itemInventoryDisplayPrefab).gameObject, (Transform)(object)val2, false);
Object.DestroyImmediate((Object)(object)val3.GetComponent<ItemInventoryDisplay>());
Object.DestroyImmediate((Object)(object)val3.GetComponent<LayoutElement>());
Transform transform2 = val3.transform;
RectTransform val4 = (RectTransform)(object)((transform2 is RectTransform) ? transform2 : null);
val4.anchorMin = new Vector2(0f, 1f);
val4.anchorMax = new Vector2(1f, 1f);
val4.sizeDelta = new Vector2(-60f, 50f);
val4.anchoredPosition = new Vector2(0f, -5f);
val4.pivot = new Vector2(0f, 1f);
ButtonWrapper repeatButton = default(ButtonWrapper);
repeatButton = CreateButton(val, (UnityAction)delegate
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
QueueManager.ToggleRepeat(itemTier);
MarkButton(repeatButton, QueueManager.DoesRepeat(itemTier));
}, "");
RectTransform rectTransform = repeatButton.rectTransform;
rectTransform.anchorMin = new Vector2(1f, 1f);
rectTransform.anchorMax = new Vector2(1f, 1f);
rectTransform.sizeDelta = new Vector2(55f, 55f);
rectTransform.anchoredPosition = new Vector2(0f, -2.5f);
rectTransform.pivot = new Vector2(1f, 1f);
GameObject val5 = new GameObject($"{itemTier}RepeatButtonImageHolder", new Type[1] { typeof(RectTransform) });
Transform transform3 = val5.transform;
RectTransform val6 = (RectTransform)(object)((transform3 is RectTransform) ? transform3 : null);
((Transform)val6).SetParent((Transform)(object)rectTransform, false);
val6.anchorMin = new Vector2(0f, 0f);
val6.anchorMax = new Vector2(1f, 1f);
val6.sizeDelta = new Vector2(-15f, -15f);
RawImage val7 = val5.AddComponent<RawImage>();
val7.texture = (Texture)(object)repeatIconTexture;
MarkButton(repeatButton, QueueManager.DoesRepeat(itemTier));
QueueDisplay queueDisplay = val3.AddComponent<QueueDisplay>();
queueDisplay.itemIconPrefab = itemIconPrefab;
queueDisplay.itemIconPrefabWidth = itemInventoryDisplayPrefab.itemIconPrefabWidth;
queueDisplay.tier = itemTier;
GameObject val8 = Object.Instantiate<GameObject>(commandItemContainer, (Transform)(object)val2, false);
RectTransform itemButtonsTransform = default(RectTransform);
ref RectTransform reference = ref itemButtonsTransform;
Transform transform4 = val8.transform;
reference = (RectTransform)(object)((transform4 is RectTransform) ? transform4 : null);
GridLayoutGroup component = val8.GetComponent<GridLayoutGroup>();
UIElementAllocator<MPButton> val9 = new UIElementAllocator<MPButton>(itemButtonsTransform, commandItemButton, true, false);
if (ModConfig.bigItemButtonContainer.Value)
{
Object.Destroy((Object)(object)val8.GetComponent<RawImage>());
component.constraint = (Constraint)0;
component.startCorner = (Corner)0;
component.startAxis = (Axis)0;
((LayoutGroup)component).childAlignment = (TextAnchor)1;
component.cellSize *= ModConfig.bigItemButtonScale.Value;
itemButtonsTransform.anchoredPosition = new Vector2(0f, 0f);
itemButtonsTransform.anchorMin = new Vector2(0f, 0f);
itemButtonsTransform.anchorMax = new Vector2(1f, 1f);
itemButtonsTransform.sizeDelta = new Vector2(0f, -55f);
itemButtonsTransform.pivot = new Vector2(0.5f, 0f);
}
else
{
component.constraint = (Constraint)1;
component.constraintCount = prefabPickupPickerPanel.maxColumnCount;
((LayoutGroup)component).childAlignment = (TextAnchor)1;
itemButtonsTransform.anchorMin = new Vector2(0.5f, 1f);
itemButtonsTransform.anchorMax = new Vector2(0.5f, 1f);
itemButtonsTransform.anchoredPosition = new Vector2(0f, -55f);
itemButtonsTransform.pivot = new Vector2(0f, 1f);
itemButtonsTransform.sizeDelta = default(Vector2);
}
Option[] itemOptions = PickupPickerController.GetOptionsFromPickupIndex(GetPickupIndexOfItemTier(itemTier));
if (itemOptions != null)
{
val9.onCreateElement = delegate(int index, MPButton button)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Expected O, but got Unknown
Option val10 = itemOptions[index];
PickupDef pickupDef = PickupCatalog.GetPickupDef(val10.pickupIndex);
Image component2 = ((Component)((Component)button).GetComponent<ChildLocator>().FindChild("Icon")).GetComponent<Image>();
if (val10.available && pickupDef != null)
{
((Graphic)component2).color = Color.white;
component2.sprite = pickupDef.iconSprite;
((Selectable)button).interactable = true;
PickupIndex pickupIndex = pickupDef.pickupIndex;
((UnityEvent)((Button)button).onClick).AddListener((UnityAction)delegate
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
callback(pickupIndex);
LayoutRebuilder.MarkLayoutForRebuild(itemButtonsTransform);
});
}
else
{
((Graphic)component2).color = Color.gray;
component2.sprite = missingUnlockIcon;
((Selectable)button).interactable = false;
}
};
val9.AllocateElements(itemOptions.Length);
}
return val2;
}
private void CreateSaveLoadContainer(GameObject saveLoadCon)
{
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Expected O, but got Unknown
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_0100: Expected O, but got Unknown
//IL_0113: Unknown result type (might be due to invalid IL or missing references)
//IL_012c: Unknown result type (might be due to invalid IL or missing references)
//IL_013b: Unknown result type (might be due to invalid IL or missing references)
//IL_0141: Unknown result type (might be due to invalid IL or missing references)
//IL_014d: Unknown result type (might be due to invalid IL or missing references)
//IL_0153: Unknown result type (might be due to invalid IL or missing references)
float num = 5f;
for (int i = 1; (float)i <= num; i++)
{
int slot = i;
float num2 = (num + 1f - (float)slot) * 1.2f / num - 0.6f;
ButtonWrapper loadButton = CreateButton(text: $"Load slot {slot} ({ModConfig.PreviewSlot(slot)})", parent: saveLoadCon, onClick: (UnityAction)delegate
{
ModConfig.LoadQueue(slot);
});
RectTransform rectTransform = loadButton.rectTransform;
rectTransform.anchorMin = new Vector2(0.25f, num2);
rectTransform.anchorMax = new Vector2(0.495f, num2 + 0.24f);
rectTransform.anchoredPosition = default(Vector2);
rectTransform.sizeDelta = default(Vector2);
RectTransform rectTransform2 = CreateButton(text: $"Save in slot {slot}", parent: saveLoadCon, onClick: (UnityAction)delegate
{
ModConfig.SaveQueue(slot);
loadButton.text = $"Load slot {slot} ({ModConfig.PreviewSlot(slot)})";
}).rectTransform;
rectTransform2.anchorMin = new Vector2(0.505f, num2);
rectTransform2.anchorMax = new Vector2(0.75f, num2 + 0.24f);
rectTransform2.anchoredPosition = default(Vector2);
rectTransform2.sizeDelta = default(Vector2);
}
}
private void DestroyUI()
{
foreach (GameObject uiElement in uiElements)
{
Object.Destroy((Object)(object)uiElement);
}
uiElements.Clear();
if ((Object)(object)container != (Object)null)
{
RectTransform component = container.GetComponent<RectTransform>();
RectTransform component2 = origContainer.GetComponent<RectTransform>();
ReparentChildren((Transform)(object)component2, (Transform)(object)component);
Object.Destroy((Object)(object)container);
Object.Destroy((Object)(object)queueContainer);
Object.Destroy((Object)(object)saveLoadContainer);
container = null;
}
}
private void RebuildUI()
{
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00ad: Expected O, but got Unknown
//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
//IL_00dc: Expected O, but got Unknown
//IL_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_012f: Unknown result type (might be due to invalid IL or missing references)
//IL_0145: Unknown result type (might be due to invalid IL or missing references)
//IL_0173: Unknown result type (might be due to invalid IL or missing references)
//IL_017d: Expected O, but got Unknown
//IL_023c: Unknown result type (might be due to invalid IL or missing references)
//IL_0241: Unknown result type (might be due to invalid IL or missing references)
//IL_024b: Unknown result type (might be due to invalid IL or missing references)
//IL_026f: Unknown result type (might be due to invalid IL or missing references)
//IL_03f8: Unknown result type (might be due to invalid IL or missing references)
//IL_03fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0409: Unknown result type (might be due to invalid IL or missing references)
//IL_045f: Unknown result type (might be due to invalid IL or missing references)
//IL_0465: Unknown result type (might be due to invalid IL or missing references)
//IL_0482: Unknown result type (might be due to invalid IL or missing references)
//IL_04a2: Unknown result type (might be due to invalid IL or missing references)
//IL_04ba: Unknown result type (might be due to invalid IL or missing references)
//IL_04c0: Unknown result type (might be due to invalid IL or missing references)
//IL_04d5: Unknown result type (might be due to invalid IL or missing references)
//IL_04df: Expected O, but got Unknown
//IL_0505: Unknown result type (might be due to invalid IL or missing references)
//IL_050b: Unknown result type (might be due to invalid IL or missing references)
//IL_0528: Unknown result type (might be due to invalid IL or missing references)
//IL_0548: Unknown result type (might be due to invalid IL or missing references)
//IL_0560: Unknown result type (might be due to invalid IL or missing references)
//IL_0566: Unknown result type (might be due to invalid IL or missing references)
//IL_057b: Unknown result type (might be due to invalid IL or missing references)
//IL_0585: Expected O, but got Unknown
//IL_05ab: Unknown result type (might be due to invalid IL or missing references)
//IL_05b1: Unknown result type (might be due to invalid IL or missing references)
//IL_05ce: Unknown result type (might be due to invalid IL or missing references)
//IL_05ee: Unknown result type (might be due to invalid IL or missing references)
//IL_0606: Unknown result type (might be due to invalid IL or missing references)
//IL_060c: Unknown result type (might be due to invalid IL or missing references)
//IL_0621: Unknown result type (might be due to invalid IL or missing references)
//IL_062b: Expected O, but got Unknown
//IL_028e: Unknown result type (might be due to invalid IL or missing references)
//IL_029a: Expected O, but got Unknown
//IL_02b4: Unknown result type (might be due to invalid IL or missing references)
//IL_02d9: Unknown result type (might be due to invalid IL or missing references)
//IL_02ed: Unknown result type (might be due to invalid IL or missing references)
//IL_02f3: Unknown result type (might be due to invalid IL or missing references)
//IL_0304: Unknown result type (might be due to invalid IL or missing references)
//IL_030a: Unknown result type (might be due to invalid IL or missing references)
//IL_0315: Unknown result type (might be due to invalid IL or missing references)
//IL_034e: Unknown result type (might be due to invalid IL or missing references)
//IL_0365: Unknown result type (might be due to invalid IL or missing references)
//IL_0374: Unknown result type (might be due to invalid IL or missing references)
//IL_037a: Unknown result type (might be due to invalid IL or missing references)
//IL_0386: Unknown result type (might be due to invalid IL or missing references)
//IL_038c: Unknown result type (might be due to invalid IL or missing references)
//IL_03aa: Unknown result type (might be due to invalid IL or missing references)
//IL_03c4: Unknown result type (might be due to invalid IL or missing references)
DestroyUI();
origButtonColors = ((Selectable)commandCancelButton.GetComponent<HGButton>()).colors;
ColorBlock val = origButtonColors;
((ColorBlock)(ref val)).disabledColor = ((ColorBlock)(ref val)).disabledColor * selectedColorMult;
((ColorBlock)(ref val)).pressedColor = ((ColorBlock)(ref val)).pressedColor * selectedColorMult;
Color val2 = default(Color);
((Color)(ref val2))..ctor(0.7f, 0.55f, 0.1f, 1f);
((ColorBlock)(ref val)).normalColor = val2;
((ColorBlock)(ref val)).highlightedColor = val2;
selectedButtonColors = val;
container = new GameObject("CommandQueueScoreboardWrapper", new Type[1] { typeof(RectTransform) });
RectTransform component = container.GetComponent<RectTransform>();
saveLoadContainer = new GameObject("SaveLoadContainer", new Type[1] { typeof(RectTransform) });
RectTransform component2 = saveLoadContainer.GetComponent<RectTransform>();
origContainer = ((Component)scoreboard).gameObject;
RectTransform component3 = origContainer.GetComponent<RectTransform>();
((Transform)component).SetParent((Transform)(object)component3, false);
component.sizeDelta = new Vector2(0f, 0f);
component.anchorMin = new Vector2(0f, 0f);
component.anchorMax = new Vector2(1f, 0.93f);
ReparentChildren((Transform)(object)component, (Transform)(object)component3);
queueContainer = new GameObject("CommandQueueContainer", new Type[1] { typeof(RectTransform) });
Transform transform = queueContainer.transform;
RectTransform val3 = (RectTransform)(object)((transform is RectTransform) ? transform : null);
((Transform)component2).SetParent((Transform)(object)component3, false);
saveLoadContainer.SetActive(false);
CopyRectTransform(component2, component);
CreateSaveLoadContainer(saveLoadContainer);
((Transform)val3).SetParent((Transform)(object)component3, false);
CopyRectTransform(val3, component);
Dictionary<ItemTier, string> dictionary = new Dictionary<ItemTier, string>
{
{
(ItemTier)0,
"White"
},
{
(ItemTier)1,
"Green"
},
{
(ItemTier)2,
"Red"
}
};
ModConfig.ItemTierSet value = ModConfig.enabledTabs.Value;
float num = (float)value.Count + 1f;
int num2 = 0;
foreach (ItemTier item in value)
{
ItemTier tier = item;
string text = (dictionary.ContainsKey(tier) ? dictionary[tier] : ((object)(ItemTier)(ref tier)).ToString());
string text2 = text;
ButtonWrapper value2 = CreateButton(queueContainer, (UnityAction)delegate
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
SelectedQueue = tier;
}, text2);
value2.rectTransform.anchorMin = new Vector2((float)num2 / (float)value.Count, 86f / 93f);
value2.rectTransform.anchorMax = new Vector2((float)(num2 + 1) / (float)value.Count, 1f);
value2.rectTransform.anchoredPosition = default(Vector2);
value2.rectTransform.sizeDelta = default(Vector2);
RectTransform val4 = CreateQueueContainer(tier, val3, delegate(PickupIndex index)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
QueueManager.Enqueue(index);
});
val4.anchorMin = new Vector2(0f, 0f);
val4.anchorMax = new Vector2(1f, 86f / 93f);
val4.sizeDelta = default(Vector2);
val4.anchoredPosition = default(Vector2);
((Component)val4).gameObject.SetActive(false);
queueDisplays[tier] = ((Component)val4).gameObject;
queueButtons[tier] = value2;
num2++;
}
selectedQueue = value.First();
queueDisplays[selectedQueue].SetActive(true);
ExecuteNextFrame(delegate
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
MarkButton(queueButtons[selectedQueue], state: true);
});
queueContainer.SetActive(false);
scoreboardButton = CreateButton(origContainer, null, "Scoreboard");
scoreboardButton.rectTransform.anchoredPosition = default(Vector2);
scoreboardButton.rectTransform.anchorMin = new Vector2(0f, 0.93f);
scoreboardButton.rectTransform.anchorMax = new Vector2(0.333f, 1f);
scoreboardButton.rectTransform.sizeDelta = default(Vector2);
scoreboardButton.onClick += (UnityAction)delegate
{
DisplayingQueues = 1;
};
queueButton = CreateButton(origContainer, null, "Command Queue");
queueButton.rectTransform.anchoredPosition = default(Vector2);
queueButton.rectTransform.anchorMin = new Vector2(0.333f, 0.93f);
queueButton.rectTransform.anchorMax = new Vector2(0.667f, 1f);
queueButton.rectTransform.sizeDelta = default(Vector2);
queueButton.onClick += (UnityAction)delegate
{
DisplayingQueues = 0;
};
saveLoadButton = CreateButton(origContainer, null, "Saves");
saveLoadButton.rectTransform.anchoredPosition = default(Vector2);
saveLoadButton.rectTransform.anchorMin = new Vector2(0.666f, 0.93f);
saveLoadButton.rectTransform.anchorMax = new Vector2(1f, 1f);
saveLoadButton.rectTransform.sizeDelta = default(Vector2);
saveLoadButton.onClick += (UnityAction)delegate
{
DisplayingQueues = 2;
};
ExecuteNextFrame(delegate
{
UpdateButtonColors();
});
}
public void Awake()
{
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Expected O, but got Unknown
if (!CommandQueue.IsLoaded)
{
Object.Destroy((Object)(object)this);
return;
}
repeatIconTexture = new Texture2D(0, 0);
using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("CommandQueue.repeat-solid.png"))
{
using MemoryStream memoryStream = new MemoryStream();
stream.CopyTo(memoryStream);
byte[] array = memoryStream.ToArray();
ImageConversion.LoadImage(repeatIconTexture, array);
}
scoreboard = ((Component)this).GetComponent<ScoreboardController>();
hud = ((Component)this).GetComponentInParent<HUD>();
missingUnlockIcon = Resources.Load<Sprite>("Textures/MiscIcons/texUnlockIcon");
itemInventoryDisplayPrefab = scoreboard.stripPrefab.GetComponent<ScoreboardStrip>().itemInventoryDisplay;
GameObject val = LegacyResourcesAPI.Load<GameObject>("Prefabs/HUDSimple");
HUD component = val.GetComponent<HUD>();
ItemInventoryDisplay itemInventoryDisplay = component.itemInventoryDisplay;
itemIconPrefab = itemInventoryDisplay.itemIconPrefab;
CommandQueue.PluginUnloaded += delegate
{
Object.DestroyImmediate((Object)(object)this);
};
}
private void OnDestroy()
{
DestroyUI();
Object.Destroy((Object)(object)repeatIconTexture);
}
private void OnEnable()
{
if ((Object)(object)container == (Object)null)
{
RebuildUI();
}
}
}