public DynamicEvade(Kinematic _character, Kinematic _target, float _maxAcceleration, float _maxPrediction) { character = _character; target = _target; maxAcceleration = _maxAcceleration; maxPrediction = _maxPrediction; df = new DynamicFlee(_character, _target, _maxAcceleration); }
public SteeringOutput Separation() { Kinematic cotm = new Kinematic() { position = getNeighborhoodCenter(prepareNeighourhood()) }; Debug.DrawLine(character.position, cotm.position, Color.blue); DynamicFlee df = new DynamicFlee(character, cotm, maxAcceleration); return(df.getSteering()); }
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); }
void Awake() { dynamicFlee = new DynamicFlee(GetComponent <Rigidbody>(), getTargetPosition(), magnitude); }
void Update() { Camera camera = GameObject.FindGameObjectWithTag("MainCamera").GetComponent <Camera>(); Vector3 PointInWorld = new Vector3(); var buttonClicked = false; if (Input.GetKeyDown(KeyCode.Mouse0)) { var mousePos = Input.mousePosition; mousePos.z = CAMERA_Y; PointInWorld = camera.ScreenToWorldPoint(mousePos); buttonClicked = true; Debug.Log("world point: " + PointInWorld); } foreach (var character in this.Characters) { BlendedMovement movement = (BlendedMovement)character.Movement; MovementWithWeight fleeClick = movement.Movements.Find(x => x.Movement.Name == "Flee"); if (buttonClicked) { var distanceToPoint = (character.KinematicData.position - PointInWorld).magnitude; if (distanceToPoint < FLEE_RADIUS) { var dynamicFlee = new DynamicFlee() { Character = character.KinematicData, Target = new KinematicData(), MaxAcceleration = MAX_ACCELERATION }; if (fleeClick != null) { movement.Movements.Remove(fleeClick); } dynamicFlee.Target.position = PointInWorld; dynamicFlee.Target.position.y = character.KinematicData.position.y; movement.Movements.Add(new MovementWithWeight(dynamicFlee, 7)); } } else { var distanceToPoint = (character.KinematicData.position - PointInWorld).magnitude; if (distanceToPoint > FLEE_RADIUS) { if (fleeClick != null) { movement.Movements.Remove(fleeClick); } } } this.UpdateMovingGameObject(character); } }
public SteeringOutput ObstacleFlee() { DynamicFlee sb = new DynamicFlee(agent.k, target.k, maxAcceleration); return(ObstacleAvoidance(sb)); }
public SteeringOutput TempObstacleFlee(NPCController newTarget) { DynamicFlee sb = new DynamicFlee(agent.k, newTarget.k, maxAcceleration); return(ObstacleAvoidance(sb)); }