Exemple #1
0
    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);
    }
Exemple #2
0
 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);
     }
 }
Exemple #3
0
    private float GetInputToleranceForMorseType(MorseType type)
    {
        switch (type)
        {
        default:
        case MorseType.Short:
            return(settings.ShortInputTolerance);

        case MorseType.Long:
            return(settings.LongInputTolerance);
        }
    }
Exemple #4
0
    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);
    }
Exemple #5
0
    private float GetPlaybackLengthForMorseType(MorseType type)
    {
        switch (type)
        {
        case MorseType.Short:
            return(settings.ShortPlaybackTime);

        case MorseType.Long:
            return(settings.LongPlaybackTime);
        }

        return(0.0f);
    }
Exemple #6
0
    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);
    }