void Update() { curTimer += Time.deltaTime; speakingNear.Clear(); foreach (var speaker in shutUpWhenOtherSpeaking) { if (speaker.currentNotePattern != null && Vector3.Distance(speaker.transform.position, transform.position) < shutUpWhenOtherSpeakingRadius) { speakingNear.Add(speaker); } } if (speakingNear.Count > 0) { curState = IdlePatternState.ShuttingUp; playNotes.StopPlaying(); curTimer = 0f; } switch (curState) { case IdlePatternState.PlayingNotes: if (playNotes.currentPattern == null) { curState = IdlePatternState.PausedBetween; curTimer = 0f; } break; case IdlePatternState.PausedBetween: if (curTimer > pauseBetweenRepeats) { if (playNotes.currentPattern == null) { playNotes.PlayPattern(pattern, volume); curState = IdlePatternState.PlayingNotes; } } break; case IdlePatternState.ShuttingUp: if (speakingNear.Count == 0 && curTimer > pauseBeforeResume) { if (playNotes.currentPattern == null) { playNotes.PlayPattern(pattern, volume); curState = IdlePatternState.PlayingNotes; } } break; default: break; } }