Skip to content

Commit c019a75

Browse files
committed
Cleaned up NewSpecialAbility.cs
Added rulebook patching for special abilities Added SpecialAbilityIdentifier.cs Refactored StatIconInfo.cs to now point at LoadAbilityData
1 parent 805551c commit c019a75

5 files changed

Lines changed: 62 additions & 24 deletions

File tree

Models/NewSpecialAbility.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,24 @@ public class NewSpecialAbility
1212
public StatIconInfo statIconInfo;
1313
public Type abilityBehaviour;
1414
public Texture tex;
15-
public AbilityIdentifier id;
15+
public SpecialAbilityIdentifier id;
1616

1717
public NewSpecialAbility(
1818
StatIconInfo statIconInfo,
1919
Type abilityBehaviour,
2020
Texture tex,
21-
AbilityIdentifier id = null
21+
SpecialAbilityIdentifier id
2222
)
2323
{
24-
this.specialTriggeredAbility = (SpecialTriggeredAbility)100 + specialAbilities.Count;
24+
specialTriggeredAbility = (SpecialTriggeredAbility)26 + specialAbilities.Count;
2525
this.statIconInfo = statIconInfo;
2626
this.abilityBehaviour = abilityBehaviour;
2727
tex.filterMode = FilterMode.Point;
2828
this.tex = tex;
2929
this.id = id;
3030
specialAbilities.Add(this);
31-
// if (id != null)
32-
// {
33-
// id.id = specialTriggeredAbility;
34-
// }
31+
id.id = specialTriggeredAbility;
32+
this.id = id;
3533

3634
Plugin.Log.LogInfo($"Loaded custom special ability [{statIconInfo.rulebookName}]!");
3735
}

Models/SpecialAbilityIdentifier.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using System.Collections.Generic;
2+
using DiskCardGame;
3+
4+
namespace APIPlugin
5+
{
6+
public class SpecialAbilityIdentifier
7+
{
8+
private static List<SpecialAbilityIdentifier> ids = new();
9+
private string guid;
10+
private string name;
11+
public SpecialTriggeredAbility id;
12+
13+
private SpecialAbilityIdentifier(string guid, string name)
14+
{
15+
this.guid = guid;
16+
this.name = name;
17+
ids.Add(this);
18+
}
19+
20+
public static SpecialAbilityIdentifier GetID(string guid, string name)
21+
{
22+
return ids.Exists(x => x.guid == guid && x.name == name)
23+
? ids.Find(x => x.guid == guid && x.name == name)
24+
: new SpecialAbilityIdentifier(guid, name);
25+
}
26+
27+
public override string ToString()
28+
{
29+
return $"{guid}({name})";
30+
}
31+
}
32+
}

