예제 #1
0
    void Update()
    {
        mRigidBody.isKinematic = true;

        if (!floorBoundaryInitialized)
        {
            // get current boundary
            mFloorControllerRef.GetCurrentFloorBoundary(mFloorBoundary, mFloorIndex, mSpriteRenderer);
            floorBoundaryInitialized = true;
        }

        ResetBoolean();

        if (!mAppearing)
        {
            if (!mGetHit && !mDying && mFloorIndex == mTarget.gameObject.GetComponent <Player> ().GetLayerIndex())
            {
                if (attackTimer > attackTimeWait && Vector2.Distance(transform.position, mTarget.position) < mAttackDistance && mTarget.position.y < (transform.position.y + 1) && mTarget.position.y > (transform.position.y - 1))
                {
                    attackTimer = 0;
                    Throw();
                }
                else if (Vector2.Distance(transform.position, mTarget.position) < mFollowRange)
                {
                    if (mTarget.position.x >= transform.position.x)
                    {
                        FaceDirection(Vector2.right);
                    }
                    else
                    {
                        FaceDirection(Vector2.left);
                    }

                    if (mTarget.position.y > (transform.position.y + 1))
                    {
                        MovingUp();
                    }
                    else if (mTarget.position.y < (transform.position.y - 1))
                    {
                        MovingDown();
                    }
                }
            }

            attackTimer += Time.deltaTime;

            if (mStats.isDead() && !mDying)
            {
                Die();
            }

            if (mDying)
            {
                dyingTimer += Time.deltaTime;
                if (dyingTimer >= 1.5f)
                {
                    Destroy(gameObject);
                }
            }

            if (mGetHit)
            {
                mInvincibleTimer += Time.deltaTime;
                if (mInvincibleTimer >= kInvincibilityDuration)
                {
                    mGetHit          = false;
                    mInvincibleTimer = 0.0f;
                }
            }
            audioTimer += Time.deltaTime;
        }
        else
        {
            appearingTimer += Time.deltaTime;
            if (appearingTimer >= 1.0f)
            {
                mAppearing     = false;
                appearingTimer = 0.0f;
            }
        }

        UpdateAnimator();
    }
예제 #2
0
    void Update()
    {
        if (!floorBoundaryInitialized)
        {
            // get current boundary
            mFloorControllerRef.GetCurrentFloorBoundary(mFloorBoundary, mFloorIndex, mSpriteRenderer);
            floorBoundaryInitialized = true;
        }

        ResetBoolean();
        if (staggerTimer > 0f)
        {
            staggerTimer -= 0.6f;
        }
        if (attackTimer > attackTimeWait && !mGetHit && staggerTimer <= 0 && !mDying && mFloorIndex == mTarget.gameObject.GetComponent <Player> ().GetLayerIndex())
        {
            if (Vector2.Distance(transform.position, mTarget.position) <= (mAttackDistance + 0.05))
            {
                attackTimer = 0;
                knifeHit.Play();
                Hit();
            }
            else if (Vector2.Distance(transform.position, mTarget.position) <= mFollowRange && Vector2.Distance(transform.position, mTarget.position) > mAttackDistance)
            {
                if (transform.position.x < mTarget.position.x)
                {
                    MovingRight();
                }
                else if (transform.position.x > mTarget.position.x)
                {
                    MovingLeft();
                }

                if (transform.position.y < mTarget.position.y)
                {
                    MovingUp();
                }
                else if (transform.position.y > mTarget.position.y)
                {
                    MovingDown();
                }
            }
        }

        attackTimer += Time.deltaTime;

        if (mStats.isDead() && !mDying)
        {
            Die();
        }

        UpdateAnimator();

        if (mDying)
        {
            dyingTimer += Time.deltaTime;
            if (dyingTimer >= 1.0f)
            {
                Destroy(gameObject);
            }
        }

        if (mGetHit)
        {
            mInvincibleTimer += Time.deltaTime;
            if (mInvincibleTimer >= kInvincibilityDuration)
            {
                mGetHit          = false;
                mInvincibleTimer = 0.0f;
            }
        }

        if (mHitting)
        {
            hittingTimer += Time.deltaTime;
            if (hittingTimer >= 0.5f)
            {
                hittingTimer = 0.0f;
                mHitting     = false;
            }
        }
        audioTimer += Time.deltaTime;
    }
