Ejemplo n.º 1
0
    private void StartThunderStrikePhase()
    {
        CurrentPhase = ThunderstormPhase.Inactive;

        CurrentThunderStrike = 0;

        Invoke(nameof(NewThunderStrike), UnityEngine.Random.Range(StrikeTimeInterval, 1.5f * StrikeTimeInterval));
    }
Ejemplo n.º 2
0
    private void ThunderstrikeUpdate()
    {
        if (Timer.IsInProgress())
        {
            if (WithinPerfectStrikeWindow(Timer.GetProgress()))
            {
                Debug.Log($"currently WithinPerfectStrikeWindow");
            }
            else if (WithinGoodStrikeWindow(Timer.GetProgress()))
            {
                Debug.Log($"currently WithinGoodStrikeWindow");
            }

            float progress = Timer.GetProgress();

            //AnimateThunderstrike(progress); // Keep handy for debugging with colours!

            if (!ActionCommandPressed && Input.GetButtonDown("Action Command"))
            {
                Debug.Log("Action Command pressed during Thunderstrike Phase");
                MomentOfActionCommand = Timer.GetProgress();
                ActionCommandPressed  = true;

                if (WithinPerfectStrikeWindow(Timer.GetProgress()))
                {
                    PerfectActionCommandSound.Play();
                }
                else if (WithinGoodStrikeWindow(Timer.GetProgress()))
                {
                    GoodActionCommandSound.Play();
                }
                else
                {
                    MissedActionCommandSound.Play();
                }
            }

            if (!ThunderHasAppeared && Timer.GetProgress() >= TimeWindowForStrikes / 2)
            {
                SpawnThunderBolt();
                StartCoroutine(DamageVictim(GoodStrikeTimeWindow / 2));
            }
        }

        if (Timer.IsFinished())
        {
            CurrentPhase = ThunderstormPhase.Inactive;

            if (CurrentThunderStrike < TotalThunderStrikes)
            {
                Invoke(nameof(NewThunderStrike), Random.Range(StrikeTimeInterval, 1.5f * StrikeTimeInterval));
            }
            else
            {
                EndAbility();
            }
        }
    }
Ejemplo n.º 3
0
    private void StartThunderCloudPhase()
    {
        Presses      = 0;
        CurrentPhase = ThunderstormPhase.Cloud;

        Thunder.SetActive(true);
        Thunder.transform.position   = transform.position + ThunderStormHeight * Vector3.up;
        Thunder.transform.localScale = Vector3.one * ThunderStormScale;
        Thunder.GetComponent <Renderer>().material.color = Color.white;

        Timer.StartTimer(ThunderCloudDuration);
    }
Ejemplo n.º 4
0
    private void NewThunderStrike()
    {
        CurrentThunderStrike++;
        ThunderHasAppeared   = false;
        ActionCommandPressed = false;
        Debug.Log($"New thunderstrike, currently on # {CurrentThunderStrike}");

        Thunder.SetActive(true);
        Thunder.transform.localScale = Vector3.one * ThunderStormScale;

        var possibleVictims = Array.FindAll(TargetedCombatants, combatant => combatant.GetComponent <Combatant>().IsAlive);

        CurrentVictim = possibleVictims.Length > 0 ?
                        possibleVictims[Random.Range(0, possibleVictims.Length)] :
                        TargetedCombatants[Random.Range(0, possibleVictims.Length)];

        Thunder.transform.position = CurrentVictim.transform.position + ThunderStormHeight * Vector3.up;

        CurrentPhase = ThunderstormPhase.Strike;
        Timer.StartTimer(TimeWindowForStrikes); // 10 seconds , at 5 seconds, that is when the stirke appears and is also the perfect frame window.
    }