private bool TickPlayback() { if (m_SequenceIndex < 0 || m_SequenceIndex >= m_MorseTypeSequence.Count) { return(true); } MorseType morseType = m_MorseTypeSequence[m_SequenceIndex]; if (m_LastPlaybackSoundTimestamp + GetPlaybackLengthForMorseType(morseType) <= Time.time) { m_SequenceIndex++; if (m_SequenceIndex >= m_MorseTypeSequence.Count) { return(true); } // Play next playback sequence MorseType nextMorseType = m_MorseTypeSequence[m_SequenceIndex]; PlayPlaybackSound(nextMorseType); } return(false); }
private void GenerateMorseCodeSequence() { for (int i = 0; i < GameManager.Instance.settings.AmountSoundsPerSequence; i++) { MorseType randomMorseType = m_MorseTypeSequence.Count(morseType => morseType == MorseType.Long) < settings.MaxAmountLongSoundsPerSequence ? (MorseType)Random.Range(0, 2) : MorseType.Short; m_MorseTypeSequence.Add(randomMorseType); } }
private float GetInputToleranceForMorseType(MorseType type) { switch (type) { default: case MorseType.Short: return(settings.ShortInputTolerance); case MorseType.Long: return(settings.LongInputTolerance); } }
private MinigameTickResult TickInput() { MorseType morseType = m_MorseTypeSequence[m_SequenceIndex]; KeyCode actionKeyCode = GetKeyCode(InputHelper.Keys.Action); if (!m_LastUserInputTimestamp.HasValue) { if (m_InputFrameStartTimestamp + settings.InputDelayTolerance <= Time.time) { // FAILED due to inactivity return(MinigameTickResult.Failed); } if (Input.GetKeyDown(actionKeyCode)) { m_LastUserInputTimestamp = Time.time; PlayInputSound(m_MorseTypeSequence[m_SequenceIndex]); } } else { if (!Input.GetKey(actionKeyCode)) { float keyPressedDuration = Time.time - m_LastUserInputTimestamp.Value; float morseTypeDuration = GetPlaybackLengthForMorseType(morseType); float inputTolerance = GetInputToleranceForMorseType(morseType); if (keyPressedDuration >= morseTypeDuration - inputTolerance && keyPressedDuration <= morseTypeDuration + inputTolerance) { // Success m_SequenceIndex++; if (m_SequenceIndex >= m_MorseTypeSequence.Count) { return(MinigameTickResult.EarlySuccess); } m_LastUserInputTimestamp = null; } else { // Fail return(MinigameTickResult.Failed); } } } return(MinigameTickResult.ContinueTick); }
private float GetPlaybackLengthForMorseType(MorseType type) { switch (type) { case MorseType.Short: return(settings.ShortPlaybackTime); case MorseType.Long: return(settings.LongPlaybackTime); } return(0.0f); }
private void PlayInputSound(MorseType morseType) { GameObject spawnGO = new GameObject("MorseGame"); spawnGO.transform.position = new Vector3(305, 0, 105); var gameObject = Object.Instantiate(GameManager.Instance.settings.MorseSoundPrefab); gameObject.transform.position = spawnGO.transform.position; gameObject.transform.rotation = Quaternion.AngleAxis(90, Vector3.right); MorseSound morseSound = gameObject.GetComponent <MorseSound>(); morseSound.SetMorseDuration(GetPlaybackLengthForMorseType(morseType), settings.MorseColorInput); }