コード例 #1
0
    private IEnumerator ReWriteTurnTheKey()
    {
        yield return(new WaitUntil(() => (bool)ActivatedField.GetValue(Module.BombComponent.GetComponent(ComponentType))));

        yield return(new WaitForSeconds(0.1f));

        StopAllCorotinesMethod.Invoke(Module.BombComponent.GetComponent(ComponentType), null);

        ((KMSelectable)_lock).OnInteract = () => OnKeyTurn();
        int expectedTime = (int)TargetTimeField.GetValue(Module.BombComponent.GetComponent(ComponentType));

        if (Math.Abs(expectedTime - Module.Bomb.CurrentTimer) < 30)
        {
            yield return(new WaitForSeconds(0.1f));

            AttemptedForcedSolve = true;
            HandleForcedSolve();
            yield break;
        }

        while (!Module.Solved)
        {
            int time = Mathf.FloorToInt(Module.Bomb.CurrentTimer);
            if ((!OtherModes.Unexplodable && time < expectedTime || OtherModes.Unexplodable && time > expectedTime) &&
                !(bool)SolvedField.GetValue(Module.BombComponent.GetComponent(ComponentType)) &&
                !TwitchPlaySettings.data.AllowTurnTheKeyEarlyLate)
            {
                Module.BombComponent.GetComponent <KMBombModule>().HandleStrike();
            }
            yield return(new WaitForSeconds(2.0f));
        }
    }
コード例 #2
0
    private void OnActivate()
    {
        string   serial   = Module.Bomb.QueryWidgets <string>(KMBombInfo.QUERYKEY_GET_SERIAL_NUMBER).First()["serial"];
        TextMesh textMesh = (TextMesh)DisplayField.GetValue(Module.BombComponent.GetComponent(ComponentType));

        ActivatedField.SetValue(Module.BombComponent.GetComponent(ComponentType), true);

        if (string.IsNullOrEmpty(_previousSerialNumber) || !_previousSerialNumber.Equals(serial) || _keyTurnTimes.Count == 0)
        {
            if (!string.IsNullOrEmpty(_previousSerialNumber) && _previousSerialNumber.Equals(serial))
            {
                Animator keyAnimator = (Animator)KeyAnimatorField.GetValue(Module.BombComponent.GetComponent(ComponentType));
                KMAudio  keyAudio    = (KMAudio)KeyAudioField.GetValue(Module.BombComponent.GetComponent(ComponentType));
                AttemptedForcedSolve = true;
                PrepareSilentSolve();
                Module.BombComponent.GetComponent <KMBombModule>().HandlePass();
                KeyUnlockedField.SetValue(Module.BombComponent.GetComponent(ComponentType), true);
                SolvedField.SetValue(Module.BombComponent.GetComponent(ComponentType), true);
                keyAnimator.SetBool("IsUnlocked", true);
                keyAudio.PlaySoundAtTransform("TurnTheKeyFX", Module.transform);
                textMesh.text = "88:88";
                return;
            }

            _keyTurnTimes.Clear();
            for (int i = OtherModes.Unexplodable ? 45 : 3; i < (OtherModes.Unexplodable ? 3600 : Module.Bomb.CurrentTimer - 45); i += 3)
            {
                _keyTurnTimes.Add(i);
            }
            if (_keyTurnTimes.Count == 0)
            {
                _keyTurnTimes.Add((int)(Module.Bomb.CurrentTimer / 2f));
            }

            _keyTurnTimes         = _keyTurnTimes.Shuffle().ToList();
            _previousSerialNumber = serial;
        }
        TargetTimeField.SetValue(Module.BombComponent.GetComponent(ComponentType), _keyTurnTimes[0]);

        string display = $"{_keyTurnTimes[0] / 60:00}:{_keyTurnTimes[0] % 60:00}";

        _keyTurnTimes.RemoveAt(0);

        textMesh.text = display;
    }