Ejemplo n.º 1
0
    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));
    }
Ejemplo n.º 2
0
    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;
    }
Ejemplo n.º 3
0
 public void RemoveFinisherMove(FinisherAbstract finisher)
 {
     FinisherMoves.Remove(finisher);
 }
Ejemplo n.º 4
0
 public void AddFinisherMove(FinisherAbstract finisher)
 {
     FinisherMoves.Add(finisher);
 }
Ejemplo n.º 5
0
    // 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;
    }