예제 #3
0
    /// <summary>
    /// Main flow of the player
    /// </summary>
    void FixedUpdate()
    {
        Debug.Log(mStats.Level);
        if (!dead && mHealthBarRef.GetHealth() <= 0)
        {
            Die();
        }

        if (mDying)
        {
            dyingTimer += Time.deltaTime;
            if (dyingTimer >= 1.45f)
            {
                mDying     = false;
                dyingTimer = 0f;
            }
        }

        if (mNormalAttack >= 0 && mAnimator.GetCurrentAnimatorStateInfo(0).IsName("Idle"))
        {
            mNormalAttack = -1;
            mHitting      = false;
        }

        if (!floorBoundaryInitialized)
        {
            // get current boundary
            mFloorControllerRef.GetCurrentFloorBoundary(mFloorBoundary, mFloorIndex, mSpriteRenderer);
            floorBoundaryInitialized = true;
        }
        if (mInflate)
        {
            mInflated     = true;
            canMove       = false;
            inflateTimer += Time.deltaTime;
            if (inflateTimer >= maxInflateTimer)
            {
                if (transform.position.x > (target + 0.1f))
                {
                    if (!deflating.isPlaying)
                    {
                        deflating.Play();
                    }
                    float distCovered = (Time.time - startTime) * 0.5f;
                    float fracJourney = distCovered / journeyLength;
                    transform.position = Vector3.Lerp(transform.position, new Vector3(target, transform.position.y, transform.position.z), fracJourney);
                }
                else
                {
                    deflating.Stop();
                    mInflate     = false;
                    mInflated    = false;
                    inflateTimer = 0.0f;
                }
            }
        }
        //Teleport back up
        if (transform.position.y <= mGroundY && mJumping)
        {
            mRigidBody.useGravity = false;
            mRigidBody.velocity   = new Vector3(0, 0, 0);
            transform.position    = new Vector3(transform.position.x, mGroundY, transform.position.z);
            mJumping = false;
        }

        //get out of jumping?! / slide / Dash / Handle dash recovery
        if (mJumping && mAnimator.GetCurrentAnimatorStateInfo(0).IsName("Idle") && Mathf.Approximately(transform.position.y, mGroundY))
        {
            mJumping = false;
        }
        else if (mSliding && !mAnimator.GetCurrentAnimatorStateInfo(0).IsName("Sliding"))
        {
            mSliding = false;
        }
        else if (mDashing && dashTime > 35)
        {
            mDashing     = false;
            dashRecovery = 0;
        }
        if (dashRecovery < 10 && !mDashing)
        {
            dashRecovery++;
        }

        //Instruction priority
        if (inStory)
        {
            ResetBoolean();
            if (moveRight)
            {
                MovingRight();
            }
            else if (moveUp)
            {
                MovingUp();
            }
            if (canWalk)
            {
                if (Input.GetButton("Left") || Input.GetKey(KeyCode.A))
                {
                    WalkLeft();
                }
                else if (Input.GetButton("Right") || Input.GetKey(KeyCode.D))
                {
                    WalkRight();
                }
                if (Input.GetButton("Up") || Input.GetKey(KeyCode.W))
                {
                    WalkUp();
                }
                else if (Input.GetButton("Down") || Input.GetKey(KeyCode.S))
                {
                    WalkDown();
                }
            }
            transform.localPosition = new Vector3(
                Mathf.Clamp(transform.localPosition.x, mFloorBoundary [Floor.X_MIN_INDEX], mFloorBoundary [Floor.X_MAX_INDEX]),
                Mathf.Clamp(transform.localPosition.y, mFloorBoundary [Floor.Y_MIN_INDEX], mFloorBoundary [Floor.Y_MAX_INDEX]),
                transform.localPosition.z
                );
            mGroundY = transform.position.y;
        }
        else if (mDashing)
        {
            ResetBoolean();
            DashHandler();
        }
        else if (mJumping)
        {
            ResetBoolean();
            //Jump attack
            MovementHandler();
        }
        else
        {
            transform.position = new Vector3(transform.position.x, transform.position.y, -1f);
            transform.rotation = Quaternion.Euler(0f, 0f, 0f);
            if (!ActionHandler())
            {
                if (CanMove())
                {
                    bool isJumping = mJumping;
                    ResetBoolean();
                    MovementHandler();
                    JumpHandler();
                }
            }
        }

        if (mRunning)
        {
            timerForSlide++;
        }
        else
        {
            timerForSlide = 0;
        }

        mShadow.transform.position = new Vector3(transform.position.x, (mGroundY - mSpriteRenderer.bounds.size.y / 2), transform.position.z);

        CheckFalling();

        // if one is not jumping or falling, then they must be on the floor, meaning they must abide by the boundaries.
        if (!mJumping && !mFalling)
        {
            transform.position = new Vector3(Mathf.Clamp(transform.position.x, mFloorBoundary [Floor.X_MIN_INDEX], mFloorBoundary [Floor.X_MAX_INDEX]), Mathf.Clamp(transform.position.y, mFloorBoundary [Floor.Y_MIN_INDEX], mFloorBoundary [Floor.Y_MAX_INDEX]), transform.position.z);
        }
        UpdateOrderInLayer();

        if (mGetHit)
        {
            mInvincibleTimer += Time.deltaTime;
            if (mInvincibleTimer >= kInvincibilityDuration)
            {
                mGetHit          = false;
                mInvincibleTimer = 0.0f;
            }
        }

        if (mGetKnockdown)
        {
            mInvincibleTimer += Time.deltaTime;
            if (mInvincibleTimer >= kKnockdownInvincibilityDuration)
            {
                mGetKnockdown    = false;
                mInvincibleTimer = 0.0f;
            }
        }
        hitTimer += Time.deltaTime;
        UpdateAnimator();
    }
