void Update() { if (currentState == AIState.Attack) { desiredAngle = 90f; currentSailStrategy = SailingStrategy.SailAtAngle; } UpdateStrategy(); }
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); } } }
public void SetSail(Vector3 pos) { sails.SpreadSailsFully(); destination = pos; currentSailStrategy = SailingStrategy.SailStraight; }