PVZFusionTranslation/MelonLoader/ModFeatures.cs
2026-03-29 04:18:29 -04:00

89 lines
No EOL
2.1 KiB
C#

//#if DEBUG
using PvZ_Fusion_Translator.AssetStore;
using PvZ_Fusion_Translator.Patches.Modes.Super_Editor;
using UnityEngine;
namespace PvZ_Fusion_Translator
{
public static class ModFeatures
{
public enum ModType
{
ReloadStrings,
ReloadTextures,
SwapLevelData
}
private class ModFeature
{
public string Name { get; private set; }
public ModType ModType { get; private set; }
public KeyCode KeyCode { get; private set; }
public bool IsActive { get; set; }
public ModFeature(string Name, ModType ModType, KeyCode KeyCode, bool defaultValue = false)
{
this.Name = Name;
this.ModType = ModType;
this.KeyCode = KeyCode;
this.IsActive = defaultValue;
}
public void ToggleFeature()
{
if (this.ModType == ModType.ReloadStrings)
{
StringStore.Reload();
Core.ShowToast("Strings Reloaded!");
return;
}
if (this.ModType == ModType.ReloadTextures)
{
TextureStore.Reload();
Core.ShowToast("Textures Reloaded!");
return;
}
if(this.ModType == ModType.SwapLevelData)
{
CustomLevelMenu_Patch.SwapLevelData();
string toast = (CustomLevelMenu_Patch.useLocal) ? "Using Local Data..." : "Using Online Data...";
Core.ShowToast(toast);
return;
}
}
}
private static Dictionary<ModType, ModFeature> featureLists = new()
{
{ModType.ReloadStrings,new ModFeature("Reload Strings",ModType.ReloadStrings,KeyCode.Home, true)},
{ModType.ReloadTextures,new ModFeature("Reload Textures",ModType.ReloadTextures,KeyCode.End, true)},
{ModType.SwapLevelData,new ModFeature("Swap Level Data Type",ModType.SwapLevelData,KeyCode.PageUp, true)},
};
public static void ToggleFeature(ModType ModType)
{
if (!featureLists.ContainsKey(ModType))
return;
featureLists[ModType].ToggleFeature();
}
public static void OnLateUpdate()
{
foreach (var (type, feature) in featureLists)
{
if (feature.KeyCode != KeyCode.None && Enum.IsDefined(typeof(KeyCode), feature.KeyCode))
{
if (Input.GetKeyDown(feature.KeyCode))
{
feature.ToggleFeature();
}
}
}
}
}
}
//#endif