Skip to content

Commit d5316d9

Browse files
Allow additional behaviors in SwitchMultipleBehaviors (#249)
* Allow additional behaviors in SwitchMultipleBehaviors * Formatting Formatting Formatting * A few more formatting things Co-authored-by: enteryournamehere <[email protected]>
1 parent 41b8e4a commit d5316d9

File tree

1 file changed

+34
-7
lines changed

1 file changed

+34
-7
lines changed

Uchu.World/Systems/Behaviors/SwitchMultipleBehavior.cs

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,50 @@ public class SwitchMultipleBehavior : BehaviorBase<SwitchMultipleBehaviorExecuti
2323

2424
private float ChargeTime { get; set; }
2525
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>();
2930

3031
public override async Task BuildAsync()
3132
{
33+
//what do these do?
3234
ChargeTime = await GetParameter<float>("charge_up");
3335
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+
}
3755
}
3856

3957
protected override void DeserializeStart(BitReader reader, SwitchMultipleBehaviorExecutionParameters parameters)
4058
{
4159
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;
4370
parameters.Parameters =
4471
parameters.Behavior.DeserializeStart(reader, parameters.Context, parameters.BranchContext);
4572
}

0 commit comments

Comments
 (0)