예제 #1
0
        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);
        }