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); }
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; }