private void StartThunderStrikePhase() { CurrentPhase = ThunderstormPhase.Inactive; CurrentThunderStrike = 0; Invoke(nameof(NewThunderStrike), UnityEngine.Random.Range(StrikeTimeInterval, 1.5f * StrikeTimeInterval)); }
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(); } } }
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); }
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. }