void NewTarget() { float minDist = float.MaxValue; SpawnableMutation tempObject = null; float tempDist; foreach (SpawnableMutation guy in mutations) { tempDist = CalcDistance2D(guy.transform, transform); if (tempDist < minDist) //&& Vector3.Distance(guy.transform.position, patrolPoint) < patrolDistance) { minDist = tempDist; tempObject = guy; } } target = tempObject; if (target) { //approach the new target StartCoroutine(TurnToLook(target.gameObject)); } else { //start patrolling StartCoroutine(TurnToLook(waypoints[waypointIndex].gameObject)); } }
void NewTarget() { float minDist = float.MaxValue; SpawnableMutation tempObject = null; float tempDist; foreach (SpawnableMutation guy in mutations) { tempDist = CalcDistance2D(guy.transform, transform); if (tempDist < minDist && MutationCanBeSeen(guy.gameObject)) //&& Vector3.Distance(guy.transform.position, patrolPoint) < patrolDistance) { minDist = tempDist; tempObject = guy; } } target = tempObject; if (target) { //approach the new target StartCoroutine(PlantRoutine(target.gameObject)); } else { //look to the player again if (state != BotState.Following || state != BotState.Destroying) { state = BotState.Turning; StartCoroutine(SnapView(player.position + playerAdditionValue, turnTime, true)); } } }
public static void RemoveMutationFromDrones(SpawnableMutation mut) { foreach (GardenDrones drone in allDrones) { drone.mutations.Remove(mut); if (drone.target == mut && drone.state == DroneState.Approaching) { drone.NewTarget(); } } }
public static void RemoveMutationFromBots(SpawnableMutation mut) { foreach (GardenEye bot in allBots) { bot.mutations.Remove(mut); if (bot.target == mut && bot.state == BotState.Following) { bot.NewTarget(); } } }
private IEnumerator PlantRoutine(GameObject nextPlant) { //yield return new WaitForSeconds(nextPlant.GetComponent<SpawnableMutation>().growthLength); SpawnableMutation mutation = nextPlant.GetComponent <SpawnableMutation>(); //if (mutation.lifePhase == SpawnableMutation.LifeCycle.Growth) //yield return new WaitForSeconds(mutation.growthLength); StartCoroutine(SnapView(nextPlant.transform.position, turnTime, false)); state = BotState.Turning; yield return(new WaitForSeconds(turnTime)); state = BotState.Destroying; mutation.lifePhase = SpawnableMutation.LifeCycle.Death; plantRoutineRunning = false; yield return(null); }
public static void AddMutationToDrones(SpawnableMutation mut) { if (allDrones == null) { allDrones = new List <GardenDrones>(); } foreach (GardenDrones drone in allDrones) { // for each drone, if the mutation is in its patrol area, add that mutation to its list of mutations if (CalcDistance2D(drone.patrolPoint, mut.transform) < drone.patrolDistance) { drone.mutations.Add(mut); if (drone.state == DroneState.Patrolling) { drone.NewTarget(); } } } }
public static void AddMutationToBots(SpawnableMutation mut) { if (allBots == null) { allBots = new List <GardenEye>(); } foreach (GardenEye bot in allBots) { // for each drone, if the mutation is in its patrol area, add that mutation to its list of mutations if (CalcDistance2D(bot.patrolPoint, mut.transform) < bot.patrolDistance) { bot.mutations.Add(mut); if (bot.state == BotState.Following) { bot.NewTarget(); } } } }
IEnumerator TurnToLook(GameObject targetObject) { state = DroneState.Waiting; float ratio = 0; float duration = waitDuration; float elapsed = 0; Quaternion begin = transform.rotation; transform.LookAt(targetObject.transform); transform.eulerAngles = new Vector3(0, transform.eulerAngles.y, transform.eulerAngles.z); Quaternion end = transform.rotation; transform.rotation = begin; while (ratio < 1) { yield return(null); elapsed += Time.deltaTime; ratio = elapsed / duration; transform.rotation = Quaternion.Slerp(begin, end, TweeningFunctions.EaseOut(ratio)); } if (targetObject.GetComponent <SpawnableMutation>()) { state = DroneState.Approaching; target = targetObject.GetComponent <SpawnableMutation>(); } else { state = DroneState.Patrolling; } }
private void Start() { dif = growthMinMax[1] - growthMinMax[0]; spawnable = GetComponent <SpawnableMutation>(); }