Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/LE_LevelEditor/Extensions/LE_FileSelectionHelpers.cs
2026-02-21 16:45:37 +08:00

91 lines
3.7 KiB
C#

using System;
using System.IO;
using LE_LevelEditor.Core;
using LE_LevelEditor.Example;
using LE_LevelEditor.UI;
using LapinerTools.uMyGUI;
using UnityEngine;
namespace LE_LevelEditor.Extensions
{
public static class LE_FileSelectionHelpers
{
public const string POPUP_NAME = "fileselection";
public const string POPUP_LOADING = "loading";
public const string POPUP_TEXT = "text";
public static void SelectLevel(MonoBehaviour p_worker, string p_popupTitle, string p_popupText, Action<int, LE_ExtensionInterface.FileSelectionExtensionLoader.LevelFile[]> p_onSelectedCallback)
{
LE_ExtensionInterface.FileSelectionExtensionLoader fileSelectionInstance = LE_ExtensionInterface.FileSelectionInstance;
p_worker.StartCoroutine(fileSelectionInstance.LevelDB.GetLevelListAsync(delegate(LE_ExtensionInterface.FileSelectionExtensionLoader.LevelFile[] p_levelFiles)
{
if (uMyGUI_PopupManager.Instance != null)
{
string[] levelNames = LE_ExtensionInterface.FileSelectionExtensionLoader.LevelFile.GetLevelNames(p_levelFiles);
string[] levelIconPaths = LE_ExtensionInterface.FileSelectionExtensionLoader.LevelFile.GetLevelIconPaths(p_levelFiles);
((LE_PopupFileSelection)uMyGUI_PopupManager.Instance.ShowPopup("fileselection")).SetFiles(levelNames, levelIconPaths, delegate(int p_selectedIndex)
{
p_onSelectedCallback(p_selectedIndex, p_levelFiles);
}, null, true).SetText(p_popupTitle, p_popupText).ShowButton("close");
}
}));
}
public static Texture2D DownscaleTexture(Texture2D p_tex, int p_maxHeightBeforeDownscale, int p_maxHeightAfterDownscale)
{
Texture2D texture2D = p_tex;
if (p_tex.height > p_maxHeightBeforeDownscale)
{
Texture2D texture2D2 = new Texture2D(p_tex.width, p_tex.height, p_tex.format, true, true);
texture2D2.SetPixels(p_tex.GetPixels());
texture2D2.Apply(true);
int i;
for (i = 1; (int)((float)p_tex.height / Mathf.Pow(2f, i)) > p_maxHeightAfterDownscale; i++)
{
}
texture2D = new Texture2D((int)((float)p_tex.width / Mathf.Pow(2f, i)), (int)((float)p_tex.height / Mathf.Pow(2f, i)), texture2D2.format, false, true);
texture2D.SetPixels(texture2D2.GetPixels(i));
texture2D.Apply();
UnityEngine.Object.Destroy(texture2D2);
}
return texture2D;
}
public static void SaveLevel(string p_levelDataFilePath, string p_levelIconFileName, byte[] p_levelData, byte[] p_levelMeta, int p_removedDuplicatesCount)
{
Action<string> action = delegate(string p_infoText)
{
if (uMyGUI_PopupManager.Instance != null)
{
if (p_removedDuplicatesCount > 0)
{
string text = p_infoText;
p_infoText = text + "\n'" + p_removedDuplicatesCount + "' duplicate object(s) removed before saving\n(duplicate = same: object, position, rotation, scale).";
}
((uMyGUI_PopupText)uMyGUI_PopupManager.Instance.ShowPopup("text")).SetText("Level Saved", p_infoText).ShowButton("ok");
}
};
LE_SaveLoad.LevelMetaData levelMetaData = LE_SaveLoad.LoadLevelMetaFromByteArray(p_levelMeta, true);
if (levelMetaData.Icon != null)
{
Texture2D texture2D = DownscaleTexture(levelMetaData.Icon, 255, 128);
string p_filePath = Path.Combine(FisheryEditor_LoadSave.GetSaveFolderPath(), p_levelIconFileName);
SaveToFile(p_filePath, texture2D.EncodeToPNG());
UnityEngine.Object.Destroy(levelMetaData.Icon);
UnityEngine.Object.Destroy(texture2D);
}
action(ExampleGame_LoadSave.SaveByFilePath(p_levelDataFilePath, p_levelData, p_levelMeta));
}
public static void SaveToFile(string p_filePath, byte[] p_fileContents)
{
using (FileStream fileStream = File.Open(p_filePath, FileMode.Create))
{
fileStream.Write(p_fileContents, 0, p_fileContents.Length);
}
}
}
}