Esempio n. 1
0
    void Update()
    {
        if (currentState == AIState.Attack)
        {
            desiredAngle        = 90f;
            currentSailStrategy = SailingStrategy.SailAtAngle;
        }

        UpdateStrategy();
    }
Esempio n. 2
0
    void UpdateStrategy()
    {
        if (currentSailStrategy != SailingStrategy.Tack && isInDeadZone)
        {
            Debug.Log("Starting tacking!");
            currentSailStrategy = SailingStrategy.Tack;
            desiredAngle        = MaxDeadAngle + UnityEngine.Random.Range(10f, 20f);
            readyToComeAbout    = true;
        }

        if (currentSailStrategy == SailingStrategy.Tack)
        {
            if (readyToComeAbout && Mathf.Abs(angleToTarget - (ComeAboutAngle * Mathf.Sign(desiredAngle))) < 1f)
            {
                readyToComeAbout = false;
                desiredAngle    *= -1;
            }

            if (!readyToComeAbout && (angleOfAttack - desiredAngle) < 1f)
            {
                readyToComeAbout = true;
            }

            SailAtAngleToWind(desiredAngle);
        }
        else if (currentSailStrategy == SailingStrategy.SailStraight)
        {
            desiredAngle = 0f;
            SailDirectly(destination);
        }
        else if (currentSailStrategy == SailingStrategy.SailAtAngle)
        {
            if (distanceToDestination.magnitude > FiringRange)
            {
                SailDirectly(destination);
            }
            else
            {
                Debug.Log("In Firing Range!");
                SailAtAngleToTarget(desiredAngle, destination);
            }
        }
    }
Esempio n. 3
0
 public void SetSail(Vector3 pos)
 {
     sails.SpreadSailsFully();
     destination         = pos;
     currentSailStrategy = SailingStrategy.SailStraight;
 }