Skip to content

Commit e273168

Browse files
committed
feat: multi callback unit and effect units support in recipes
1 parent 12566bd commit e273168

File tree

7 files changed

+200
-116
lines changed

7 files changed

+200
-116
lines changed

ModiBuff/ModiBuff/Core/Modifier/Creation/Generation/ModifierGenerator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ public ModifierGenerator(in ModifierRecipeData data)
8585
_timeComponentCount++;
8686

8787
_modifierEffectsCreator = new ModifierEffectsCreator(data.EffectWrappers, data.RemoveEffectWrapper,
88-
data.DispelRegisterWrapper, data.CallbackUnitRegisterWrapper, data.CallbackEffectRegisterWrappers,
89-
data.CallbackEffectUnitsRegisterWrapper);
88+
data.DispelRegisterWrapper, data.CallbackUnitRegisterWrappers, data.CallbackEffectRegisterWrappers,
89+
data.CallbackEffectUnitsRegisterWrappers);
9090

9191
if (HasApplyChecks)
9292
{

ModiBuff/ModiBuff/Core/Modifier/Creation/Recipe/EffectOn.cs

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,15 @@ public enum EffectOn
1313
CallbackUnit = 16,
1414
CallbackEffect = 32,
1515
CallbackEffectUnits = 64,
16-
CallbackEffect2 = 128,
17-
CallbackEffect3 = 256,
18-
CallbackEffect4 = 512,
16+
CallbackUnit2 = 128,
17+
CallbackUnit3 = 256,
18+
CallbackUnit4 = 512,
19+
CallbackEffect2 = 1024,
20+
CallbackEffect3 = 2048,
21+
CallbackEffect4 = 4096,
22+
CallbackEffectUnits2 = 8192,
23+
CallbackEffectUnits3 = 16384,
24+
CallbackEffectUnits4 = 32768,
1925
}
2026

2127
public static class EffectOnExtensions
@@ -25,12 +31,28 @@ public static class EffectOnExtensions
2531

2632
public static class EffectOnCallbackEffectData
2733
{
34+
public static readonly EffectOn[] AllCallbackUnitData =
35+
{
36+
EffectOn.CallbackUnit,
37+
EffectOn.CallbackUnit2,
38+
EffectOn.CallbackUnit3,
39+
EffectOn.CallbackUnit4,
40+
};
41+
2842
public static readonly EffectOn[] AllCallbackEffectData =
2943
{
3044
EffectOn.CallbackEffect,
3145
EffectOn.CallbackEffect2,
3246
EffectOn.CallbackEffect3,
3347
EffectOn.CallbackEffect4,
3448
};
49+
50+
public static readonly EffectOn[] AllCallbackEffectUnitsData =
51+
{
52+
EffectOn.CallbackEffectUnits,
53+
EffectOn.CallbackEffectUnits2,
54+
EffectOn.CallbackEffectUnits3,
55+
EffectOn.CallbackEffectUnits4,
56+
};
3557
}
3658
}

ModiBuff/ModiBuff/Core/Modifier/Creation/Recipe/ModifierEffectsCreator.cs

Lines changed: 96 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,18 @@ public sealed class ModifierEffectsCreator
1212
private readonly EffectWrapper[] _savableEffectsWrappers;
1313
private readonly EffectWrapper _removeEffectWrapper;
1414
private readonly EffectWrapper _dispelRegisterWrapper;
15-
private readonly EffectWrapper _callbackUnitRegisterWrapper;
15+
private readonly EffectWrapper[] _callbackUnitRegisterWrappers;
1616
private readonly EffectWrapper[] _callbackEffectRegisterWrappers;
17-
private readonly EffectWrapper _callbackEffectUnitsRegisterWrapper;
17+
private readonly EffectWrapper[] _callbackEffectUnitsRegisterWrappers;
1818

1919
private IRevertEffect[] _revertEffects;
2020
private IEffect[] _initEffects;
2121
private IEffect[] _intervalEffects;
2222
private IEffect[] _durationEffects;
2323
private IStackEffect[] _stackEffects;
24-
private IEffect[] _callbackUnitEffects;
24+
private IEffect[][] _callbackUnitEffects;
2525
private IEffect[][] _callbackEffectEffects;
26-
private IEffect[] _callbackEffectUnitsEffects;
26+
private IEffect[][] _callbackEffectUnitsEffects;
2727

