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); }
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; }
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); }