Example #1
0
        public override MovementOutput GetMovement()
        {
            MovementOutput steering = new MovementOutput();

            // Percorrer cada canal
            if (goal.hasOrientation)
            {
                // usar o DynamicAlign...
                DynamicVelocityMatch da = new DynamicVelocityMatch()
                {
                    Character       = this.Character,
                    Target          = new KinematicData(),
                    MaxAcceleration = this.MaxAcceleration
                };

                da.Target.orientation = goal.orientation;
                steering.angular      = da.GetMovement().angular;
            }

            if (goal.hasPosition)
            {
                // usar o DynamicSeek
                DynamicArrive ds = new DynamicArrive()
                {
                    Character       = this.Character,
                    Target          = new KinematicData(),
                    MaxAcceleration = this.MaxAcceleration,
                    SlowRadius      = 8.0f,
                    StopRadius      = 4.0f
                };

                /*           if (ds.Target.orientation > goal.orientation)
                 *         {
                 *             ds.Target.position += 0.1f;
                 *         }
                 *         else
                 *         {
                 *             ds.Target.position -= 0.1f;
                 *         }*/

                ds.Target.position = goal.position;
                steering.linear    = ds.GetMovement().linear;
            }

            //  velocidades e possivelmente erros


            steering.linear.Normalize();
            steering.linear  *= this.MaxAcceleration;
            steering.angular *= this.MaxAcceleration;
            steering.linear.y = 0.0f; // Failsafe



            //  Debug.Log("X->"+ Character.position.x + " Y->" + Character.position.y + " Z->" + Character.position.z);
            //  Debug.Log("Orientation->" + Character.orientation.ToString());
            return(steering);
        }
Example #2
0
        public override MovementOutput GetMovement()
        {
            MovementOutput steering = new MovementOutput();

            // Percorrer cada canal
            if (goal.hasOrientation)
            {
                // usar o DynamicAlign...
                DynamicVelocityMatch da = new DynamicVelocityMatch()
                {
                    Character = this.Character,
                    Target = new KinematicData(),
                    MaxAcceleration = this.MaxAcceleration
                };

                da.Target.orientation = goal.orientation;
                steering.angular = da.GetMovement().angular;
            }

            if (goal.hasPosition)
            {
                // usar o DynamicSeek
                DynamicArrive ds = new DynamicArrive()
                {
                    Character = this.Character,
                    Target = new KinematicData(),
                    MaxAcceleration = this.MaxAcceleration,
                    SlowRadius = 8.0f,
                    StopRadius = 4.0f
                };

             /*           if (ds.Target.orientation > goal.orientation)
                {
                    ds.Target.position += 0.1f;
                }
                else
                {
                    ds.Target.position -= 0.1f;
                }*/

                ds.Target.position = goal.position;
                steering.linear = ds.GetMovement().linear;

            }

            //  velocidades e possivelmente erros

            steering.linear.Normalize();
            steering.linear *= this.MaxAcceleration;
            steering.angular *= this.MaxAcceleration;
            steering.linear.y = 0.0f; // Failsafe

              //  Debug.Log("X->"+ Character.position.x + " Y->" + Character.position.y + " Z->" + Character.position.z);
              //  Debug.Log("Orientation->" + Character.orientation.ToString());
            return steering;
        }
Example #3
0
        public override MovementOutput GetMovement()
        {

           MovementOutput steering = new MovementOutput();

            // Percorrer cada canal
            if (goal.hasOrientation)
            {
                // usar o DynamicAlign...
                DynamicVelocityMatch da = new DynamicVelocityMatch()
                {
                    Character = this.Character,
                    Target = new KinematicData(),
                    MaxAcceleration = this.MaxAcceleration
                };
                da.Target.orientation = goal.orientation;
                steering.angular += da.GetMovement().angular;
            }

            if (goal.hasPosition)
            {
                // usar o DynamicSeek
                DynamicSeek ds = new DynamicSeek()
                {
                    Character = this.Character,
                    Target = new KinematicData(),
                    MaxAcceleration = this.MaxAcceleration
                };
                ds.Target.position = goal.position;
                steering.linear += ds.GetMovement().linear;
            }

            //  velocidades e possivelmente erros

            steering.linear.Normalize();
            steering.linear *= this.MaxAcceleration;
            steering.angular *= this.MaxAcceleration;            

            return steering;
        }
Example #4
0
        public override MovementOutput GetMovement()
        {
            MovementOutput steering = new MovementOutput();

            // Percorrer cada canal
            if (goal.hasOrientation)
            {
                // usar o DynamicAlign...
                DynamicVelocityMatch da = new DynamicVelocityMatch()
                {
                    Character = this.Character,
                    Target = new KinematicData(),
                    MaxAcceleration = this.MaxAcceleration
                };
                da.Target.orientation = goal.orientation;
                steering.angular += da.GetMovement().angular;
            }

            if (goal.hasPosition)
            {
                // usar o DynamicSeek
                DynamicSeek ds = new DynamicSeek()
                {
                    Character = this.Character,
                    Target = new KinematicData(),
                    MaxAcceleration = this.MaxAcceleration
                };
                ds.Target.position = goal.position;
                steering.linear += ds.GetMovement().linear;
            }

            //  velocidades e possivelmente erros

            steering.linear.Normalize();
            steering.linear *= this.MaxAcceleration;
            steering.angular *= this.MaxAcceleration;

            return steering;
        }
        public void ManageAI(MovementAI ai, Rigidbody2D character)
        {
            Kinematic characterKinematic = KinematicAdapter.FromRigidbody2DToKinematic(character);
            Kinematic targetKinematic    = new Kinematic();
            Algorithm algorithm          = new DynamicNone();

            switch (ai.aiAlgorithm)
            {
            case AIAlgorithm.DynamicSeek:
                targetKinematic = KinematicAdapter.FromRigidbody2DToKinematic(ai.target);
                algorithm       = new DynamicSeek(characterKinematic, targetKinematic, ai.maxSpeed);
                break;

            case AIAlgorithm.DynamicFlee:
                targetKinematic = KinematicAdapter.FromRigidbody2DToKinematic(ai.target);
                algorithm       = new DynamicFlee(characterKinematic, targetKinematic, ai.maxSpeed);
                break;

            case AIAlgorithm.DynamicArrive:
                targetKinematic = KinematicAdapter.FromRigidbody2DToKinematic(ai.target);
                algorithm       = new DynamicArrive(characterKinematic, targetKinematic, ai.maxAcceleration, ai.maxSpeed, ai.targetRadius, ai.slowRadius, ai.timeToTarget);
                break;

            case AIAlgorithm.DynamicAlign:
                targetKinematic = KinematicAdapter.FromRigidbody2DToKinematic(ai.target);
                algorithm       = new DynamicAlign(characterKinematic, targetKinematic, ai.maxRotation, ai.maxAngularAcceleration,
                                                   ai.targetRadius, ai.slowRadius, ai.timeToTarget);
                break;

            case AIAlgorithm.DynamicVelocityMatch:
                targetKinematic = KinematicAdapter.FromRigidbody2DToKinematic(ai.target);
                algorithm       = new DynamicVelocityMatch(characterKinematic, targetKinematic, ai.maxAcceleration, ai.timeToTarget);
                break;
            }
            SteeringOutput steering = algorithm.getSteering();

            steering.Apply(characterKinematic, ai.lookWhereYoureGoing, ai.maxSpeed, Time.deltaTime);
            KinematicAdapter.UpdateRigidbody2DWithKinematic(character, characterKinematic);
        }