예제 #4
0
    void Update()
    {
        if (!floorBoundaryInitialized)
        {
            // get current boundary
            mFloorControllerRef.GetCurrentFloorBoundary(mFloorBoundary, mFloorIndex, mSpriteRenderer);
            floorBoundaryInitialized = true;
        }

        ResetBoolean();

        if (mExplode)
        {
            destroyTimer += Time.deltaTime;
            if (destroyTimer >= 0.3f)
            {
                Destroy(gameObject);
            }
        }

        if (transform.position.x >= 50)
        {
            Destroy(gameObject);
        }

        if (canMove)
        {
            if (Life <= 0)
            {
                mDead = true;
            }
            else
            {
                if (transform.position.y - 0.1f <= mFloorBoundary [Floor.Y_MIN_INDEX])
                {
                    moveUp   = true;
                    moveDown = false;
                }
                else if (transform.position.y + 0.1f >= mFloorBoundary [Floor.Y_MAX_INDEX])
                {
                    moveUp   = false;
                    moveDown = true;
                }

                if (moveDown)
                {
                    MovingDown();
                }
                else if (moveUp)
                {
                    MovingUp();
                }

                if (mTarget.position.x >= transform.position.x)
                {
                    FaceDirection(Vector2.right);
                }
                else
                {
                    FaceDirection(Vector2.left);
                }
            }
        }
        else
        {
            MovingUp();
        }

        UpdateAnimator();
        audioTimer += Time.deltaTime;
    }
