IEnumerator ExecuteFinisher(FinisherAbstract FinisherToPerform) { PerformingFinisher = false; ExecutingFinisher = true; PrimaryAttackPopUp.SetActive(false); RunicRinisherGuides.SetActive(false); InFinisherIcons.SetActive(false); finisherSlider.value = 0; CharAnim.Play("Finisher_End"); if (PillarFinisherUsed) { PillarTutorial.PlayFinisherHit(); FinisherToPerform.SetAsPiller(); } else { if (enemyAnimator) { enemyAnimator.Play("Finisher_Start"); } } yield return(new WaitForSecondsRealtime(1f)); FinisherToPerform.startfinisher(this); FinisherToPerform.RestoreAsPiller(); yield return(null); // do stuff to perform the finisher IncreaseGodModeMeter(PlayerDamageValues.Instance.ExecuteFinisherGMFill); StartCoroutine(LeavingFinisherMode(FinisherToPerform)); }
IEnumerator LeavingFinisherMode(FinisherAbstract finisherAbstractUsed = null) { UIanim.Play("idle"); if (didFail) { CharAnim.Play("Finisher_End"); yield return(new WaitForSecondsRealtime(1f)); CharAnim.Play("Idle"); } Player.GetComponent <PlayerMovementController>().AllowMoving(); //MARK: barely noticable bug where if you move and do flamethrower finisher, you may move for 1 frame Player.GetComponent <PlayerMovementController>().AllowTurning(); if (!PillarFinisherUsed) { if (currentTarget.tag != "TargetDummy") { if (finisherAbstractUsed != null && (finisherAbstractUsed is Siphoncut)) //electricity is used for siphoning for now { currentTarget.GetComponent <EnemyAI>().KillEnemy(true); } else { currentTarget.GetComponent <EnemyAI>().KillEnemy(); enemyAnimator.Play("Death"); if (currentTarget.GetComponent <EnemyTypeController>().MyEnemyType == EnemyType.Boss) { currentTarget.GetComponent <EnemyAI>().anim.runtimeAnimatorController = savedAnimController; } } } else { Destroy(currentTarget); } if (currentTarget != null) { currentTarget.transform.parent = null; if (currentTarget.GetComponent <EnemyAI>() != null) { currentTarget.GetComponent <EnemyAI>().ChangeStatus(EnemyBehaviorStatus.PrimaryAttacker); currentTarget.GetComponent <EnemyMovementController>().HelpKnockback(); } } } else if (!didFail) //TutorialPopupStuff { Invoke("HidePopup", 4f); gameStatus.CheckpointP = currentTarget.transform.position + currentTarget.transform.forward * 2; Invoke("SaveGame", 2f); IncreaseFinisherMeter(100); Instantiate(postShrine, currentTarget.transform.position, currentTarget.transform.rotation); Destroy(currentTarget); } else { Invoke("HidePopup", 0f); } didFail = false; inFinisherMode = false; ExecutingFinisher = false; PillarFinisherUsed = false; CurrentFinisherMode = FinisherModes.Runic; currentTarget = null; yield return(null); swordController.ResumeAttacking(); if (GameStatus.InCombat) { cam.SwitchCombatLocation(); } else { cam.SwitchCombatLocation(); } FinisherModeCooldownCount = 0; Time.timeScale = 1; GameStatus.FinisherModeActive = false; }
public void RemoveFinisherMove(FinisherAbstract finisher) { FinisherMoves.Remove(finisher); }
public void AddFinisherMove(FinisherAbstract finisher) { FinisherMoves.Add(finisher); }
// Update is called once per frame void Update() { if (!inFinisherMode) { if (FinisherModeCooldownCount >= FinisherModeCooldownTime && CanFinish) { if (PillarFinisherNearby && PillarTarget != null)//TutorialPillarComment { FinisherIcon.SetActivated(true); FinisherIcon.transform.position = PillarTarget.transform.position; FinisherIcon.transform.position += Vector3.up * 2f; if (TryFinisher && !GameStatus.GamePaused) { PillarFinisherUsed = true; currentTarget = PillarTarget; PillarTutorial = PillarTarget.GetComponent <TutorialPillar>(); switch (PillarTutorial.FinisherUnlock) { case Finishers.Siphoning: GetComponent <Siphoncut>().enabled = true; break; case Finishers.FlameSword: GetComponent <RunicFireSword>().enabled = true; break; case Finishers.Flamethrower: GetComponent <RunicFlamethrower>().enabled = true; break; case Finishers.FlameAOE: GetComponent <RunicFireCircle>().enabled = true; break; case Finishers.FrostAOE: GetComponent <RunicFrostCircle>().enabled = true; break; } StartCoroutine(EnterFinisherMode(false)); } } else if (finisherSlider.value >= 100) { currentTarget = GetClosestEnemy(); FinisherFullImage.SetActive(true); if (TryFinisher && !GameStatus.GamePaused) //Input.GetButtonDown("FinishMode") { if (currentTarget != null) { finisherSlider.value = 25; FinisherFullImage.SetActive(false); StartCoroutine(EnterFinisherMode(usedSwordGrapple)); } else { print("No nearby enemy"); } } } else { FinisherFullImage.SetActive(false); } } else { FinisherModeCooldownCount += Time.deltaTime; FinisherIcon.SetActivated(false); } //Increase UI slider for Finisher && temp cheat if (Input.GetKeyDown(KeyCode.G)) { IncreaseFinisherMeter(100); } if (Input.GetKeyDown(KeyCode.H)) { IncreaseGodModeMeter(100); } } else { CameraBase.rotation = PlayerRotWrapper.rotation; if (PerformingFinisher && !ExecutingFinisher && !GameStatus.GamePaused) //MARK: Unsure of how we will do the full finisher carves { if (!PillarFinisherUsed) { currentTarget.transform.position = EnemyFinisherPlacement.position; currentTarget.transform.rotation = EnemyFinisherPlacement.rotation; if (!PillarFinisherUsed) { currentTarget.transform.Rotate(new Vector3(0, -40, 0)); } } if (Input.GetButtonDown("QuickFinish")) { FailFinisherMode(); return; } ProcessPlayerInput(); bool goodSoFar = false; foreach (FinisherAbstract RCombo in FinisherMoves) { goodSoFar = RCombo.checkSoFar(RunicQue); if (goodSoFar) { if (RCombo.check(RunicQue)) { PrimaryAttackPopUp.SetActive(true); if (PillarFinisherUsed) { if (PillarTutorial) { PillarTutorial.PlayFinalHit(); } } } break; } } if (!goodSoFar) { FailFinisherMode(); return; } //inside the primary attack check, see if they did a correct sequence, and succeed or fail if (Input.GetButtonDown("Execute")) { bool goodCombo = false; FinisherAbstract FinisherToPerform = null; foreach (FinisherAbstract f in FinisherMoves) { //goodCombo = f.startfinisher(this, RunicQue); goodCombo = f.check(RunicQue); FinisherToPerform = f; if (goodCombo) { break; } } if (!goodCombo) { FailFinisherMode(); } else { StartCoroutine(ExecuteFinisher(FinisherToPerform)); } } if (FinisherCount <= 0 && !ExecutingFinisher && !PillarFinisherUsed) { FailFinisherMode(); } else { FinisherCount -= Time.unscaledDeltaTime; } } } //print(NearbyEnemies); TryFinisher = false; }