Accumulators
The library includes three accumulators which are commonly useful. Accumulators are implementations of IAccumulator. They aggregate information about neighbors or raycasts inside implementations of neighbor behaviors and raycast behaviors.
NoneAccumulator
Doesn't do anything. Useful when an accumulator is not needed. Example of this is the OnMiss of EnvironmentAvoidanceJob.
public struct NoneAccumulator : IAccumulator
{
public void Init() { }
}
SimpleAccumulator
Accumulates a weighted sum of vectors passed into the Add function. Useful for example to find a centroid inside CohesionJob.
public struct SimpleAccumulator : IAccumulator
{
public float3 SumVector;
public float SumMagnitude;
public void Add(float3 vector, float weight)
{
SumVector += vector;
SumMagnitude += magnitude;
}
public void Init()
{
SumVector = new float3();
SumMagnitude = 0;
}
}
MaxAccumulator
Finds a vector with a largest weight passed into the Add function. Could be useful for any behavior which finds direction with some associated maximum score. For example EnvironmentAvoidanceJob finds a raycast hit with maximum 'dangerousness score' to determine what to avoid.
public struct MaxAccumulator : IAccumulator
{
public float MaxMagnitude;
public float3 Direction;
public void Add(float3 direction, float weight)
{
if (magnitude > MaxMagnitude)
{
MaxMagnitude = magnitude;
Direction = direction;
}
}
public void Init()
{
MaxMagnitude = float.NegativeInfinity;
}
}