Пример #1
0
    void Update()
    {
        //Debug.Log("crouched " + crouched);
        //Debug.Log("inair " + inAir);
        //stops player from being able to move if in pause or countdown

        if ((countDown == null || !countDown.getCountDown()) && (gameplayPause == null || !gameplayPause.getPaused()) /*&& (!countDown.isFading())*/)
        {
            if (!Dead)
            {
                performFriction = true;

                #region Super meter charge
                // Uncomment the following line for instant meter recharge
                //superMeterCharge += maxSuperCharge;
                // Passive meter charge, maybe vary by character
                superMeterCharge += maxSuperCharge / 100f * Time.deltaTime;
                if (superMeterCharge > maxSuperCharge)
                {
                    superMeterCharge = maxSuperCharge;
                }
                // Debug.Log("meter charge " + superMeterCharge);
                superBar.value = superMeterCharge;
                if (superBar.value >= 100.0f)        //Superbar UI slider glow fades in (quickly) when super meter is full
                {
                    if (superBarGlow.color.a < 1.0f) //until the glow is fully faded in
                    {
                        superBarGlow.color = new Color(0.8784314f, 1f, 0f, superBarGlow.color.a + 0.05f);
                    }
                    //modify last value ^^^ for the fade in rate
                }
                else //otherwise the glow is not present unless super meter is full
                {
                    superBarGlow.color = new Color(0.8784314f, 1f, 0f, 0f);
                }

                #endregion Super meter charge

                #region Falling and jumping animations
                if (!blockHorizontalMovement && !blockNormalJumpAnims)  // Or any other special condition is in effect
                {
                    if (rb.velocity.y < -0.5f)
                    {
                        // landing = true;
                        if (currentBandMember == "John" || !isSuperActive)
                        {
                            PlayAnims("Fall");
                        }
                        lowerBodyHitbox.offset = lowOriginalOffset;
                        lowerBodyHitbox.size   = lowOriginalSize;
                    }
                    if (rb.velocity.y > 0.5)
                    {
                        if (currentBandMember == "John" || !isSuperActive)
                        {
                            PlayAnims("Jump");
                        }
                        lowerBodyHitbox.offset = new Vector2(lowOriginalOffset.x, -0.05f);
                        lowerBodyHitbox.size   = new Vector2(lowOriginalSize.x, 0.34f);
                    }
                }
                #endregion Falling and jumping animations

                #region Crouching
                if ((Input.GetKey(down) || (!Input.GetKey(up) && Input.GetAxisRaw(vert) > 0.5)) && !inAir &&
                    (currentBandMember == "John" || !isSuperActive)) // This is a hacky fix
                {                                                    // This line used to have !attacking
                    if (!crouched)
                    {
                        playerUpperBody.transform.localPosition = new Vector3(0, -crouchDistance);
                    }
                    crouched = true;
                    PlayAnims("Crouch");
                    upperBodyHitbox.SetActive(false);
                    if (!listeningForDoubleDownTap)
                    {
                        listeningForDoubleDownTap = true;
                        StartCoroutine(listenForDoubleDownTap());
                    }
                }
                else
                {
                    if (crouched)
                    {
                        playerUpperBody.transform.localPosition = new Vector3(0, 0);
                        playerLowerAnim.Play(GetAnimName("IdleLegs"));
                    }
                    crouched = false;
                    playerUpperBody.transform.localPosition = new Vector3(0, 0);
                    upperBodyHitbox.SetActive(true);
                }
                #endregion Crouching

                pj.HandleJump();

                #region Attacks
                //Z: Short Range Attack    X: Long Range Attack    C: Super Attack
                if (Input.GetKeyDown(CAttack) && !attacking)
                {
                    StartCoroutine(paa.shortRangeAttackAnims());
                    StartCoroutine(pam.pa.AttackShort());
                }
                else if (Input.GetKey(RAttack) && !attacking)
                {
                    StartCoroutine(paa.longRangeAttackAnims());
                    StartCoroutine(pam.pa.AttackLong());
                }
                else if (Input.GetKeyDown(SAttack) && !attacking &&
                         !isSuperActive && superMeterCharge >= maxSuperCharge)
                {
                    superMeterCharge = 0f;
                    StartCoroutine(paa.superAttackAnims());
                    StartCoroutine(pam.pa.AttackSuper());
                }
                #endregion Attacks

                phm.HandleHorizontalMovement();

                #region Serj flight vertical movement
                if (serjFlightActive)
                {
                    if (Input.GetKey(up))
                    {
                        rb.velocity = new Vector2(rb.velocity.x, maxAirSpeed * 0.85f);
                    }
                    else if (Input.GetKey(down))
                    {
                        rb.velocity = new Vector2(rb.velocity.x, -maxAirSpeed * 0.85f);
                    }
                }
                #endregion

                #region Serj wing animations
                if (serjFlightActive)
                {
                    serjWings.GetComponent <SpriteRenderer>().enabled = true;
                }
                else
                {
                    serjWings.GetComponent <SpriteRenderer>().enabled = false;
                }
                #endregion

                #region Invulnerability Timer Tick
                if (curInvulnerableTime > 0f)
                {
                    curInvulnerableTime -= Time.deltaTime;
                    if (curInvulnerableTime < 0f)
                    {
                        curInvulnerableTime = 0f;
                    }
                }
                #endregion
            }
            else
            {
                // Death animation
                if (!deathStarted)
                {
                    isDead = true;
                    StartCoroutine("Kill");
                    deathStarted = true;

                    // Serj edge case
                    if (serjFlightActive)
                    {
                        rb.gravityScale  = 5f; // If gravityScale on prefab changes, this is no longer correct
                        rb.drag          = 0f;
                        serjFlightActive = false;
                        PlayAudioEvent(serjFlyEnd);
                        serjWings.GetComponent <SpriteRenderer>().enabled = false;
                    }
                }
            }
        }
        else if (!Dead)
        {
            PlayAnims("Idle");
        }
        else
        {
            PlayAnims("Death");
        }
    }