1
0
mirror of https://github.com/soarqin/DSP_Mods.git synced 2025-12-08 22:13:30 +08:00
Files
DSP_Mods/CompressSave/PatchUILoadGame.cs
2023-09-26 21:19:46 +08:00

83 lines
3.1 KiB
C#

using System.Linq;
using HarmonyLib;
using UnityEngine;
using UnityEngine.UI;
namespace CompressSave;
class PatchUILoadGame
{
static UIButton _decompressButton;
[HarmonyPatch(typeof(UILoadGameWindow), "OnSelectedChange"), HarmonyPostfix]
private static void OnSelectedChange(UILoadGameWindow __instance)
{
var selected = __instance.selected;
var compressedType = SaveUtil.SaveGetCompressType(selected == null ? null : selected.saveName);
var prop3Text = __instance.prop3Text;
prop3Text.text = compressedType switch
{
CompressionType.LZ4 => "(LZ4)" + prop3Text.text,
CompressionType.Zstd => "(ZSTD)" + prop3Text.text,
_ => "(N)" + prop3Text.text
};
if (!_decompressButton) return;
_decompressButton.button.interactable = compressedType != CompressionType.None;
_decompressButton.gameObject.SetActive(compressedType != CompressionType.None);
}
[HarmonyPatch(typeof(UILoadGameWindow), "_OnOpen"), HarmonyPostfix]
static void _OnOpen(UILoadGameWindow __instance)
{
if (_decompressButton) return;
var loadButton = __instance.loadButton;
var created = false;
var gameObj = __instance.transform.Find("button-decompress")?.gameObject;
if (gameObj == null)
{
gameObj = Object.Instantiate(loadButton.gameObject, loadButton.transform.parent);
created = true;
}
_decompressButton = gameObj.GetComponent<UIButton>();
if (created)
{
var rtrans = (RectTransform)__instance.loadSandboxGroup.transform;
var pos = rtrans.anchoredPosition3D;
rtrans.anchoredPosition3D = new Vector3(pos.x - 230, pos.y, pos.z);
_decompressButton.gameObject.name = "button-decompress";
rtrans = (RectTransform)_decompressButton.transform;
pos = rtrans.anchoredPosition3D;
rtrans.anchoredPosition3D = new Vector3(pos.x - 180, pos.y, pos.z);
_decompressButton.button.image.color = new Color32(0, 0xf4, 0x92, 0x77);
var textTrans = _decompressButton.transform.Find("button-text");
var text = textTrans.GetComponent<Text>();
text.text = "Decompress".Translate();
var localizer = textTrans.GetComponent<Localizer>();
if (localizer)
{
localizer.stringKey = "Decompress";
localizer.translation = "Decompress".Translate();
}
_decompressButton.onClick += _ =>
{
if (!SaveUtil.DecompressSave(__instance.selected.saveName, out var newfileName)) return;
__instance.RefreshList();
__instance.selected = __instance.entries.First(e => e.saveName == newfileName);
};
}
_decompressButton.button.interactable = false;
_decompressButton.gameObject.SetActive(false);
}
public static void OnDestroy()
{
if (_decompressButton)
Object.Destroy(_decompressButton.gameObject);
_decompressButton = null;
}
}