Ejemplo n.º 1
0
 // STATE start ---------------------------------------------
 void state_SetOptimalSailToShipAngle()
 {
     currentShipToWindAngle = angleBetweenShipAndWind.GetCurrentShipToWindAngle();
     if (currentShipToWindAngle != lastShipToWindAngle)
     {
         fastestSailToShipAngle = GetFastestSailsToShipAngle(currentShipToWindAngle);
         lastShipToWindAngle    = currentShipToWindAngle;
     }
     enemyBoatController.SetSailsAtGivenAngle(fastestSailToShipAngle);
 }
Ejemplo n.º 2
0
    void Start()
    {
        enemyBoatController     = GetComponent <EnemyBoatController>();
        angleBetweenShipAndWind = GetComponent <AngleBetweenShipAndWind>();

        currentShipToWindAngle = angleBetweenShipAndWind.GetCurrentShipToWindAngle();
        fastestSailToShipAngle = GetFastestSailsToShipAngle(currentShipToWindAngle);
        lastShipToWindAngle    = currentShipToWindAngle;

        activeState = state_SetOptimalSailToShipAngle;
    }
Ejemplo n.º 3
0
    // STATE end -----------------------------------------------

    // STATE start ---------------------------------------------
    void state_MoveRandomly()
    {
        if (obstacle1)
        {
            activeState = state_AvoidingObstacle;
            return;
        }

        if (enemyShip)
        {
            Vector3 playerShipDirection = enemyShip.transform.forward;
            playerShipDirection.y = 0;

            Vector3 ourShipDirection = transform.forward;
            ourShipDirection.y = 0;

            float angleBetweenPlayerShipDirectionAndOurShipDirection = Vector3.Angle(playerShipDirection, ourShipDirection);
            if (angleBetweenPlayerShipDirectionAndOurShipDirection > 90)
            {
                angleBetweenPlayerShipDirectionAndOurShipDirection = 180 - angleBetweenPlayerShipDirectionAndOurShipDirection;
            }

            if ((angleBetweenPlayerShipDirectionAndOurShipDirection <= 5) &&
                (AIHelperFunctions.GetDistanceBetweenPerpendicular(this.gameObject, enemyShip) <= 3))
            {
                activeState = state_Battle;
                return;
            }
        }

        //change ship direction periodically
        if (Time.time > changeDirectionTime)
        {
            changeDirectionTime = Time.time + RandomPeriodOfTime();
            float currentShipToWindAngle = angleBetweenShipAndWind.GetCurrentShipToWindAngle();
            float angle = Random.Range(-45.0f, 45.0f);

            Vector3 rotatedVector;
            if (currentShipToWindAngle - angle > 150)
            {
                rotatedVector = AIHelperFunctions.GetRotatedVector(windArea.windDirection, -150 * Mathf.Deg2Rad);
            }
            else if (currentShipToWindAngle - angle < -150)
            {
                rotatedVector = AIHelperFunctions.GetRotatedVector(windArea.windDirection, 150 * Mathf.Deg2Rad);
            }
            else
            {
                rotatedVector = AIHelperFunctions.GetRotatedVector(transform.forward, angle * Mathf.Deg2Rad);
            }

            enemyBoatController.SetNewShipDirection(rotatedVector);
        }
    }
Ejemplo n.º 4
0
    // STATE end -----------------------------------------------

    // STATE start ---------------------------------------------
    void state_PlayerSearch()
    {
        if (obstacle1)
        {
            activeState = state_AvoidObstacles;
            return;
        }

        if (playerShip)
        {
            activeState = state_GoToPlayerShip;
            return;
        }

        //change ship direction periodically
        if (Time.time > changeDirectionTime)
        {
            changeDirectionTime = Time.time + RandomPeriodOfTime();
            float currentShipToWindAngle = angleBetweenShipAndWind.GetCurrentShipToWindAngle();
            float angle = Random.Range(-45.0f, 45.0f);

            Vector3 rotatedVector;
            if (currentShipToWindAngle - angle > 150)
            {
                rotatedVector = AIHelperFunctions.GetRotatedVector(windArea.windDirection, -150 * Mathf.Deg2Rad);
            }
            else if (currentShipToWindAngle - angle < -150)
            {
                rotatedVector = AIHelperFunctions.GetRotatedVector(windArea.windDirection, 150 * Mathf.Deg2Rad);
            }
            else
            {
                rotatedVector = AIHelperFunctions.GetRotatedVector(transform.forward, angle * Mathf.Deg2Rad);
            }

            enemyBoatController.SetNewShipDirection(rotatedVector);
        }
    }