Files
Continentis/Assets/Scripts/ScriptExtensions/UModAssistance/ModBrowser.cs

106 lines
3.6 KiB
C#
Raw Normal View History

2025-10-23 00:49:44 -04:00
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
2025-10-23 00:49:44 -04:00
using Continentis.MainGame;
using Continentis.MainGame.Card;
using Continentis.MainGame.Character;
using Continentis.MainGame.Equipment;
using Continentis.MainGame.Rules;
using Continentis.Mods;
using I2.Loc;
using SLSFramework.General;
using UMod;
using UnityEngine;
using UnityEngine.Events;
2025-10-23 00:49:44 -04:00
using UnityEngine.UI;
namespace SLSFramework.UModAssistance
{
public partial class ModBrowser : MonoBehaviour
{
#region Inspector
public UnityEvent OnModLoadBegin;
public UnityEvent OnModLoadEnd;
#endregion
2025-10-23 00:49:44 -04:00
// Public
public bool persistent = true;
public Button loadButton;
public RectTransform modButtonContainer;
public GameObject modLoadTabPrefab;
public List<ModLoadTab> modTabs = new List<ModLoadTab>();
public List<IModInfo> selectedMods = new List<IModInfo>();
2025-10-23 00:49:44 -04:00
private void Awake()
{
#if UNITY_EDITOR
Mod.DefaultDirectory = new ModDirectory(Application.dataPath + "/ExportedMods");
#else
Mod.DefaultDirectory = new ModDirectory(Application.dataPath + "/Mods");
#endif
loadButton.onClick.AddListener(OnLoadClicked);
GenerateUIList();
}
2025-10-23 00:49:44 -04:00
}
public partial class ModBrowser
{
private async void OnLoadClicked()
2025-10-23 00:49:44 -04:00
{
OnModLoadBegin?.Invoke();
2025-10-23 00:49:44 -04:00
GetAllSelectedMods();
foreach (IModInfo mod in selectedMods)
{
ModHost host = await ModManager.LoadAsync(mod);
2025-10-26 00:23:50 -04:00
ModManager.RegisterTypesFromMod(host, typeof(RulesCollectionBase));
2025-11-15 09:08:36 -05:00
ModManager.RegisterTypesFromMod(host, typeof(CharacterLogicBase));
2025-10-23 00:49:44 -04:00
ModManager.RegisterTypesFromMod(host, typeof(CardLogicBase));
ModManager.RegisterTypesFromMod(host, typeof(EquipmentBase));
ModManager.RegisterTypesFromMod(host, typeof(CardCombatBuffBase));
ModManager.RegisterTypesFromMod(host, typeof(CharacterCombatBuffBase));
2025-10-23 00:49:44 -04:00
string manifestName = host.CurrentMod.NameInfo.ModName + "_Manifest";
ModManifest manifest = host.Assets.Load<ModManifest>(manifestName);
manifest.SaveToDatabase(host);
List<TextAsset> localizationFiles = manifest.localizationFiles;
foreach (TextAsset localizationFile in localizationFiles)
{
LanguageSourceData sourceData = new LanguageSourceData();
sourceData.Import_CSV(string.Empty, localizationFile.text, eSpreadsheetUpdateMode.Merge, ',');
LocalizationManager.AddSource(sourceData);
}
}
2025-10-23 00:49:44 -04:00
LocalizationManager.LocalizeAll();
OnModLoadEnd?.Invoke();
2025-10-23 00:49:44 -04:00
}
2025-10-23 00:49:44 -04:00
private void GenerateUIList()
{
// Destroy all cells
modButtonContainer.DestroyAllChildren();
// Create new cells
foreach (IModInfo info in Mod.DefaultDirectory.GetMods())// ModDirectory.GetMods())
{
CreateUICell(info, modButtonContainer);
}
}
2025-10-23 00:49:44 -04:00
private void CreateUICell(IModInfo mod, RectTransform container)
{
ModLoadTab modTab = Instantiate(modLoadTabPrefab, container).GetComponent<ModLoadTab>();
modTab.Initialize(mod);
modTabs.Add(modTab);
}
2025-10-23 00:49:44 -04:00
private void GetAllSelectedMods()
{
selectedMods = modTabs.FindAll(t => t.isSelected).ConvertAll(t => t.modInfo);
}
}
}