Skip to content

Commit fbcdbef

Browse files
Abilities WIP
1 parent 900e623 commit fbcdbef

1 file changed

Lines changed: 94 additions & 0 deletions

File tree

Plugin.cs

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,25 @@ public NewRegion(RegionData region, int tier){
548548
}
549549
}
550550

551+
public class NewAbility
552+
{
553+
public static List<NewAbility> abilities = new List<NewAbility>();
554+
public Ability ability;
555+
public AbilityInfo info;
556+
public Type abilityBehaviour;
557+
public Texture tex;
558+
559+
public NewAbility(Ability ability, AbilityInfo info, Type abilityBehaviour, Texture tex)
560+
{
561+
this.ability = ability;
562+
this.info = info;
563+
this.abilityBehaviour = abilityBehaviour;
564+
this.tex = tex;
565+
NewAbility.abilities.Add(this);
566+
Plugin.Log.LogInfo($"Loaded custom ability {info.rulebookName}!");
567+
}
568+
}
569+
551570
[HarmonyPatch(typeof(LoadingScreenManager), "LoadGameData")]
552571
public class LoadingScreenManager_LoadGameData
553572
{
@@ -572,6 +591,16 @@ public static void Prefix()
572591
ScriptableObjectLoader<CardInfo>.allData = official.Concat(NewCard.cards).ToList();
573592
Plugin.Log.LogInfo($"Loaded custom cards into data");
574593
}
594+
if (ScriptableObjectLoader<AbilityInfo>.allData == null)
595+
{
596+
List<AbilityInfo> official = ScriptableObjectLoader<AbilityInfo>.AllData;
597+
foreach (NewAbility newAbility in NewAbility.abilities)
598+
{
599+
official.Add(newAbility.info);
600+
}
601+
ScriptableObjectLoader<AbilityInfo>.allData = official;
602+
Plugin.Log.LogInfo($"Loaded custom abilities into data");
603+
}
575604
}
576605
}
577606

@@ -654,4 +683,69 @@ public static void Prefix(ref RegionProgression ___instance)
654683
}
655684
}
656685
}
686+
687+
[HarmonyPatch(typeof(CardTriggerHandler), "AddAbility", new Type[] {typeof(Ability)})]
688+
public class CardTriggerHandler_AddAbility
689+
{
690+
public static bool Prefix(Ability ability, CardTriggerHandler __instance)
691+
{
692+
if ((int)ability < 99)
693+
{
694+
return true;
695+
}
696+
if ((!__instance.triggeredAbilities.Exists((Tuple<Ability, AbilityBehaviour> x) => x.Item1 == ability) || AbilitiesUtil.GetInfo(ability).canStack) && !AbilitiesUtil.GetInfo(ability).passive)
697+
{
698+
NewAbility newAbility = NewAbility.abilities.Find((NewAbility x) => x.ability == ability);
699+
Type type = newAbility.abilityBehaviour;
700+
Component baseC = (Component)__instance;
701+
AbilityBehaviour item = baseC.gameObject.GetComponent(type) as AbilityBehaviour;
702+
if (item == null)
703+
{
704+
item = baseC.gameObject.AddComponent(type) as AbilityBehaviour;
705+
}
706+
__instance.triggeredAbilities.Add(new Tuple<Ability, AbilityBehaviour>(ability, item));
707+
}
708+
return false;
709+
}
710+
}
711+
712+
[HarmonyPatch(typeof(AbilitiesUtil), "LoadAbilityIcon", new Type[] {typeof(string), typeof(bool), typeof(bool)})]
713+
public class AbilitiesUtil_LoadAbilityIcon
714+
{
715+
public static bool Prefix(string abilityName, CardTriggerHandler __instance, ref Texture __result)
716+
{
717+
int ability = 0;
718+
if (!int.TryParse(abilityName, out ability))
719+
{
720+
return true;
721+
}
722+
NewAbility newAbility = NewAbility.abilities.Find((NewAbility x) => x.ability == (Ability)ability);
723+
__result = newAbility.tex;
724+
return false;
725+
}
726+
}
727+
728+
[HarmonyPatch(typeof(AbilitiesUtil), "GetAbilities", new Type[] {typeof(bool), typeof(bool), typeof(int), typeof(int), typeof(AbilityMetaCategory)})]
729+
public class AbilitiesUtil_GetAbilities
730+
{
731+
public static void Postfix(bool learned, bool opponentUsable, int minPower, int maxPower, AbilityMetaCategory categoryCriteria, ref List<Ability> __result)
732+
{
733+
foreach (NewAbility newAbility in NewAbility.abilities)
734+
{
735+
AbilityInfo info = newAbility.info;
736+
bool flag = !opponentUsable || info.opponentUsable;
737+
bool flag2 = info.powerLevel >= minPower && info.powerLevel <= maxPower;
738+
bool flag3 = info.metaCategories.Contains(categoryCriteria);
739+
bool flag4 = true;
740+
if (learned)
741+
{
742+
flag4 = ProgressionData.LearnedAbility(info.ability);
743+
}
744+
if (flag && flag2 && flag3 && flag4)
745+
{
746+
__result.Add(newAbility.ability);
747+
}
748+
}
749+
}
750+
}
657751
}

0 commit comments

Comments
 (0)