@@ -23,23 +23,50 @@ public class SwitchMultipleBehavior : BehaviorBase<SwitchMultipleBehaviorExecuti
23
23
24
24
private float ChargeTime { get ; set ; }
25
25
private float DistanceToTarget { get ; set ; }
26
- private BehaviorBase Behavior1 { get ; set ; }
27
- private BehaviorBase Behavior2 { get ; set ; }
28
- private float Value1 { get ; set ; }
26
+
27
+ private List < BehaviorBase > Behaviors = new List < BehaviorBase > ( ) ;
28
+
29
+ private List < float > Values = new List < float > ( ) ;
29
30
30
31
public override async Task BuildAsync ( )
31
32
{
33
+ //what do these do?
32
34
ChargeTime = await GetParameter < float > ( "charge_up" ) ;
33
35
DistanceToTarget = await GetParameter < float > ( "distance_to_target" ) ;
34
- Behavior1 = await GetBehavior ( "behavior 1" ) ;
35
- Behavior2 = await GetBehavior ( "behavior 2" ) ;
36
- Value1 = await GetParameter < float > ( "value 1" ) ;
36
+
37
+ //dynamically load all possible behaviors the switch can have
38
+ var valid = true ;
39
+ var count = 1 ;
40
+ while ( valid )
41
+ {
42
+ var behavior = await GetBehavior ( "behavior " + count ) ;
43
+ var value = await GetParameter < float > ( "value " + count ) ;
44
+ if ( behavior == default || behavior . BehaviorId == 0 )
45
+ {
46
+ valid = false ;
47
+ }
48
+ else
49
+ {
50
+ count ++ ;
51
+ Behaviors . Add ( behavior ) ;
52
+ Values . Add ( value ) ;
53
+ }
54
+ }
37
55
}
38
56
39
57
protected override void DeserializeStart ( BitReader reader , SwitchMultipleBehaviorExecutionParameters parameters )
40
58
{
41
59
parameters . Value = reader . Read < float > ( ) ;
42
- parameters . Behavior = parameters . Value <= Value1 ? Behavior1 : Behavior2 ;
60
+ var currentBehavior = Behaviors [ 0 ] ;
61
+ //check each behavior's threshold to see if we go past it, when we find one that's too much we break out of the loop
62
+ for ( int i = 1 ; i < Values . Count ( ) ; i ++ ) {
63
+ if ( parameters . Value > Values [ i - 1 ] ) {
64
+ currentBehavior = Behaviors [ i ] ;
65
+ } else {
66
+ break ;
67
+ }
68
+ }
69
+ parameters . Behavior = currentBehavior ;
43
70
parameters . Parameters =
44
71
parameters . Behavior . DeserializeStart ( reader , parameters . Context , parameters . BranchContext ) ;
45
72
}
0 commit comments