Async load mod, Assassin_WoundDeterioration(unfinished)

This commit is contained in:
FrazeRIP
2025-11-07 01:46:56 -06:00
parent e27ddb6a07
commit 3f1e04dee7
16 changed files with 966 additions and 16 deletions

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Continentis.MainGame;
using Continentis.MainGame.Card;
using Continentis.MainGame.Character;
@@ -10,12 +11,19 @@ using I2.Loc;
using SLSFramework.General;
using UMod;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
namespace SLSFramework.UModAssistance
{
public partial class ModBrowser : MonoBehaviour
{
#region Inspector
public UnityEvent OnModLoadBegin;
public UnityEvent OnModLoadEnd;
#endregion
// Public
public bool persistent = true;
public Button loadButton;
@@ -23,7 +31,7 @@ namespace SLSFramework.UModAssistance
public GameObject modLoadTabPrefab;
public List<ModLoadTab> modTabs = new List<ModLoadTab>();
public List<IModInfo> selectedMods = new List<IModInfo>();
private void Awake()
{
#if UNITY_EDITOR
@@ -34,25 +42,26 @@ namespace SLSFramework.UModAssistance
loadButton.onClick.AddListener(OnLoadClicked);
GenerateUIList();
}
}
public partial class ModBrowser
{
private void OnLoadClicked()
private async void OnLoadClicked()
{
OnModLoadBegin?.Invoke();
GetAllSelectedMods();
foreach (IModInfo mod in selectedMods)
{
ModHost host = ModManager.LoadMod(mod);
ModHost host = await ModManager.LoadAsync(mod);
ModManager.RegisterTypesFromMod(host, typeof(RulesCollectionBase));
ModManager.RegisterTypesFromMod(host, typeof(CharacterBase));
ModManager.RegisterTypesFromMod(host, typeof(CardLogicBase));
ModManager.RegisterTypesFromMod(host, typeof(EquipmentBase));
ModManager.RegisterTypesFromMod(host,typeof(CardCombatBuffBase));
ModManager.RegisterTypesFromMod(host,typeof(CharacterCombatBuffBase));
ModManager.RegisterTypesFromMod(host, typeof(CardCombatBuffBase));
ModManager.RegisterTypesFromMod(host, typeof(CharacterCombatBuffBase));
string manifestName = host.CurrentMod.NameInfo.ModName + "_Manifest";
ModManifest manifest = host.Assets.Load<ModManifest>(manifestName);
manifest.SaveToDatabase(host);
@@ -65,10 +74,11 @@ namespace SLSFramework.UModAssistance
LocalizationManager.AddSource(sourceData);
}
}
LocalizationManager.LocalizeAll();
OnModLoadEnd?.Invoke();
}
private void GenerateUIList()
{
// Destroy all cells
@@ -80,14 +90,14 @@ namespace SLSFramework.UModAssistance
CreateUICell(info, modButtonContainer);
}
}
private void CreateUICell(IModInfo mod, RectTransform container)
{
ModLoadTab modTab = Instantiate(modLoadTabPrefab, container).GetComponent<ModLoadTab>();
modTab.Initialize(mod);
modTabs.Add(modTab);
}
private void GetAllSelectedMods()
{
selectedMods = modTabs.FindAll(t => t.isSelected).ConvertAll(t => t.modInfo);