コード例 #1
0
    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);
    }
コード例 #2
0
    private void OnEnable()
    {
        target   = null;
        flyTime  = 0f;
        steering = Vector3.zero;
        settings = GameplaySettings.Airplane;
        velocity = transform.up * settings.MinSpeed;

        instances.Add(this);
    }
コード例 #3
0
    private void Update()
    {
        if (target == null)
        {
            return;
        }

        if (!target.IsActive)
        {
            target = ship;
        }

        if (ProcessFlightEnding())
        {
            return;
        }

        ProcessTarget();
        EvadeShip();
        EvadeOtherAirplanes();
        ApplySteering();
    }
コード例 #4
0
    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);
        }
    }
コード例 #5
0
 public void Launch(IAirplaneTarget target, IAirplaneTarget ship, Pool pool)
 {
     this.target = target;
     this.ship   = ship;
     this.pool   = pool;
 }
コード例 #6
0
    private Vector3 Pursuit(IAirplaneTarget target)
    {
        var futurePosition = GetPredictedPosition(target, transform.position);

        return(Seek(futurePosition));
    }
コード例 #7
0
    private Vector3 Evade(IAirplaneTarget target)
    {
        var futurePosition = GetPredictedPosition(target, transform.position);

        return(Flee(futurePosition));
    }