public async void StartCountDown(bool firstMelee) { var currentCount = Interlocked.Increment(ref this.count); var countingState = CountingState.Activate; while (this.count == currentCount) { switch (countingState) { case CountingState.Activate: if (firstMelee) { announcer.AnnounceAsync("Activating first melee.", 10, 150, true); countingState = CountingState.Four; } else { announcer.AnnounceAsync("Activating normal melee.", 10, 150, true); countingState = CountingState.Five; } await Task.Delay(1000); break; case CountingState.Seven: announcer.AnnounceAsync("Seven", -5, 200); countingState = CountingState.Six; await Task.Delay(1000); break; case CountingState.Six: announcer.AnnounceAsync("Six", -5, 200); countingState = CountingState.Five; await Task.Delay(1000); break; case CountingState.Five: announcer.AnnounceAsync("Five", -5, 200); countingState = CountingState.Four; await Task.Delay(1000); break; case CountingState.Four: announcer.AnnounceAsync("Four", -5, 200); countingState = CountingState.Three; await Task.Delay(1000); break; case CountingState.Three: announcer.AnnounceAsync("Three", -5, 200); countingState = CountingState.Two; await Task.Delay(1000); break; case CountingState.Two: announcer.AnnounceAsync("Two", -5, 200); countingState = CountingState.One; await Task.Delay(1000); break; case CountingState.One: announcer.AnnounceAsync("One", -5, 200); countingState = CountingState.Attack; await Task.Delay(1000); break; case CountingState.Attack: announcer.AnnounceAsync("Attack", 10, 200); countingState = CountingState.Defense; await Task.Delay(1000); break; case CountingState.Defense: announcer.AnnounceAsync("Defense", 10, 200); countingState = CountingState.Six; await Task.Delay(1000); break; case CountingState.None: default: break; } } }