void Start() { visibilityChecker = GetComponent <CameraVisibilityChecker>(); if (StartAtCurrentWaypoint) { transform.position = PathToFollow.path_objs [CurrentWayPointID].position; transform.rotation = Quaternion.LookRotation(PathToFollow.path_objs [CurrentWayPointID + 1].position - transform.position); } animator.speed = animationSpeed; if (GetComponent <Activate_with_Tree> ().activate == false) { state = ShadeWaitState.Dormant; StopAnimation = true; audio.PlayAudio(false); } activate_with_Tree = GetComponent <Activate_with_Tree>(); detectShade = GetComponentInChildren <DetectShade>(); }
// Update is called once per frame void Update() { bool inshade = detectShade.inshade; float distance = Vector3.Distance(PathToFollow.path_objs[CurrentWayPointID].position, transform.position); switch (state) { case ShadeWaitState.Moving: StopAnimation = false; transform.position = Vector3.MoveTowards(transform.position, PathToFollow.path_objs[CurrentWayPointID].position, Time.deltaTime * currentspeed); var rotation = Quaternion.LookRotation(PathToFollow.path_objs[CurrentWayPointID].position - transform.position); transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * rotationSpeed); CheckForNextTargetOnPath(distance); audio.PlayAudio(CurrentWayPointID != 0 && visibilityChecker.isVisibleToMainCamera); if (inshade) { StopAnimation = true; audio.PlayAudio(false); state = ShadeWaitState.WaitingToLoseShade; } break; case ShadeWaitState.WaitingToLoseShade: if (!inshade) { timeToStartMovingAgain = Time.time + wait; state = ShadeWaitState.LostShade; } break; case ShadeWaitState.Dormant: if (activate_with_Tree.activate) { state = ShadeWaitState.Moving; } break; case ShadeWaitState.LostShade: if (Time.time > timeToStartMovingAgain) { if (inshade) { state = ShadeWaitState.WaitingToLoseShade; } else { state = ShadeWaitState.Moving; } } break; default: break; } }