예제 #5
0
    void Update()
    {
        if (!floorBoundaryInitialized)
        {
            // get current boundary
            mFloorControllerRef.GetCurrentFloorBoundary(mFloorBoundary, mFloorIndex, mSpriteRenderer);
            floorBoundaryInitialized = true;
        }

        ResetBoolean();

        if (mHit)
        {
            hitTimer += Time.deltaTime;
            if (hitTimer >= 1.0f)
            {
                hitTimer = 0.0f;
                mHit     = false;
            }
        }


        if (inStory)
        {
            if (mPumping)
            {
                pumpingTimer += Time.deltaTime;
                if (pumpingTimer >= maxPumpingTimer)
                {
                    pumping.Stop();
                    mThrowing    = false;
                    mPumping     = false;
                    pumpingTimer = 0.0f;
                    Destroy(hoseInstance);
                }
            }
        }
        else if (canMove && !mHit)
        {
            if (mPumping)
            {
                pumpingTimer += Time.deltaTime;
                if (pumpingTimer >= maxPumpingTimer)
                {
                    pumping.Stop();
                    mThrowing    = false;
                    mPumping     = false;
                    pumpingTimer = 0.0f;
                    Destroy(hoseInstance);
                }
            }
            else if (transform.position.x - player.position.x < 2.0f)
            {
                if (player.position.y > transform.position.y)
                {
                    moveUp   = true;
                    moveDown = false;
                }
                else if (player.position.y < transform.position.y)
                {
                    moveUp   = false;
                    moveDown = true;
                }
                else
                {
                    moveUp   = false;
                    moveDown = false;
                }

                if (moveDown)
                {
                    MovingDown(10);
                }
                else if (moveUp)
                {
                    MovingUp(10);
                }

                if (Mathf.Abs(player.position.y - transform.position.y) <= 0.5)
                {
                    Pumping();
                }
            }
            else
            {
                float specialAttack = Random.Range(0.0f, 100.0f);
                if (specialAttack > randomAttackTime)
                {
                    int whichAttack = Random.Range(0, 2);
                    if (whichAttack == 0 && !mHit && !mThrowRocks)
                    {
                        mThrowRocks = true;
                    }
                    else if (whichAttack == 1 && !mHit && finishThrowTitle)
                    {
                        StartCoroutine(CreateTitle());
                    }
                }
                if (mThrowRocks)
                {
                    throwRockTimer += Time.deltaTime;
                    originalPos     = camTransform.localPosition;
                    ShakeCamera();
                    if (throwRockTimer >= 2.0f)
                    {
                        throwRockTimer = 0.0f;
                        mThrowRocks    = false;
                        StartCoroutine(ThrowTiles());
                    }
                }
                else
                {
                    if (transform.position.y - 0.1f <= mFloorBoundary [Floor.Y_MIN_INDEX])
                    {
                        moveUp   = true;
                        moveDown = false;
                    }
                    else if (transform.position.y + 0.1f >= mFloorBoundary [Floor.Y_MAX_INDEX])
                    {
                        moveUp   = false;
                        moveDown = true;
                    }

                    if (moveDown)
                    {
                        MovingDown(1);
                    }
                    else if (moveUp)
                    {
                        MovingUp(1);
                    }
                }
            }
            if (throwTitle)
            {
                title [nextThrow].GetComponent <Title> ().SetLaunch();
                throwTitle = false;
                if (nextThrow == 6)
                {
                    finishThrowTitle = true;
                }
            }

            if (invincible)
            {
                invincibleTimer += Time.deltaTime;
                if (invincibleTimer > maxInvincibleTimer)
                {
                    invincibleTimer = 0.0f;
                    invincible      = false;
                }
            }
        }
        UpdateAnimator();
    }
    void Update()
    {
        if (!floorBoundaryInitialized)
        {
            // get current boundary
            mFloorControllerRef.GetCurrentFloorBoundary(mFloorBoundary, mFloorIndex, mSpriteRenderer);
            floorBoundaryInitialized = true;
        }

        ResetBoolean();

        if (mNormalAttack > 0 && mAnimator.GetCurrentAnimatorStateInfo(0).IsName("Idle"))
        {
            mNormalAttack = 0;
            mHitting      = false;
        }

        if (Input.GetKeyDown("n"))
        {
            mHealthBarRef.LoseHealth(20.0f);
        }
        else if (Input.GetKeyDown("m"))
        {
            mHealthBarRef.GainHealth(15.0f);
        }

        if (Input.GetKeyDown("z"))
        {
            //if (!mAnimator.GetCurrentAnimatorStateInfo (0).IsName ("Idle"))
            mNormalAttack++;
            mHitting = true;
        }
        else if (Input.GetKey("w"))
        {
            mStrongAttack++;
            //mHitting = true;
        }

        if (mJumping && transform.position.y <= 0)
        {
            mJumping = false;
        }
        else if (mGetHit && mAnimator.GetCurrentAnimatorStateInfo(0).IsName("Idle"))
        {
            mGetHit = false;
        }
        else if (mSliding && mAnimator.GetCurrentAnimatorStateInfo(0).IsName("Idle"))
        {
            mSliding = false;
        }

        if (mAnimator.GetCurrentAnimatorStateInfo(0).IsName("Jumping"))
        {
            mFalling = true;
        }
        else
        {
            mFalling = false;
        }

        if (!mGetHit)
        {
            if (Input.GetKey("space"))
            {
                Defend();
            }
            else if (Input.GetKeyDown("a"))
            {
                Jump();
            }
            else
            {
                if (Input.GetButton("Left"))
                {
                    MovingLeft();
                }
                else if (Input.GetButton("Right"))
                {
                    MovingRight();
                }
                if (Input.GetButton("Up"))
                {
                    MovingUp();
                }
                else if (Input.GetButton("Down"))
                {
                    MovingDown();
                    // if u pass the bottom of the floor boundary
                    if (transform.position.y < mFloorBoundary[Floor.Y_MIN_INDEX])
                    {
                        int newFloorIndex = mFloorControllerRef.NextFloorDown(mFloorIndex);
                        if (newFloorIndex != mFloorIndex)
                        {
                            mFloorIndex = newFloorIndex;
                            mFloorControllerRef.GetCurrentFloorBoundary(mFloorBoundary, mFloorIndex, mSpriteRenderer);
                            mJumping = true;
                            mFalling = true;
                        }
                    }
                }

                transform.position = new Vector3(Mathf.Clamp(transform.position.x, mFloorBoundary[Floor.X_MIN_INDEX], mFloorBoundary[Floor.X_MAX_INDEX]), Mathf.Clamp(transform.position.y, mFloorBoundary[Floor.Y_MIN_INDEX], mFloorBoundary[Floor.Y_MAX_INDEX]), transform.position.z);
                UpdateOrderInLayer();
            }
        }

        if (Input.GetKeyDown("s"))
        {
            GetHit();
        }
        else if (Input.GetKeyDown("d"))
        {
            GetKnockdown();
        }
        else if (mMoving && Input.GetKeyDown("f"))
        {
            Slide();
        }
        else if (Input.GetKeyDown("q"))
        {
            Dash();
        }

        // if one is not jumping or falling, then they must be on the floor, meaning they must abide by the boundaries.
        if (!mJumping && !mFalling)
        {
            transform.position = new Vector3(Mathf.Clamp(transform.position.x, mFloorBoundary[Floor.X_MIN_INDEX], mFloorBoundary[Floor.X_MAX_INDEX]), Mathf.Clamp(transform.position.y, mFloorBoundary[Floor.Y_MIN_INDEX], mFloorBoundary[Floor.Y_MAX_INDEX]), transform.position.z);
        }
        UpdateOrderInLayer();

        UpdateAnimator();
    }