2828
private int _revertEffectsIndex,
2929
_initEffectsIndex,
@@ -33,22 +33,28 @@ public sealed class ModifierEffectsCreator
3333
_callbackUnitEffectsIndex,
3434
_callbackEffectEffectsIndex,
3535
_callbackEffectUnitsEffectsIndex,
36+
_callbackUnitEffectsIndex2,
37+
_callbackUnitEffectsIndex3,
38+
_callbackUnitEffectsIndex4,
3639
_callbackEffectEffectsIndex2,
3740
_callbackEffectEffectsIndex3,
38-
_callbackEffectEffectsIndex4;
41+
_callbackEffectEffectsIndex4,
42+
_callbackEffectUnitsEffectsIndex2,
43+
_callbackEffectUnitsEffectsIndex3,
44+
_callbackEffectUnitsEffectsIndex4;
3945

4046
public ModifierEffectsCreator(List<EffectWrapper> effectWrappers, EffectWrapper removeEffectWrapper,
41-
EffectWrapper dispelRegisterWrapper, EffectWrapper callbackUnitRegisterWrapper,
42-
EffectWrapper[] callbackEffectRegisterWrappers, EffectWrapper callbackEffectUnitsRegisterWrapper)
47+
EffectWrapper dispelRegisterWrapper, EffectWrapper[] callbackUnitRegisterWrappers,
48+
EffectWrapper[] callbackEffectRegisterWrappers, EffectWrapper[] callbackEffectUnitsRegisterWrappers)
4349
{
4450
var effectsWithModifierInfoWrappers = new List<EffectWrapper>();
4551
var savableEffectsWrappers = new List<EffectWrapper>();
4652
_effectWrappers = effectWrappers.ToArray();
4753
_removeEffectWrapper = removeEffectWrapper;
4854
_dispelRegisterWrapper = dispelRegisterWrapper;
49-
_callbackUnitRegisterWrapper = callbackUnitRegisterWrapper;
55+
_callbackUnitRegisterWrappers = callbackUnitRegisterWrappers;
5056
_callbackEffectRegisterWrappers = callbackEffectRegisterWrappers;
51-
_callbackEffectUnitsRegisterWrapper = callbackEffectUnitsRegisterWrapper;
57+
_callbackEffectUnitsRegisterWrappers = callbackEffectUnitsRegisterWrappers;
5258

5359
for (int i = 0; i < _effectWrappers.Length; i++)
5460
{
@@ -76,12 +82,24 @@ public ModifierEffectsCreator(List<EffectWrapper> effectWrappers, EffectWrapper
7682
_callbackEffectEffectsIndex++;
7783
if ((effectWrapper.EffectOn & EffectOn.CallbackEffectUnits) != 0)
7884
_callbackEffectUnitsEffectsIndex++;
85+
if ((effectWrapper.EffectOn & EffectOn.CallbackUnit2) != 0)
86+
_callbackUnitEffectsIndex2++;
87+
if ((effectWrapper.EffectOn & EffectOn.CallbackUnit3) != 0)
88+
_callbackUnitEffectsIndex3++;
89+
if ((effectWrapper.EffectOn & EffectOn.CallbackUnit4) != 0)
90+
_callbackUnitEffectsIndex4++;
7991
if ((effectWrapper.EffectOn & EffectOn.CallbackEffect2) != 0)
8092
_callbackEffectEffectsIndex2++;
8193
if ((effectWrapper.EffectOn & EffectOn.CallbackEffect3) != 0)
8294
_callbackEffectEffectsIndex3++;
8395
if ((effectWrapper.EffectOn & EffectOn.CallbackEffect4) != 0)
8496
_callbackEffectEffectsIndex4++;
97+
if ((effectWrapper.EffectOn & EffectOn.CallbackEffectUnits2) != 0)
98+
_callbackEffectUnitsEffectsIndex2++;
99+
if ((effectWrapper.EffectOn & EffectOn.CallbackEffectUnits3) != 0)
100+
_callbackEffectUnitsEffectsIndex3++;
101+
if ((effectWrapper.EffectOn & EffectOn.CallbackEffectUnits4) != 0)
102+
_callbackEffectUnitsEffectsIndex4++;
85103
}
86104

87105
_effectsWithModifierInfoWrappers = effectsWithModifierInfoWrappers.ToArray();
@@ -115,16 +133,24 @@ public SyncedModifierEffects Create(int genId)
115133
_stackEffectsIndex = 0;
116134
}
117135

118-
if (_callbackUnitEffectsIndex > 0)
119-
{
120-
_callbackUnitEffects = new IEffect[_callbackUnitEffectsIndex];
121-
_callbackUnitEffectsIndex = 0;
122-
}
136+
if (_callbackUnitEffectsIndex > 0 || _callbackUnitEffectsIndex2 > 0 ||
137+
_callbackUnitEffectsIndex3 > 0 || _callbackUnitEffectsIndex4 > 0)
138+
_callbackUnitEffects = new IEffect[4][];
123139

124140
if (_callbackEffectEffectsIndex > 0 || _callbackEffectEffectsIndex2 > 0 ||
125141
_callbackEffectEffectsIndex3 > 0 || _callbackEffectEffectsIndex4 > 0)
126142
_callbackEffectEffects = new IEffect[4][];
127143

144+
if (_callbackEffectUnitsEffectsIndex > 0 || _callbackEffectUnitsEffectsIndex2 > 0 ||
145+
_callbackEffectUnitsEffectsIndex3 > 0 || _callbackEffectUnitsEffectsIndex4 > 0)
146+
_callbackEffectUnitsEffects = new IEffect[4][];
147+
148+
if (_callbackUnitEffectsIndex > 0)
149+
{
150+
_callbackUnitEffects[0] = new IEffect[_callbackUnitEffectsIndex];
151+
_callbackUnitEffectsIndex = 0;
152+
}
153+
128154
if (_callbackEffectEffectsIndex > 0)
129155
{
130156
_callbackEffectEffects[0] = new IEffect[_callbackEffectEffectsIndex];
@@ -133,10 +159,28 @@ public SyncedModifierEffects Create(int genId)
133159

134160
if (_callbackEffectUnitsEffectsIndex > 0)
135161
{
136-
_callbackEffectUnitsEffects = new IEffect[_callbackEffectUnitsEffectsIndex];
162+
_callbackEffectUnitsEffects[0] = new IEffect[_callbackEffectUnitsEffectsIndex];
137163
_callbackEffectUnitsEffectsIndex = 0;
138164
}
139165

166+
if (_callbackUnitEffectsIndex2 > 0)
167+
{
168+
_callbackUnitEffects[1] = new IEffect[_callbackUnitEffectsIndex2];
169+
_callbackUnitEffectsIndex2 = 0;
170+
}
171+
172+
if (_callbackUnitEffectsIndex3 > 0)
173+
{
174+
_callbackUnitEffects[2] = new IEffect[_callbackUnitEffectsIndex3];
175+
_callbackUnitEffectsIndex3 = 0;
176+
}
177+
178+
if (_callbackUnitEffectsIndex4 > 0)
179+
{
180+
_callbackUnitEffects[3] = new IEffect[_callbackUnitEffectsIndex4];
181+
_callbackUnitEffectsIndex4 = 0;
182+
}
183+
140184
if (_callbackEffectEffectsIndex2 > 0)
141185
{
142186
_callbackEffectEffects[1] = new IEffect[_callbackEffectEffectsIndex2];
@@ -155,6 +199,24 @@ public SyncedModifierEffects Create(int genId)
155199
_callbackEffectEffectsIndex4 = 0;
156200
}
157201

202+
if (_callbackEffectUnitsEffectsIndex2 > 0)
203+
{
204+
_callbackEffectUnitsEffects[1] = new IEffect[_callbackEffectUnitsEffectsIndex2];
205+
_callbackEffectUnitsEffectsIndex2 = 0;
206+
}
207+
208+
if (_callbackEffectUnitsEffectsIndex3 > 0)
209+
{
210+
_callbackEffectUnitsEffects[2] = new IEffect[_callbackEffectUnitsEffectsIndex3];
211+
_callbackEffectUnitsEffectsIndex3 = 0;
212+
}
213+
214+
if (_callbackEffectUnitsEffectsIndex4 > 0)
215+
{
216+
_callbackEffectUnitsEffects[3] = new IEffect[_callbackEffectUnitsEffectsIndex4];
217+
_callbackEffectUnitsEffectsIndex4 = 0;
218+
}
219+
158220
if (_revertEffectsIndex > 0)
159221
{
160222
_revertEffects = new IRevertEffect[_revertEffectsIndex];
@@ -183,17 +245,29 @@ public SyncedModifierEffects Create(int genId)
183245
if ((effectOn & EffectOn.Stack) != 0)
184246
_stackEffects[_stackEffectsIndex++] = (IStackEffect)effect;
185247
if ((effectOn & EffectOn.CallbackUnit) != 0)
186-
_callbackUnitEffects[_callbackUnitEffectsIndex++] = effect;
248+
_callbackUnitEffects[0][_callbackUnitEffectsIndex++] = effect;
187249
if ((effectOn & EffectOn.CallbackEffect) != 0)
188250
_callbackEffectEffects[0][_callbackEffectEffectsIndex++] = effect;
189251
if ((effectOn & EffectOn.CallbackEffectUnits) != 0)
190-
_callbackEffectUnitsEffects[_callbackEffectUnitsEffectsIndex++] = effect;
252+
_callbackEffectUnitsEffects[0][_callbackEffectUnitsEffectsIndex++] = effect;
253+
if ((effectOn & EffectOn.CallbackUnit2) != 0)
254+
_callbackUnitEffects[1][_callbackUnitEffectsIndex2++] = effect;
255+
if ((effectOn & EffectOn.CallbackUnit3) != 0)
256+
_callbackUnitEffects[2][_callbackUnitEffectsIndex3++] = effect;
257+
if ((effectOn & EffectOn.CallbackUnit4) != 0)
258+
_callbackUnitEffects[3][_callbackUnitEffectsIndex4++] = effect;
191259
if ((effectOn & EffectOn.CallbackEffect2) != 0)
192260
_callbackEffectEffects[1][_callbackEffectEffectsIndex2++] = effect;
193261
if ((effectOn & EffectOn.CallbackEffect3) != 0)
194262
_callbackEffectEffects[2][_callbackEffectEffectsIndex3++] = effect;
195263
if ((effectOn & EffectOn.CallbackEffect4) != 0)
196264
_callbackEffectEffects[3][_callbackEffectEffectsIndex4++] = effect;
265+
if ((effectOn & EffectOn.CallbackEffectUnits2) != 0)
266+
_callbackEffectUnitsEffects[1][_callbackEffectUnitsEffectsIndex2++] = effect;
267+
if ((effectOn & EffectOn.CallbackEffectUnits3) != 0)
268+
_callbackEffectUnitsEffects[2][_callbackEffectUnitsEffectsIndex3++] = effect;
269+
if ((effectOn & EffectOn.CallbackEffectUnits4) != 0)
270+
_callbackEffectUnitsEffects[3][_callbackEffectUnitsEffectsIndex4++] = effect;
197271
}
198272

199273
EffectStateInfo effectStateInfo = default;
@@ -217,13 +291,14 @@ public SyncedModifierEffects Create(int genId)
217291
//Set the effects arrays on our special effects (callback, event, remove-revert)
218292
//No need to reset manually special wrappers manually
219293
//Since they're always fed to effectWrappers, that we reset at the end
220-
_callbackUnitRegisterWrapper?.GetEffectAs<IRecipeFeedEffects>().SetEffects(_callbackUnitEffects);
294+
for (int i = 0; i < _callbackUnitRegisterWrappers?.Length; i++)
295+
_callbackUnitRegisterWrappers[i].GetEffectAs<IRecipeFeedEffects>().SetEffects(_callbackUnitEffects[i]);
221296
for (int i = 0; i < _callbackEffectRegisterWrappers?.Length; i++)
222297
_callbackEffectRegisterWrappers[i].GetEffectAs<IRecipeFeedEffects>()
223298
.SetEffects(_callbackEffectEffects[i]);
224-
225-
_callbackEffectUnitsRegisterWrapper?.GetEffectAs<IRecipeFeedEffects>()
226-
.SetEffects(_callbackEffectUnitsEffects);
299+
for (int i = 0; i < _callbackEffectUnitsRegisterWrappers?.Length; i++)
300+
_callbackEffectUnitsRegisterWrappers[i].GetEffectAs<IRecipeFeedEffects>()
301+
.SetEffects(_callbackEffectUnitsEffects[i]);
227302

228303
if (_removeEffectWrapper != null && _revertEffects != null)
229304
_removeEffectWrapper.GetEffectAs<RemoveEffect>().SetRevertibleEffects(_revertEffects);

0 commit comments

Comments
 (0)