@@ -12,18 +12,18 @@ public sealed class ModifierEffectsCreator
12
12
private readonly EffectWrapper [ ] _savableEffectsWrappers ;
13
13
private readonly EffectWrapper _removeEffectWrapper ;
14
14
private readonly EffectWrapper _dispelRegisterWrapper ;
15
- private readonly EffectWrapper _callbackUnitRegisterWrapper ;
15
+ private readonly EffectWrapper [ ] _callbackUnitRegisterWrappers ;
16
16
private readonly EffectWrapper [ ] _callbackEffectRegisterWrappers ;
17
- private readonly EffectWrapper _callbackEffectUnitsRegisterWrapper ;
17
+ private readonly EffectWrapper [ ] _callbackEffectUnitsRegisterWrappers ;
18
18
19
19
private IRevertEffect [ ] _revertEffects ;
20
20
private IEffect [ ] _initEffects ;
21
21
private IEffect [ ] _intervalEffects ;
22
22
private IEffect [ ] _durationEffects ;
23
23
private IStackEffect [ ] _stackEffects ;
24
- private IEffect [ ] _callbackUnitEffects ;
24
+ private IEffect [ ] [ ] _callbackUnitEffects ;
25
25
private IEffect [ ] [ ] _callbackEffectEffects ;
26
- private IEffect [ ] _callbackEffectUnitsEffects ;
26
+ private IEffect [ ] [ ] _callbackEffectUnitsEffects ;
27
27
28
28
private int _revertEffectsIndex ,
29
29
_initEffectsIndex ,
@@ -33,22 +33,28 @@ public sealed class ModifierEffectsCreator
33
33
_callbackUnitEffectsIndex ,
34
34
_callbackEffectEffectsIndex ,
35
35
_callbackEffectUnitsEffectsIndex ,
36
+ _callbackUnitEffectsIndex2 ,
37
+ _callbackUnitEffectsIndex3 ,
38
+ _callbackUnitEffectsIndex4 ,
36
39
_callbackEffectEffectsIndex2 ,
37
40
_callbackEffectEffectsIndex3 ,
38
- _callbackEffectEffectsIndex4 ;
41
+ _callbackEffectEffectsIndex4 ,
42
+ _callbackEffectUnitsEffectsIndex2 ,
43
+ _callbackEffectUnitsEffectsIndex3 ,
44
+ _callbackEffectUnitsEffectsIndex4 ;
39
45
40
46
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 )
43
49
{
44
50
var effectsWithModifierInfoWrappers = new List < EffectWrapper > ( ) ;
45
51
var savableEffectsWrappers = new List < EffectWrapper > ( ) ;
46
52
_effectWrappers = effectWrappers . ToArray ( ) ;
47
53
_removeEffectWrapper = removeEffectWrapper ;
48
54
_dispelRegisterWrapper = dispelRegisterWrapper ;
49
- _callbackUnitRegisterWrapper = callbackUnitRegisterWrapper ;
55
+ _callbackUnitRegisterWrappers = callbackUnitRegisterWrappers ;
50
56
_callbackEffectRegisterWrappers = callbackEffectRegisterWrappers ;
51
- _callbackEffectUnitsRegisterWrapper = callbackEffectUnitsRegisterWrapper ;
57
+ _callbackEffectUnitsRegisterWrappers = callbackEffectUnitsRegisterWrappers ;
52
58
53
59
for ( int i = 0 ; i < _effectWrappers . Length ; i ++ )
54
60
{
@@ -76,12 +82,24 @@ public ModifierEffectsCreator(List<EffectWrapper> effectWrappers, EffectWrapper
76
82
_callbackEffectEffectsIndex ++ ;
77
83
if ( ( effectWrapper . EffectOn & EffectOn . CallbackEffectUnits ) != 0 )
78
84
_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 ++ ;
79
91
if ( ( effectWrapper . EffectOn & EffectOn . CallbackEffect2 ) != 0 )
80
92
_callbackEffectEffectsIndex2 ++ ;
81
93
if ( ( effectWrapper . EffectOn & EffectOn . CallbackEffect3 ) != 0 )
82
94
_callbackEffectEffectsIndex3 ++ ;
83
95
if ( ( effectWrapper . EffectOn & EffectOn . CallbackEffect4 ) != 0 )
84
96
_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 ++ ;
85
103
}
86
104
87
105
_effectsWithModifierInfoWrappers = effectsWithModifierInfoWrappers . ToArray ( ) ;
@@ -115,16 +133,24 @@ public SyncedModifierEffects Create(int genId)
115
133
_stackEffectsIndex = 0 ;
116
134
}
117
135
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 ] [ ] ;
123
139
124
140
if ( _callbackEffectEffectsIndex > 0 || _callbackEffectEffectsIndex2 > 0 ||
125
141
_callbackEffectEffectsIndex3 > 0 || _callbackEffectEffectsIndex4 > 0 )
126
142
_callbackEffectEffects = new IEffect [ 4 ] [ ] ;
127
143
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
+
128
154
if ( _callbackEffectEffectsIndex > 0 )
129
155
{
130
156
_callbackEffectEffects [ 0 ] = new IEffect [ _callbackEffectEffectsIndex ] ;
@@ -133,10 +159,28 @@ public SyncedModifierEffects Create(int genId)
133
159
134
160
if ( _callbackEffectUnitsEffectsIndex > 0 )
135
161
{
136
- _callbackEffectUnitsEffects = new IEffect [ _callbackEffectUnitsEffectsIndex ] ;
162
+ _callbackEffectUnitsEffects [ 0 ] = new IEffect [ _callbackEffectUnitsEffectsIndex ] ;
137
163
_callbackEffectUnitsEffectsIndex = 0 ;
138
164
}
139
165
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
+
140
184
if ( _callbackEffectEffectsIndex2 > 0 )
141
185
{
142
186
_callbackEffectEffects [ 1 ] = new IEffect [ _callbackEffectEffectsIndex2 ] ;
@@ -155,6 +199,24 @@ public SyncedModifierEffects Create(int genId)
155
199
_callbackEffectEffectsIndex4 = 0 ;
156
200
}
157
201
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
+
158
220
if ( _revertEffectsIndex > 0 )
159
221
{
160
222
_revertEffects = new IRevertEffect [ _revertEffectsIndex ] ;
@@ -183,17 +245,29 @@ public SyncedModifierEffects Create(int genId)
183
245
if ( ( effectOn & EffectOn . Stack ) != 0 )
184
246
_stackEffects [ _stackEffectsIndex ++ ] = ( IStackEffect ) effect ;
185
247
if ( ( effectOn & EffectOn . CallbackUnit ) != 0 )
186
- _callbackUnitEffects [ _callbackUnitEffectsIndex ++ ] = effect ;
248
+ _callbackUnitEffects [ 0 ] [ _callbackUnitEffectsIndex ++ ] = effect ;
187
249
if ( ( effectOn & EffectOn . CallbackEffect ) != 0 )
188
250
_callbackEffectEffects [ 0 ] [ _callbackEffectEffectsIndex ++ ] = effect ;
189
251
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 ;
191
259
if ( ( effectOn & EffectOn . CallbackEffect2 ) != 0 )
192
260
_callbackEffectEffects [ 1 ] [ _callbackEffectEffectsIndex2 ++ ] = effect ;
193
261
if ( ( effectOn & EffectOn . CallbackEffect3 ) != 0 )
194
262
_callbackEffectEffects [ 2 ] [ _callbackEffectEffectsIndex3 ++ ] = effect ;
195
263
if ( ( effectOn & EffectOn . CallbackEffect4 ) != 0 )
196
264
_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 ;
197
271
}
198
272
199
273
EffectStateInfo effectStateInfo = default ;
@@ -217,13 +291,14 @@ public SyncedModifierEffects Create(int genId)
217
291
//Set the effects arrays on our special effects (callback, event, remove-revert)
218
292
//No need to reset manually special wrappers manually
219
293
//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 ] ) ;
221
296
for ( int i = 0 ; i < _callbackEffectRegisterWrappers ? . Length ; i ++ )
222
297
_callbackEffectRegisterWrappers [ i ] . GetEffectAs < IRecipeFeedEffects > ( )
223
298
. 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 ] ) ;
227
302
228
303
if ( _removeEffectWrapper != null && _revertEffects != null )
229
304
_removeEffectWrapper . GetEffectAs < RemoveEffect > ( ) . SetRevertibleEffects ( _revertEffects ) ;
0 commit comments