diff --git a/Assets/Mods/Basic/Basic_Manifest.asset b/Assets/Mods/Basic/Basic_Manifest.asset index 9e13a9ce..bd8cee8e 100644 --- a/Assets/Mods/Basic/Basic_Manifest.asset +++ b/Assets/Mods/Basic/Basic_Manifest.asset @@ -52,6 +52,7 @@ MonoBehaviour: - CardData_Basic_Oblivion - CardData_Basic_CompoundPosion - CardData_Basic_Torture + - CardData_Basic_WoundDeterioration - CardData_Basic_LessRestoration - CardData_Basic_BattlefieldExperience - CardData_Basic_BodyAsShield diff --git a/Assets/Mods/Basic/Cards/Data/PlayerHeros/Assassin/CardData_Basic_Torture.asset b/Assets/Mods/Basic/Cards/Data/PlayerHeros/Assassin/CardData_Basic_Torture.asset index ecce19e3..5cec42ee 100644 --- a/Assets/Mods/Basic/Cards/Data/PlayerHeros/Assassin/CardData_Basic_Torture.asset +++ b/Assets/Mods/Basic/Cards/Data/PlayerHeros/Assassin/CardData_Basic_Torture.asset @@ -43,7 +43,7 @@ MonoBehaviour: Value: 1 index: 3 isKeyDuplicated: 0 - - Key: MagicNumber + - Key: BuffStack_Corrosion Value: 1 index: 4 isKeyDuplicated: 0 diff --git a/Assets/Mods/Basic/Cards/Data/PlayerHeros/Assassin/CardData_Basic_WoundDeterioration.asset b/Assets/Mods/Basic/Cards/Data/PlayerHeros/Assassin/CardData_Basic_WoundDeterioration.asset new file mode 100644 index 00000000..506fd478 --- /dev/null +++ b/Assets/Mods/Basic/Cards/Data/PlayerHeros/Assassin/CardData_Basic_WoundDeterioration.asset @@ -0,0 +1,74 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9a4129cdd7011ca46b83d8c17d9f3623, type: 3} + m_Name: CardData_Basic_WoundDeterioration + m_EditorClassIdentifier: Assembly-CSharp::Continentis.MainGame.Card.CardData + modName: Basic + className: WoundDeterioration + displayName: Card_Basic_WoundDeterioration_DisplayName + cardRarity: 20 + cardType: 20 + keywords: + - TargetSelf + cardSprite: {fileID: 21300000, guid: 38466aa09b7b3dc468a47c6ca7251524, type: 3} + cardLayoutTags: [] + functionText: Card_Basic_WoundDeterioration_FunctionText + cardDescription: + baseWeight: 1 + variableAttributes: + dictionaryList: + - Key: TargetCount + Value: 0 + index: 0 + isKeyDuplicated: 0 + - Key: StaminaCost + Value: 0 + index: 1 + isKeyDuplicated: 0 + - Key: ManaCost + Value: 0 + index: 2 + isKeyDuplicated: 0 + - Key: DrawCardAmount + Value: 1 + index: 3 + isKeyDuplicated: 0 + - Key: BuffStack_WD + Value: 1 + index: 4 + isKeyDuplicated: 0 + - Key: DamageCount + Value: 20 + index: 5 + isKeyDuplicated: 0 + - Key: BuffStack_Corrosion + Value: 4 + index: 6 + isKeyDuplicated: 0 + dividerPosProp: 0.5 + originalAttributes: + dictionaryList: [] + dividerPosProp: 0.5 + runtimeCurrentAttributes: + dictionaryList: [] + dividerPosProp: 0.5 + upgradeNode: + sourceCard: {fileID: 0} + isTerminalNode: 0 + isInfiniteUpgrade: 0 + maxUpgradeLevel: 0 + upgradeCards: [] + customDescriptions: [] + prefabRefs: [] + derivativeCardDataRefs: + - CardData_Basic_Strike + derivativeCharacterDataRefs: [] diff --git a/Assets/Mods/Basic/Cards/Data/PlayerHeros/Assassin/CardData_Basic_WoundDeterioration.asset.meta b/Assets/Mods/Basic/Cards/Data/PlayerHeros/Assassin/CardData_Basic_WoundDeterioration.asset.meta new file mode 100644 index 00000000..8eea0434 --- /dev/null +++ b/Assets/Mods/Basic/Cards/Data/PlayerHeros/Assassin/CardData_Basic_WoundDeterioration.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 53671f5089686bb4ea26feca7ad59b66 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mods/Basic/Cards/Scripts/Assassin/Torture.cs b/Assets/Mods/Basic/Cards/Scripts/Assassin/Torture.cs index 4838ae15..8d59ac75 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Assassin/Torture.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Assassin/Torture.cs @@ -18,7 +18,7 @@ namespace Continentis.Mods.Basic.Cards { if (target != user) { - CreateCharacterBuff(GetAttribute("MagicNumber")).Apply(target, user, this); + CreateCharacterBuff(GetAttribute("BuffStack_Corrosion")).Apply(target, user, this); } })); return mainGroup; diff --git a/Assets/Mods/Basic/Cards/Scripts/Assassin/WoundDeterioration.cs b/Assets/Mods/Basic/Cards/Scripts/Assassin/WoundDeterioration.cs new file mode 100644 index 00000000..af5e4623 --- /dev/null +++ b/Assets/Mods/Basic/Cards/Scripts/Assassin/WoundDeterioration.cs @@ -0,0 +1,22 @@ +using Continentis.MainGame.Card; +using Continentis.MainGame.Character; +using Continentis.MainGame.Commands; +using Continentis.Mods.Basic.Buffs; +using SLSFramework.General; +using System.Collections.Generic; + +namespace Continentis.Mods.Basic.Cards +{ + public class WoundDeterioration : CardLogicBase + { + protected override CommandBase PlayEffect(List targetList) + { + CommandGroup mainGroup = TargetListCommandGroup(targetList, + new Cmd_ParamFunction(0.05f, target => + { + CreateCharacterBuff(GetAttribute("BuffStack_WD")).Apply(target, user, this); + })); + return mainGroup; + } + } +} diff --git a/Assets/Mods/Basic/Cards/Scripts/Assassin/WoundDeterioration.cs.meta b/Assets/Mods/Basic/Cards/Scripts/Assassin/WoundDeterioration.cs.meta new file mode 100644 index 00000000..8042a586 --- /dev/null +++ b/Assets/Mods/Basic/Cards/Scripts/Assassin/WoundDeterioration.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 53d11ba7f91e98c46b6ff482a1809f74 \ No newline at end of file diff --git a/Assets/Mods/Basic/Characters/CombatBuffs/Assassin/WoundDeterioration.cs b/Assets/Mods/Basic/Characters/CombatBuffs/Assassin/WoundDeterioration.cs new file mode 100644 index 00000000..2e425d66 --- /dev/null +++ b/Assets/Mods/Basic/Characters/CombatBuffs/Assassin/WoundDeterioration.cs @@ -0,0 +1,34 @@ +using Continentis.MainGame; +using Continentis.MainGame.Character; +using UnityEngine; + +namespace Continentis.Mods.Basic.Buffs +{ + public class WoundDeterioration : CharacterCombatBuffBase + { + public WoundDeterioration(int stack) + { + Initialize(BuffType.Positive, BuffDispelLevel.Basic); + this.contentSubmodule = new ContentSubmodule(this) + .AddParameterGetter("Stack", () => unitedStackSubmodule.stackAmount.ToString()); + this.iconSubmodule = new IconSubmodule(this); + this.unitedStackSubmodule = new UnitedStackSubmodule(this, stack); + //TODO: When character damage exceed 20, apply corrision + //this.attachedCharacter.eventSubmodule.onFinishAttack.Add; + } + + public override bool OnBuffApply(out CharacterCombatBuffBase existingBuff) + { + MainGameManager.Instance.basePrefabs.GenerateInfoText(contentSubmodule.displayName, attachedCharacter.characterView); + + if (FindExistingSameBuff(out existingBuff)) + { + existingBuff.unitedStackSubmodule.PickHigherStack(this.unitedStackSubmodule); + existingBuff.actionCountSubmodule.PickHigherCount(this.actionCountSubmodule); + return false; + } + + return true; + } + } +} diff --git a/Assets/Mods/Basic/Characters/CombatBuffs/Assassin/WoundDeterioration.cs.meta b/Assets/Mods/Basic/Characters/CombatBuffs/Assassin/WoundDeterioration.cs.meta new file mode 100644 index 00000000..f422abfc --- /dev/null +++ b/Assets/Mods/Basic/Characters/CombatBuffs/Assassin/WoundDeterioration.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 7e968713121889d49844bbeb0f96246c \ No newline at end of file diff --git a/Assets/Mods/Basic/Characters/Data/CharacterData_Basic_Assassin.asset b/Assets/Mods/Basic/Characters/Data/CharacterData_Basic_Assassin.asset index 184d5dc4..9d7fd3a6 100644 --- a/Assets/Mods/Basic/Characters/Data/CharacterData_Basic_Assassin.asset +++ b/Assets/Mods/Basic/Characters/Data/CharacterData_Basic_Assassin.asset @@ -205,5 +205,6 @@ MonoBehaviour: - CardData_Basic_Torture - CardData_Basic_Torture - CardData_Basic_CompoundPosion + - CardData_Basic_WoundDeterioration hudDataRefs: - HUDData_Basic_Default diff --git a/Assets/Mods/Basic/Localization/Localization_Basic_AssassinBuffs.csv b/Assets/Mods/Basic/Localization/Localization_Basic_AssassinBuffs.csv new file mode 100644 index 00000000..95645844 --- /dev/null +++ b/Assets/Mods/Basic/Localization/Localization_Basic_AssassinBuffs.csv @@ -0,0 +1,3 @@ +Key,English,Simplified Chinese,Traditional Chinese,Japanese,Korean,Vietnamese,Thai +Buff_Basic_WoundDeterioration_DisplayName,Wound Deterioration,恶化伤口,,,,, +Buff_Basic_WoundDeterioration_FunctionText,TODO,你单次造成至少$ParameterInt("Damage")点的伤害时,额外给予$ParameterInt("BuffStack_Corrosion")层腐蚀,,,,, diff --git a/Assets/Mods/Basic/Localization/Localization_Basic_AssassinBuffs.csv.meta b/Assets/Mods/Basic/Localization/Localization_Basic_AssassinBuffs.csv.meta new file mode 100644 index 00000000..8e873263 --- /dev/null +++ b/Assets/Mods/Basic/Localization/Localization_Basic_AssassinBuffs.csv.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b07b620f4c7256843b55609e43977ced +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mods/Basic/Localization/Localization_Basic_AssassinCards.csv b/Assets/Mods/Basic/Localization/Localization_Basic_AssassinCards.csv index 6533b004..6f703c51 100644 --- a/Assets/Mods/Basic/Localization/Localization_Basic_AssassinCards.csv +++ b/Assets/Mods/Basic/Localization/Localization_Basic_AssassinCards.csv @@ -1,5 +1,7 @@ Key,English,Simplified Chinese,Traditional Chinese,Japanese,Korean,Vietnamese,Thai Card_Basic_Torture_DisplayName,Torture,折磨,,,,, -Card_Basic_Torture_FunctionText,Test Description,抽$Attribute("DrawCardAmount")张牌,\n给予所有敌人$Attribute("MagicNumber")层腐蚀。,,,,, +Card_Basic_Torture_FunctionText,Test Description,抽$Attribute("DrawCardAmount")张牌,\n给予所有敌人$Attribute("BuffStack_Corrosion")层腐蚀。,,,,, Card_Basic_CompoundPoison_DisplayName,Compound Poison,混合毒药,,,,, Card_Basic_CompoundPoison_FunctionText,Test Description,给予$Attribute("BuffStack_Weak")层虚弱。\n目标每有一种负面效果,给予$Attribute("BuffStack_Corrosion")层腐蚀。,,,,, +Card_Basic_WoundDeterioration_DisplayName,Compound Poison,恶化伤口,,,,, +Card_Basic_WoundDeterioration_FunctionText,Test Description,单次造成至少$Attribute("DamageCount")点伤害时,额外给予$Attribute("BuffStack_Corrosion")层腐蚀。,,,,, diff --git a/Assets/Scenes/MenuScene.unity b/Assets/Scenes/MenuScene.unity index 15cfbdf3..131dd4b9 100644 --- a/Assets/Scenes/MenuScene.unity +++ b/Assets/Scenes/MenuScene.unity @@ -482,6 +482,36 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 222420d8b6807ad458d012a439512436, type: 3} m_Name: m_EditorClassIdentifier: Assembly-CSharp::SoulliesFramework.UModAssistance.ModBrowser + OnModLoadBegin: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 777656620} + m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + OnModLoadEnd: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 777656620} + m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 persistent: 1 loadButton: {fileID: 568302140} modButtonContainer: {fileID: 244773003} @@ -522,7 +552,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0.000061035156} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 1} --- !u!114 &244773004 @@ -730,6 +760,349 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: -10, y: -10} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &439682736 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 439682737} + - component: {fileID: 439682739} + - component: {fileID: 439682742} + - component: {fileID: 439682741} + - component: {fileID: 439682740} + m_Layer: 5 + m_Name: Alert + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &439682737 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 439682736} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 664832659} + m_Father: {fileID: 761676897} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &439682739 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 439682736} + m_CullTransparentMesh: 1 +--- !u!225 &439682740 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 439682736} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 0 + m_BlocksRaycasts: 0 + m_IgnoreParentGroups: 0 +--- !u!114 &439682741 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 439682736} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d0390bd8b8ffd640b34fe25065ff1df, type: 3} + m_Name: + m_EditorClassIdentifier: DOTweenPro.Scripts::DG.Tweening.DOTweenAnimation + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 1 + hasOnTweenCreated: 1 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 439682736} + m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + onTweenCreated: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 439682740} + m_TargetAssemblyTypeName: UnityEngine.CanvasGroup, UnityEngine + m_MethodName: set_alpha + m_Mode: 4 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 1 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + onRewind: + m_PersistentCalls: + m_Calls: [] + targetIsSelf: 1 + targetGO: {fileID: 0} + tweenTargetIsTargetGO: 1 + delay: 0 + duration: 1 + easeType: 6 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + loopType: 0 + loops: 1 + id: + isRelative: 0 + isFrom: 0 + isIndependentUpdate: 0 + autoKill: 1 + autoGenerate: 0 + isActive: 1 + isValid: 1 + target: {fileID: 439682740} + animationType: 7 + targetType: 2 + forcedTargetType: 0 + autoPlay: 0 + useTargetAsV3: 0 + endValueFloat: 0 + endValueV3: {x: 0, y: 0, z: 0} + endValueV2: {x: 0, y: 0} + endValueColor: {r: 1, g: 1, b: 1, a: 1} + endValueString: + endValueRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + endValueTransform: {fileID: 0} + optionalBool0: 0 + optionalBool1: 0 + optionalFloat0: 0 + optionalInt0: 0 + optionalRotationMode: 0 + optionalScrambleMode: 0 + optionalShakeRandomnessMode: 0 + optionalString: +--- !u!114 &439682742 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 439682736} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 40306178, guid: aa0b1eebb5db27a419fa4564bbe5c9c5, type: 3} + m_Name: + m_EditorClassIdentifier: DOTweenPro.dll::DG.Tweening.DOTweenVisualManager + preset: 0 + onEnableBehaviour: 1 + onDisableBehaviour: 0 +--- !u!1 &454543660 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 454543661} + - component: {fileID: 454543663} + - component: {fileID: 454543662} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &454543661 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 454543660} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 777656621} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &454543662 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 454543660} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Loading... + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 79.52 + m_fontSizeBase: 79.52 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &454543663 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 454543660} + m_CullTransparentMesh: 1 --- !u!1 &568302138 GameObject: m_ObjectHideFlags: 0 @@ -851,6 +1224,124 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 568302138} m_CullTransparentMesh: 1 +--- !u!1 &664832658 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 664832659} + - component: {fileID: 664832663} + - component: {fileID: 664832662} + - component: {fileID: 664832661} + - component: {fileID: 664832660} + m_Layer: 5 + m_Name: Alert + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &664832659 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 664832658} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1914150233} + m_Father: {fileID: 439682737} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 120.89} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &664832660 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 664832658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.VerticalLayoutGroup + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 20 + m_Bottom: 20 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &664832661 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 664832658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.ContentSizeFitter + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &664832662 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 664832658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.7882353} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &664832663 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 664832658} + m_CullTransparentMesh: 1 --- !u!1 &760556662 GameObject: m_ObjectHideFlags: 0 @@ -1068,6 +1559,8 @@ RectTransform: m_Children: - {fileID: 760556663} - {fileID: 106851544} + - {fileID: 777656621} + - {fileID: 439682737} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -1075,6 +1568,82 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0, y: 0} +--- !u!1 &777656620 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 777656621} + - component: {fileID: 777656623} + - component: {fileID: 777656622} + m_Layer: 5 + m_Name: Pause + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &777656621 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 777656620} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 454543661} + m_Father: {fileID: 761676897} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &777656622 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 777656620} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.70980394} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &777656623 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 777656620} + m_CullTransparentMesh: 1 --- !u!1 &1073687563 GameObject: m_ObjectHideFlags: 0 @@ -1198,6 +1767,7 @@ GameObject: - component: {fileID: 1469191072} - component: {fileID: 1469191071} - component: {fileID: 1469191070} + - component: {fileID: 1469191073} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -1279,6 +1849,50 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1469191073 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1469191069} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 + m_Version: 2 --- !u!1 &1504064933 GameObject: m_ObjectHideFlags: 0 @@ -1981,6 +2595,157 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1809795625} m_CullTransparentMesh: 0 +--- !u!1 &1914150232 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1914150233} + - component: {fileID: 1914150235} + - component: {fileID: 1914150234} + - component: {fileID: 1914150236} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1914150233 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1914150232} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 664832659} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 960.00006, y: -60.445} + m_SizeDelta: {x: 500.07, y: 80.89} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1914150234 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1914150232} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Mod load done. + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 72.4 + m_fontSizeBase: 72.4 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1914150235 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1914150232} + m_CullTransparentMesh: 1 +--- !u!114 &1914150236 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1914150232} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.ContentSizeFitter + m_HorizontalFit: 2 + m_VerticalFit: 2 --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/ScriptExtensions/UModAssistance/ModBrowser.cs b/Assets/Scripts/ScriptExtensions/UModAssistance/ModBrowser.cs index 2ec2d511..2697ef7a 100644 --- a/Assets/Scripts/ScriptExtensions/UModAssistance/ModBrowser.cs +++ b/Assets/Scripts/ScriptExtensions/UModAssistance/ModBrowser.cs @@ -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 modTabs = new List(); public List selectedMods = new List(); - + 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(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(); modTab.Initialize(mod); modTabs.Add(modTab); } - + private void GetAllSelectedMods() { selectedMods = modTabs.FindAll(t => t.isSelected).ConvertAll(t => t.modInfo); diff --git a/Assets/Scripts/ScriptExtensions/UModAssistance/ModManager.cs b/Assets/Scripts/ScriptExtensions/UModAssistance/ModManager.cs index 7b4d2c5e..0ca9ce0a 100644 --- a/Assets/Scripts/ScriptExtensions/UModAssistance/ModManager.cs +++ b/Assets/Scripts/ScriptExtensions/UModAssistance/ModManager.cs @@ -3,10 +3,12 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text.RegularExpressions; +using System.Threading.Tasks; using SLSFramework.General; using UMod; using UMod.Scripting; using UnityEngine; +using UnityEngine.ResourceManagement.Exceptions; using Object = UnityEngine.Object; namespace SLSFramework.UModAssistance @@ -21,6 +23,23 @@ namespace SLSFramework.UModAssistance Debug.Log($"Mod '{modName}' loaded successfully."); return host; } + + public static async Task LoadAsync(IModInfo modInfo) + { + string modName = modInfo.NameInfo.ModName; + var host = Mod.LoadAsync(Mod.DefaultDirectory.GetModPath(modName)); + while (!host.IsDone) + { + await Task.Yield(); + } + if (!host.IsSuccessful) + { + throw new OperationException($"Failed to load mod '{modName}'"); + } + LoadedMods.Add(modName, host.Result); + Debug.Log($"Mod '{modName}' async loaded successfully."); + return host.Result; + } } public static partial class ModManager