Example #1
0
    // Update is called once per frame
    void FixedUpdate()
    {
        Vector3 vel = gameObject.GetComponent <Rigidbody2D>().velocity;

        vel += rightAcceleration * Time.deltaTime;

        Vector3 position = transform.position;

        if (position.y < -10 || position.y > 10)
        {
            position.y         = 0;
            transform.position = position;
        }

        onTheGround = false;
        Vector2 xOffset = Vector2.one / 2;

        xOffset.y = 0;


        for (int i = -1; i < 2; i++)
        {
            if (rayCastDown(xOffset * i))
            {
                onTheGround = true;
                break;
            }
        }

        if (onTheGround)
        {
            canDoubleJump = true;
            jumpReleased  = false;
            calledFalling = false;

            if (canFootstep)
            {
                float length = LevelSounds.inst.playFootstep(gameObject.transform.position);

                canFootstep = false;
                Invoke("canFootstepReset", length);
            }

            if (!onTheGroundLast)
            {
                animationBoard.Land();
            }
        }
        else
        {
            animationBoard.setGrounded(false);
            if (LevelTypeManager.currentLevel == LevelTypeManager.Level.gravityFlip)
            {
                animationBoard.Fall();
            }
            else if (vel.y <= 0)
            {
                if (!calledFalling)
                {
                    animationBoard.Fall();
                    calledFalling = true;
                    Invoke("landDelay", 0.01f);
                }
            }
        }
        vel = jumpLogic(vel, onTheGround);
        vel = doubleJumpLogic(vel, onTheGround);

        if (vel.x >= VariableSpeed.current + tempSpeedBoost)
        {
            vel.x = VariableSpeed.current + tempSpeedBoost;
        }

        gameObject.GetComponent <Rigidbody2D>().velocity = vel;

        if (transform.position.x > Camera.main.transform.position.x)
        {
            SpriteRenderer sr = gameObject.GetComponentInChildren <SpriteRenderer>();

            Vector3 worldPos = Camera.main.ScreenToWorldPoint(new Vector3(Camera.main.pixelWidth, 0.0f, 0.0f));
            Vector3 size     = sr.GetComponent <Renderer>().bounds.max - sr.GetComponent <Renderer>().bounds.min;
            worldPos.x -= size.x;
            worldPos.y  = transform.position.y;
            worldPos.z  = transform.position.z;

            if (transform.position.x > worldPos.x)
            {
                transform.position = worldPos;
            }
        }
        onTheGroundLast = onTheGround;
    }