void DetermineStrategy(int[] s, bool frontal2 = false) { bool sameStrategy = false; foreach (var ss in s) { if (curStrategy == (strategies)ss) { sameStrategy = true; break; } } if (!sameStrategy && System.Array.IndexOf(s, curStrategy) == -1) { ResetStrategy(); int i = Random.Range(0, s.Length); curStrategy = (strategies)s[i]; if (debugLog) Debug.Log(id + " , The current strategy is: " + curStrategy); } switch (curStrategy) { case strategies.DCC: velocity = Behaviours.GetSteering(position, goal, prefSpeed); velocity = Behaviours.DecelerationStrategy(min_ttc, velocity); break; case strategies.CH: int turnTo = TurnTo; velocity = Behaviours.GetSteering(position, goal, prefSpeed); velocity = Behaviours.ChangeDirectionStrategy((velocity, neighbor.position - position, min_ttc, timeHorizon, neighbor.TurnTo, out turnTo, frontal2); TurnTo = turnTo; break; case strategies.F: velocity = Behaviours.GetSteering(position, goal, prefSpeed); velocity = Behaviours.FollowStrategy(radius, prefSpeed, position, velocity, neighbor.position, neighbor.velocity); break; case strategies.A: velocity += Behaviours.CollisionAvoidance(position, velocity, Behaviours.GetSteering(position, goal, prefSpeed), timeHorizon, ttc, group_ttc); break; case strategies.N: velocity = Behaviours.GetSteering(position, goal, prefSpeed); break; } if (debugLog) Debug.DrawRay(new Vector3(position.x, 1.5f, position.y), new Vector3(velocity.x, 0, velocity.y), Color.green); }
void ResetStrategy() { curStrategy = strategies.NULL; duration = cacheDuration; TurnTo = 0; }