Example #1
0
 protected AxisMessage ClearYAxis(Priority priority)
 {
     if (priority == axisYPriority)
     {
         axisYPriority  = Priority.TowardsTarget;
         axisY          = 0;
         evadeMechanism = null;
         axisYMin       = -1;
         axisYMax       = 1;
         return(AxisMessage.Success);
     }
     return(AxisMessage.InvalidPriority);
 }
Example #2
0
    protected void Evade(PlayerController player)
    {
        float forwardAngle = Vector3.Angle(player.transform.position - transform.position, transform.forward);
        float rightAngle = Vector3.Angle(player.transform.position - transform.position, transform.right);
        float numX, numY;

        // Depending on the angle from the player firing, attempt to first set axis in a certain direction
        if (rightAngle < 90f)
        {
            numX = -1f;
        }
        else
        {
            numX = 1f;
        }
        if (forwardAngle < 90f)
        {
            numY = 1f;
        }
        else
        {
            numY = -1f;
            numX = -numX;
        }

        // Rotate left, right or not at all depending on X Axis Restrictions
        AxisMessage responseX = SetXAxis(numX, Priority.Evasion);

        if (responseX == AxisMessage.AxisOutOfRange)
        {
            responseX = SetXAxis(-numX, Priority.Evasion);
            if (responseX == AxisMessage.AxisOutOfRange)
            {
                responseX = SetXAxis(0, Priority.Evasion);
            }
        }
        // Move forward or backward depending on Y Axis Restrictions
        AxisMessage responseY = SetYAxis(numY, Priority.Evasion);

        if (responseY == AxisMessage.AxisOutOfRange)
        {
            SetYAxis(-numY, Priority.Evasion);
        }
        // Rotate until tank is 90 degrees from player
        evadeMechanism    = new AIEvadeMechanism(90f, 1f, playerFireTarget, evadeDistance);
        lastPlayerFirePos = player.transform.position;
    }