private Vector3 GetPredictedPosition(IAirplaneTarget target, Vector3 position) { var predictionCoef = Vector3.Distance(target.Position, position) / target.MaxSpeed; var predictedPosition = target.Position + target.Velocity * predictionCoef; return(predictedPosition); }
private void OnEnable() { target = null; flyTime = 0f; steering = Vector3.zero; settings = GameplaySettings.Airplane; velocity = transform.up * settings.MinSpeed; instances.Add(this); }
private void Update() { if (target == null) { return; } if (!target.IsActive) { target = ship; } if (ProcessFlightEnding()) { return; } ProcessTarget(); EvadeShip(); EvadeOtherAirplanes(); ApplySteering(); }
public bool TryLaunch(Vector3 startPosition, Vector3 direction, IAirplaneTarget ship) { var airplane = pool.Get(); if (airplane) { var airplaneController = airplane.GetComponent <AirplaneController>(); var target = lastLaunched == null || !lastLaunched.IsActive ? ship : lastLaunched; airplaneController.Launch(target, ship, pool); airplane.transform.position = startPosition; airplane.transform.up = direction; lastLaunched = airplaneController; return(true); } else { return(false); } }
public void Launch(IAirplaneTarget target, IAirplaneTarget ship, Pool pool) { this.target = target; this.ship = ship; this.pool = pool; }
private Vector3 Pursuit(IAirplaneTarget target) { var futurePosition = GetPredictedPosition(target, transform.position); return(Seek(futurePosition)); }
private Vector3 Evade(IAirplaneTarget target) { var futurePosition = GetPredictedPosition(target, transform.position); return(Flee(futurePosition)); }