Patches/CardTriggerHandler.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
namespace API.Patches
88
{
9-
[HarmonyPatch(typeof(CardTriggerHandler), "AddAbility", new[] { typeof(Ability) })]
9+
[HarmonyPatch(typeof(CardTriggerHandler), "AddAbility", typeof(Ability))]
1010
public class CardTriggerHandler_AddAbility_Ability
1111
{
1212
public static bool Prefix(Ability ability, CardTriggerHandler __instance)
@@ -22,9 +22,9 @@ public static bool Prefix(Ability ability, CardTriggerHandler __instance)
2222
// return true if the ability is equal to the ability in the pair OR if ability cannot stack and is passive
2323
if (!__instance.triggeredAbilities.Exists(checkAbilityExists))
2424
{
25-
NewAbility newAbility = NewAbility.abilities.Find((NewAbility x) => x.ability == ability);
25+
NewAbility newAbility = NewAbility.abilities.Find(x => x.ability == ability);
2626
Type type = newAbility.abilityBehaviour;
27-
Component baseC = (Component)__instance;
27+
Component baseC = __instance;
2828
AbilityBehaviour item = baseC.gameObject.GetComponent(type) as AbilityBehaviour;
2929
if (item == null)
3030
{
@@ -43,24 +43,23 @@ private static bool AbilityCanStackAndIsNotPassive(Ability ability)
4343
}
4444
}
4545

46-
[HarmonyPatch(typeof(CardTriggerHandler), "AddAbility", new[] { typeof(SpecialTriggeredAbility) })]
46+
[HarmonyPatch(typeof(CardTriggerHandler), "AddAbility", typeof(SpecialTriggeredAbility))]
4747
public class CardTriggerHandler_AddAbility_SpecialTriggeredAbility
4848
{
4949
public static bool Prefix(SpecialTriggeredAbility ability, CardTriggerHandler __instance)
5050
{
5151
Plugin.Log.LogInfo($"Attempting to add spec ability to card trigger handler [{ability}]");
52-
if ((int)ability < 99)
52+
if ((int)ability < 25)
5353
{
5454
return true;
5555
}
56-
// return true if the ability is equal to the ability in the pair OR if ability cannot stack and is passive
5756
if (!__instance.specialAbilities.Exists(ab => ab.Item1 == ability))
5857
{
59-
Plugin.Log.LogInfo($"-> spec ability does not exist yet, adding");
58+
Plugin.Log.LogInfo("-> spec ability does not exist yet, adding");
6059
NewSpecialAbility newAbility = NewSpecialAbility.specialAbilities
6160
.Find(x => x.specialTriggeredAbility == ability);
6261
Type type = newAbility.abilityBehaviour;
63-
Component baseC = (Component)__instance;
62+
Component baseC = __instance;
6463
SpecialCardBehaviour item = baseC.gameObject.GetComponent(type) as SpecialCardBehaviour;
6564
if (item == null)
6665
{

Patches/Rulebook.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,20 @@ public static void Postfix(AbilityMetaCategory metaCategory, RuleBookInfo __inst
3535
__instance.FillAbilityPage,
3636
Localization.Translate("APPENDIX XII, SUBSECTION I - MOD ABILITIES {0}")));
3737
}
38-
38+
}
39+
}
40+
41+
if (NewSpecialAbility.specialAbilities.Count > 0)
42+
{
43+
foreach (PageRangeInfo pageRangeInfo in __instance.pageRanges)
44+
{
3945
// special abilities
4046
if (pageRangeInfo.type == PageRangeType.StatIcons)
4147
{
42-
List<int> customAbilities = NewAbility.abilities.Select(x => (int)x.ability).ToList();
48+
List<int> customAbilities = NewSpecialAbility.specialAbilities
49+
.Select(x => (int)x.statIconInfo.iconType).ToList();
50+
Plugin.Log.LogInfo(
51+
$"Number of custom abilities found to add to rulebook [{customAbilities.Count}]");
4352
int min = customAbilities.AsQueryable().Min();
4453
int max = customAbilities.AsQueryable().Max();
4554
PageRangeInfo pageRange = pageRangeInfo;
@@ -58,4 +67,4 @@ public static void Postfix(AbilityMetaCategory metaCategory, RuleBookInfo __inst
5867
}
5968
}
6069
}
61-
}
70+
}

Patches/StatIconInfo.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
1-
using System.Collections.Generic;
21
using APIPlugin;
32
using DiskCardGame;
43
using HarmonyLib;
54

65
namespace API.Patches
76
{
8-
[HarmonyPatch(typeof(StatIconInfo), "AllIconInfo", MethodType.Getter)]
7+
[HarmonyPatch(typeof(StatIconInfo), "LoadAbilityData")]
98
public class StatIconInfoPatch
109
{
1110
[HarmonyPostfix]
12-
static void Postfix(ref List<StatIconInfo> __result)
11+
static void Postfix()
1312
{
1413
foreach (var ability in NewSpecialAbility.specialAbilities)
1514
{
1615
// this is never being logged?
17-
APIPlugin.Plugin.Log.LogInfo($"Adding {ability.statIconInfo.name} in StatIconInfo");
18-
if (!__result.Exists(x => x == ability.statIconInfo)) {
19-
__result.Add(ability.statIconInfo);
16+
Plugin.Log.LogDebug($"Attempting to add {ability.specialTriggeredAbility} in StatIconInfo");
17+
if (!StatIconInfo.allIconInfo.Exists(x => x == ability.statIconInfo)) {
18+
Plugin.Log.LogInfo($"-> Adding {ability.specialTriggeredAbility} in StatIconInfo");
19+
StatIconInfo.allIconInfo.Add(ability.statIconInfo);
2020
}
2121
}
2222

0 commit comments

Comments
 (0)