using System;
using System.Collections;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using TMPro;
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.Events;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("TrashItems")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("TrashItems")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("8135d2ba-59ab-4fc3-8fac-3c1e06a67b2f")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = "")]
[assembly: AssemblyVersion("1.0.0.0")]
public class WavUtility
{
private const int BlockSize_16Bit = 2;
public static AudioClip ToAudioClip(string filePath)
{
if (!filePath.StartsWith(Application.persistentDataPath) && !filePath.StartsWith(Application.dataPath))
{
Debug.LogWarning((object)"This only supports files that are stored using Unity's Application data path. \nTo load bundled resources use 'Resources.Load(\"filename\") typeof(AudioClip)' method. \nhttps://docs.unity3d.com/ScriptReference/Resources.Load.html");
return null;
}
return ToAudioClip(File.ReadAllBytes(filePath));
}
public static AudioClip ToAudioClip(byte[] fileBytes, int offsetSamples = 0, string name = "wav")
{
int num = BitConverter.ToInt32(fileBytes, 16);
FormatCode(BitConverter.ToUInt16(fileBytes, 20));
ushort num2 = BitConverter.ToUInt16(fileBytes, 22);
int num3 = BitConverter.ToInt32(fileBytes, 24);
ushort num4 = BitConverter.ToUInt16(fileBytes, 34);
int num5 = 20 + num + 4;
int dataSize = BitConverter.ToInt32(fileBytes, num5);
float[] array = num4 switch
{
8 => Convert8BitByteArrayToAudioClipData(fileBytes, num5, dataSize),
16 => Convert16BitByteArrayToAudioClipData(fileBytes, num5, dataSize),
24 => Convert24BitByteArrayToAudioClipData(fileBytes, num5, dataSize),
32 => Convert32BitByteArrayToAudioClipData(fileBytes, num5, dataSize),
_ => throw new Exception(num4 + " bit depth is not supported."),
};
AudioClip obj = AudioClip.Create(name, array.Length, (int)num2, num3, false);
obj.SetData(array, 0);
return obj;
}
private static float[] Convert8BitByteArrayToAudioClipData(byte[] source, int headerOffset, int dataSize)
{
int num = BitConverter.ToInt32(source, headerOffset);
headerOffset += 4;
float[] array = new float[num];
sbyte b = sbyte.MaxValue;
for (int i = 0; i < num; i++)
{
array[i] = (float)(int)source[i] / (float)b;
}
return array;
}
private static float[] Convert16BitByteArrayToAudioClipData(byte[] source, int headerOffset, int dataSize)
{
int num = BitConverter.ToInt32(source, headerOffset);
headerOffset += 4;
int num2 = 2;
int num3 = num / num2;
float[] array = new float[num3];
short num4 = short.MaxValue;
int num5 = 0;
for (int i = 0; i < num3; i++)
{
num5 = i * num2 + headerOffset;
array[i] = (float)BitConverter.ToInt16(source, num5) / (float)num4;
}
return array;
}
private static float[] Convert24BitByteArrayToAudioClipData(byte[] source, int headerOffset, int dataSize)
{
int num = BitConverter.ToInt32(source, headerOffset);
headerOffset += 4;
int num2 = 3;
int num3 = num / num2;
int num4 = int.MaxValue;
float[] array = new float[num3];
byte[] array2 = new byte[4];
int num5 = 0;
for (int i = 0; i < num3; i++)
{
num5 = i * num2 + headerOffset;
Buffer.BlockCopy(source, num5, array2, 1, num2);
array[i] = (float)BitConverter.ToInt32(array2, 0) / (float)num4;
}
return array;
}
private static float[] Convert32BitByteArrayToAudioClipData(byte[] source, int headerOffset, int dataSize)
{
int num = BitConverter.ToInt32(source, headerOffset);
headerOffset += 4;
int num2 = 4;
int num3 = num / num2;
int num4 = int.MaxValue;
float[] array = new float[num3];
int num5 = 0;
for (int i = 0; i < num3; i++)
{
num5 = i * num2 + headerOffset;
array[i] = (float)BitConverter.ToInt32(source, num5) / (float)num4;
}
return array;
}
public static byte[] FromAudioClip(AudioClip audioClip)
{
string filepath;
return FromAudioClip(audioClip, out filepath, saveAsFile: false);
}
public static byte[] FromAudioClip(AudioClip audioClip, out string filepath, bool saveAsFile = true, string dirname = "recordings")
{
MemoryStream stream = new MemoryStream();
ushort bitDepth = 16;
int fileSize = audioClip.samples * audioClip.channels * 2 + 44;
WriteFileHeader(ref stream, fileSize);
WriteFileFormat(ref stream, audioClip.channels, audioClip.frequency, bitDepth);
WriteFileData(ref stream, audioClip, bitDepth);
byte[] array = stream.ToArray();
if (saveAsFile)
{
filepath = string.Format("{0}/{1}/{2}.{3}", Application.persistentDataPath, dirname, DateTime.UtcNow.ToString("yyMMdd-HHmmss-fff"), "wav");
Directory.CreateDirectory(Path.GetDirectoryName(filepath));
File.WriteAllBytes(filepath, array);
}
else
{
filepath = null;
}
stream.Dispose();
return array;
}
private static int WriteFileHeader(ref MemoryStream stream, int fileSize)
{
byte[] bytes = Encoding.ASCII.GetBytes("RIFF");
int num = 0 + WriteBytesToMemoryStream(ref stream, bytes, "ID");
int value = fileSize - 8;
int num2 = num + WriteBytesToMemoryStream(ref stream, BitConverter.GetBytes(value), "CHUNK_SIZE");
byte[] bytes2 = Encoding.ASCII.GetBytes("WAVE");
return num2 + WriteBytesToMemoryStream(ref stream, bytes2, "FORMAT");
}
private static int WriteFileFormat(ref MemoryStream stream, int channels, int sampleRate, ushort bitDepth)
{
byte[] bytes = Encoding.ASCII.GetBytes("fmt ");
int num = 0 + WriteBytesToMemoryStream(ref stream, bytes, "FMT_ID");
int value = 16;
int num2 = num + WriteBytesToMemoryStream(ref stream, BitConverter.GetBytes(value), "SUBCHUNK_SIZE");
ushort value2 = 1;
int num3 = num2 + WriteBytesToMemoryStream(ref stream, BitConverter.GetBytes(value2), "AUDIO_FORMAT");
ushort value3 = Convert.ToUInt16(channels);
int num4 = num3 + WriteBytesToMemoryStream(ref stream, BitConverter.GetBytes(value3), "CHANNELS") + WriteBytesToMemoryStream(ref stream, BitConverter.GetBytes(sampleRate), "SAMPLE_RATE");
int value4 = sampleRate * channels * BytesPerSample(bitDepth);
int num5 = num4 + WriteBytesToMemoryStream(ref stream, BitConverter.GetBytes(value4), "BYTE_RATE");
ushort value5 = Convert.ToUInt16(channels * BytesPerSample(bitDepth));
return num5 + WriteBytesToMemoryStream(ref stream, BitConverter.GetBytes(value5), "BLOCK_ALIGN") + WriteBytesToMemoryStream(ref stream, BitConverter.GetBytes(bitDepth), "BITS_PER_SAMPLE");
}
private static int WriteFileData(ref MemoryStream stream, AudioClip audioClip, ushort bitDepth)
{
float[] array = new float[audioClip.samples * audioClip.channels];
audioClip.GetData(array, 0);
byte[] bytes = ConvertAudioClipDataToInt16ByteArray(array);
byte[] bytes2 = Encoding.ASCII.GetBytes("data");
int num = 0 + WriteBytesToMemoryStream(ref stream, bytes2, "DATA_ID");
int value = Convert.ToInt32(audioClip.samples * audioClip.channels * 2);
return num + WriteBytesToMemoryStream(ref stream, BitConverter.GetBytes(value), "SAMPLES") + WriteBytesToMemoryStream(ref stream, bytes, "DATA");
}
private static byte[] ConvertAudioClipDataToInt16ByteArray(float[] data)
{
MemoryStream memoryStream = new MemoryStream();
int count = 2;
short num = short.MaxValue;
for (int i = 0; i < data.Length; i++)
{
memoryStream.Write(BitConverter.GetBytes(Convert.ToInt16(data[i] * (float)num)), 0, count);
}
byte[] result = memoryStream.ToArray();
memoryStream.Dispose();
return result;
}
private static int WriteBytesToMemoryStream(ref MemoryStream stream, byte[] bytes, string tag = "")
{
int num = bytes.Length;
stream.Write(bytes, 0, num);
return num;
}
public static ushort BitDepth(AudioClip audioClip)
{
return Convert.ToUInt16((float)(audioClip.samples * audioClip.channels) * audioClip.length / (float)audioClip.frequency);
}
private static int BytesPerSample(ushort bitDepth)
{
return bitDepth / 8;
}
private static int BlockSize(ushort bitDepth)
{
return bitDepth switch
{
32 => 4,
16 => 2,
8 => 1,
_ => throw new Exception(bitDepth + " bit depth is not supported."),
};
}
private static string FormatCode(ushort code)
{
switch (code)
{
case 1:
return "PCM";
case 2:
return "ADPCM";
case 3:
return "IEEE";
case 7:
return "μ-law";
case 65534:
return "WaveFormatExtensable";
default:
Debug.LogWarning((object)("Unknown wav code format:" + code));
return "";
}
}
}
namespace TrashItems;
[BepInPlugin("virtuacode.valheim.trashitems", "Trash Items Mod", "1.2.8")]
internal class TrashItems : BaseUnityPlugin
{
public enum SoundEffect
{
None,
Sound1,
Sound2,
Sound3,
Random
}
public class TrashButton : MonoBehaviour
{
private Canvas canvas;
private GraphicRaycaster raycaster;
private RectTransform rectTransform;
private GameObject buttonGo;
private void Awake()
{
//IL_0024: 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)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: 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_00c4: Expected O, but got Unknown
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_0154: Unknown result type (might be due to invalid IL or missing references)
//IL_015e: Expected O, but got Unknown
//IL_017d: Unknown result type (might be due to invalid IL or missing references)
//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)InventoryGui.instance == (Object)null))
{
Transform transform = ((Component)InventoryGui.instance.m_player).transform;
RectTransform component = ((Component)this).GetComponent<RectTransform>();
component.anchoredPosition -= new Vector2(0f, 78f);
SetText(TrashLabel.Value);
SetColor(TrashColor.Value);
Transform obj = ((Component)this).transform.Find("armor_icon");
if (!Object.op_Implicit((Object)(object)obj))
{
LogErr("armor_icon not found!");
}
((Component)obj).GetComponent<Image>().sprite = trashSprite;
((Component)this).transform.SetSiblingIndex(0);
((Object)((Component)((Component)this).transform).gameObject).name = "Trash";
buttonGo = new GameObject("ButtonCanvas");
rectTransform = buttonGo.AddComponent<RectTransform>();
((Component)rectTransform).transform.SetParent(((Component)((Component)this).transform).transform, true);
rectTransform.anchoredPosition = Vector2.zero;
rectTransform.sizeDelta = new Vector2(70f, 74f);
canvas = buttonGo.AddComponent<Canvas>();
raycaster = buttonGo.AddComponent<GraphicRaycaster>();
((UnityEvent)buttonGo.AddComponent<Button>().onClick).AddListener(new UnityAction(TrashItem));
((Graphic)buttonGo.AddComponent<Image>()).color = new Color(0f, 0f, 0f, 0f);
GameObject val = Object.Instantiate<GameObject>(((Component)transform.Find("selected_frame").GetChild(0)).gameObject, ((Component)this).transform);
val.GetComponent<Image>().sprite = bgSprite;
val.transform.SetAsFirstSibling();
val.GetComponent<RectTransform>().sizeDelta = new Vector2(-8f, 22f);
val.GetComponent<RectTransform>().anchoredPosition = new Vector2(6f, 7.5f);
UIGroupHandler val2 = ((Component)this).gameObject.AddComponent<UIGroupHandler>();
val2.m_groupPriority = 1;
val2.m_enableWhenActiveAndGamepad = val;
_gui.m_uiGroups = CollectionExtensions.AddToArray<UIGroupHandler>(_gui.m_uiGroups, val2);
((Component)this).gameObject.AddComponent<TrashHandler>();
}
}
private void Start()
{
((MonoBehaviour)this).StartCoroutine(DelayedOverrideSorting());
}
private IEnumerator DelayedOverrideSorting()
{
yield return null;
if (!((Object)(object)canvas == (Object)null))
{
canvas.overrideSorting = true;
canvas.sortingOrder = 1;
}
}
public void SetText(string text)
{
Transform val = ((Component)this).transform.Find("ac_text");
if (!Object.op_Implicit((Object)(object)val))
{
LogErr("ac_text not found!");
}
else
{
((Component)val).GetComponent<TMP_Text>().text = text;
}
}
public void SetColor(Color color)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
Transform val = ((Component)this).transform.Find("ac_text");
if (!Object.op_Implicit((Object)(object)val))
{
LogErr("ac_text not found!");
}
else
{
((Graphic)((Component)val).GetComponent<TMP_Text>()).color = color;
}
}
}
public static ConfigEntry<bool> ConfirmDialog;
public static ConfigEntry<KeyboardShortcut> TrashHotkey;
public static ConfigEntry<SoundEffect> Sfx;
public static ConfigEntry<Color> TrashColor;
public static ConfigEntry<string> TrashLabel;
public static bool _clickedTrash = false;
public static bool _confirmed = false;
public static InventoryGui _gui;
public static Sprite trashSprite;
public static Sprite bgSprite;
public static GameObject dialog;
public static AudioClip[] sounds = (AudioClip[])(object)new AudioClip[3];
public static Transform trash;
public static AudioSource audio;
public static TrashButton trashButton;
public static ManualLogSource MyLogger;
public static void Log(string msg)
{
ManualLogSource myLogger = MyLogger;
if (myLogger != null)
{
myLogger.LogInfo((object)msg);
}
}
public static void LogErr(string msg)
{
ManualLogSource myLogger = MyLogger;
if (myLogger != null)
{
myLogger.LogError((object)msg);
}
}
public static void LogWarn(string msg)
{
ManualLogSource myLogger = MyLogger;
if (myLogger != null)
{
myLogger.LogWarning((object)msg);
}
}
private void Awake()
{
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_0140: Unknown result type (might be due to invalid IL or missing references)
//IL_014f: 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_0188: Unknown result type (might be due to invalid IL or missing references)
MyLogger = ((BaseUnityPlugin)this).Logger;
ConfirmDialog = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "ConfirmDialog", false, "Show confirm dialog");
Sfx = ((BaseUnityPlugin)this).Config.Bind<SoundEffect>("General", "SoundEffect", SoundEffect.Random, "Sound effect when trashing items");
TrashHotkey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Input", "TrashHotkey", KeyboardShortcut.Deserialize("Delete"), "Hotkey for destroying items");
TrashLabel = ((BaseUnityPlugin)this).Config.Bind<string>("General", "TrashLabel", "Trash", "Label for the trash button");
TrashColor = ((BaseUnityPlugin)this).Config.Bind<Color>("General", "TrashColor", new Color(1f, 0.8482759f, 0f), "Color for the trash label");
TrashLabel.SettingChanged += delegate
{
if ((Object)(object)trashButton != (Object)null)
{
trashButton.SetText(TrashLabel.Value);
}
};
TrashColor.SettingChanged += delegate
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)trashButton != (Object)null)
{
trashButton.SetColor(TrashColor.Value);
}
};
Log("TrashItems Loaded!");
trashSprite = LoadSprite("TrashItems.res.trash.png", new Rect(0f, 0f, 64f, 64f), new Vector2(32f, 32f));
bgSprite = LoadSprite("TrashItems.res.trashmask.png", new Rect(0f, 0f, 96f, 112f), new Vector2(48f, 56f));
sounds[0] = LoadAudioClip("TrashItems.res.trash1.wav");
sounds[1] = LoadAudioClip("TrashItems.res.trash2.wav");
sounds[2] = LoadAudioClip("TrashItems.res.trash3.wav");
Harmony.CreateAndPatchAll(typeof(TrashItems), (string)null);
}
public static AudioClip LoadAudioClip(string path)
{
Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(path);
using MemoryStream memoryStream = new MemoryStream();
manifestResourceStream.CopyTo(memoryStream);
return WavUtility.ToAudioClip(memoryStream.GetBuffer());
}
public static Sprite LoadSprite(string path, Rect size, Vector2 pivot, int units = 100)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Expected O, but got Unknown
//IL_0046: 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)
Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(path);
Texture2D val = new Texture2D((int)((Rect)(ref size)).width, (int)((Rect)(ref size)).height, (TextureFormat)4, false, true);
using MemoryStream memoryStream = new MemoryStream();
manifestResourceStream.CopyTo(memoryStream);
ImageConversion.LoadImage(val, memoryStream.ToArray());
val.Apply();
return Sprite.Create(val, size, pivot, (float)units);
}
[HarmonyPatch(typeof(InventoryGui), "Show")]
[HarmonyPostfix]
public static void Show_Postfix(InventoryGui __instance)
{
Transform transform = ((Component)InventoryGui.instance.m_player).transform;
trash = transform.Find("Trash");
if (!((Object)(object)trash != (Object)null))
{
_gui = InventoryGui.instance;
trash = Object.Instantiate<Transform>(transform.Find("Armor"), transform);
trashButton = ((Component)trash).gameObject.AddComponent<TrashButton>();
AudioMixerGroup outputAudioMixerGroup = AudioMan.instance.m_masterMixer.FindMatchingGroups("GUI")[0];
audio = ((Component)trash).gameObject.AddComponent<AudioSource>();
audio.playOnAwake = false;
audio.loop = false;
audio.outputAudioMixerGroup = outputAudioMixerGroup;
audio.bypassReverbZones = true;
}
}
[HarmonyPatch(typeof(InventoryGui), "Hide")]
[HarmonyPostfix]
public static void Postfix()
{
OnCancel();
}
[HarmonyPostfix]
[HarmonyPatch(typeof(InventoryGui), "UpdateItemDrag")]
public static void UpdateItemDrag_Postfix(InventoryGui __instance, ref GameObject ___m_dragGo, ItemData ___m_dragItem, Inventory ___m_dragInventory, int ___m_dragAmount)
{
//IL_0005: 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)
KeyboardShortcut value = TrashHotkey.Value;
if (((KeyboardShortcut)(ref value)).IsDown())
{
_clickedTrash = true;
}
if (_clickedTrash && ___m_dragItem != null && ___m_dragInventory.ContainsItem(___m_dragItem))
{
if (ConfirmDialog.Value)
{
if (!_confirmed)
{
ShowConfirmDialog(___m_dragItem, ___m_dragAmount);
_clickedTrash = false;
return;
}
_confirmed = false;
}
if (___m_dragAmount == ___m_dragItem.m_stack)
{
((Humanoid)Player.m_localPlayer).RemoveEquipAction(___m_dragItem);
((Humanoid)Player.m_localPlayer).UnequipItem(___m_dragItem, false);
___m_dragInventory.RemoveItem(___m_dragItem);
}
else
{
___m_dragInventory.RemoveItem(___m_dragItem, ___m_dragAmount);
}
if ((Object)(object)audio != (Object)null)
{
switch (Sfx.Value)
{
case SoundEffect.Random:
audio.PlayOneShot(sounds[Random.Range(0, 3)]);
break;
case SoundEffect.Sound1:
audio.PlayOneShot(sounds[0]);
break;
case SoundEffect.Sound2:
audio.PlayOneShot(sounds[1]);
break;
case SoundEffect.Sound3:
audio.PlayOneShot(sounds[2]);
break;
}
}
((object)__instance).GetType().GetMethod("SetupDragItem", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(__instance, new object[3] { null, null, 0 });
((object)__instance).GetType().GetMethod("UpdateCraftingPanel", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(__instance, new object[1] { false });
}
_clickedTrash = false;
}
public static void ShowConfirmDialog(ItemData item, int itemAmount)
{
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Expected O, but got Unknown
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Expected O, but got Unknown
if (!((Object)(object)InventoryGui.instance == (Object)null) && !((Object)(object)dialog != (Object)null))
{
dialog = Object.Instantiate<GameObject>(((Component)InventoryGui.instance.m_splitPanel).gameObject, ((Component)InventoryGui.instance).transform);
Button component = ((Component)dialog.transform.Find("win_bkg/Button_ok")).GetComponent<Button>();
((UnityEventBase)component.onClick).RemoveAllListeners();
((UnityEvent)component.onClick).AddListener(new UnityAction(OnConfirm));
((TMP_Text)((Component)component).GetComponentInChildren<TextMeshProUGUI>()).text = "Trash";
((Graphic)((Component)component).GetComponentInChildren<TextMeshProUGUI>()).color = new Color(1f, 0.2f, 0.1f);
Button component2 = ((Component)dialog.transform.Find("win_bkg/Button_cancel")).GetComponent<Button>();
((UnityEventBase)component2.onClick).RemoveAllListeners();
((UnityEvent)component2.onClick).AddListener(new UnityAction(OnCancel));
((Component)dialog.transform.Find("win_bkg/Slider")).gameObject.SetActive(false);
((TMP_Text)((Component)dialog.transform.Find("win_bkg/Text")).GetComponent<TextMeshProUGUI>()).text = Localization.instance.Localize(item.m_shared.m_name);
((Component)dialog.transform.Find("win_bkg/Icon_bkg/Icon")).GetComponent<Image>().sprite = item.GetIcon();
((TMP_Text)((Component)dialog.transform.Find("win_bkg/amount")).GetComponent<TextMeshProUGUI>()).text = itemAmount + "/" + item.m_shared.m_maxStackSize;
dialog.gameObject.SetActive(true);
}
}
public static void OnConfirm()
{
_confirmed = true;
if ((Object)(object)dialog != (Object)null)
{
Object.Destroy((Object)(object)dialog);
dialog = null;
}
TrashItem();
}
public static void OnCancel()
{
_confirmed = false;
if ((Object)(object)dialog != (Object)null)
{
Object.Destroy((Object)(object)dialog);
dialog = null;
}
}
public static void TrashItem()
{
Log("Trash Items clicked!");
if ((Object)(object)_gui == (Object)null)
{
LogErr("_gui is null");
return;
}
_clickedTrash = true;
((object)_gui).GetType().GetMethod("UpdateItemDrag", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(_gui, new object[0]);
}
}
public class TrashHandler : MonoBehaviour
{
private UIGroupHandler handler;
private void Awake()
{
handler = ((Component)this).GetComponent<UIGroupHandler>();
handler.SetActive(false);
}
private void Update()
{
if (ZInput.GetButtonDown("JoyButtonA") && handler.IsActive)
{
TrashItems.TrashItem();
typeof(InventoryGui).GetMethod("SetActiveGroup", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(InventoryGui.instance, new object[2] { 1, false });
}
}
}