void UpdateMorseCode() { if (morseCodeState == MorseCodeState.Done) { return; } if (Time.time > nextStateTime) { switch (morseCodeState) { case MorseCodeState.PlayingPulse: audioSource.Stop(); telegraph.sprite = openTelegraph; if (++pulseIndex >= MorseCode.Pulses(sentence[charIndex])) { pulseIndex = 0; if (++charIndex >= sentence.Length) { morseCodeState = MorseCodeState.Done; } else { if (sentence[charIndex] == ' ') { morseCodeState = MorseCodeState.LongPause; nextStateTime += pauseBetweenWords; } else { morseCodeState = MorseCodeState.ShortPause; nextStateTime += pauseBetweenLetters; } } } else { morseCodeState = MorseCodeState.ShortPause; nextStateTime += pauseBetweenPulses; } break; case MorseCodeState.LongPause: ++charIndex; goto case MorseCodeState.ShortPause; case MorseCodeState.ShortPause: morseCodeState = MorseCodeState.PlayingPulse; nextStateTime += MorseCode.IsDash(sentence[charIndex], pulseIndex) ? dashLength : dotLength; audioSource.time = 0; audioSource.Play(); telegraph.sprite = closedTelegraph; break; } } }
void Start() { Item.IgnoreCollisions(gameObject, spawnedBy); electricity = gameObject.transform.Find("Electricity").GetComponent <SpriteRenderer>(); electricitySwapTime = Time.time + frameTime; audioSource = GetComponent <AudioSource>(); telegraph = GetComponent <SpriteRenderer>(); charIndex = 0; pulseIndex = 0; morseCodeState = MorseCodeState.ShortPause; nextStateTime = Time.time; UpdateMorseCode(); }