//Update is called once per frame
    void Update()
    {
        //Menu stuff.

        if (inSettings)
        {
            float hor  = Input.GetAxis(hmove);
            float vert = Input.GetAxis(vmove);

            if (hor <= 0.8f && hor >= -0.8f && vert <= 0.8f && vert >= -0.8f)
            {
                zeroAllTimers();
            }
            else
            {
                if (hor > 0.8f && rightTimer <= 0)
                {
                    rightTimer = rightTimer == -10 ? fastTimer : normalTimer;
                    gs.MenuSelectionRight();
                }
                if (rightTimer > 0)
                {
                    rightTimer -= Time.deltaTime;
                    if (rightTimer < 0)
                    {
                        rightTimer = -10;
                    }
                }
                if (hor < -0.8f && leftTimer <= 0)
                {
                    leftTimer = leftTimer == -10 ? fastTimer : normalTimer;
                    gs.MenuSelectionLeft();
                }
                if (leftTimer > 0)
                {
                    leftTimer -= Time.deltaTime;
                    if (leftTimer < 0)
                    {
                        leftTimer = -10;
                    }
                }
                if (vert > 0.8f && upTimer <= 0)
                {
                    upTimer = upTimer == -10 ? fastTimer : normalTimer;
                    gs.MenuSelectionUp();
                }

                if (upTimer > 0)
                {
                    upTimer -= Time.deltaTime;
                    if (upTimer < 0)
                    {
                        upTimer = -10;
                    }
                }
                if (vert < -0.8f && downTimer <= 0)
                {
                    downTimer = downTimer == -10 ? fastTimer : normalTimer;
                    gs.MenuSelectionDown();
                }

                if (downTimer > 0)
                {
                    downTimer -= Time.deltaTime;
                    if (downTimer < 0)
                    {
                        downTimer = -10;
                    }
                }
            }

            if (Input.GetButton(aButton) && !lastABut)
            {
                lastABut = true;
                gs.aPressed();
                inSettings = gs.show;
            }
            if (!Input.GetButton(aButton))
            {
                lastABut = false;
            }

            if (Input.GetButton(pause) && !lastPause)
            {
                lastPause = true;
                gs.toggleVisible();
                inSettings = false;
            }
            if (!Input.GetButton(pause))
            {
                lastPause = false;
            }
        }
        else if (gs == null || !gs.show)
        {
            if (GameManager.gameIsStarted)
            {
                if (GameManager.getPlayer(characterNumber))
                {
                    activeAiming.renderer.material = GameManager.getPlayer(characterNumber).GetComponent <MeshRenderer>().material;
                }

                checkInGameMenu();

                if (!GameManager.gameSet.show && !GameManager.isPaused)
                {
                    Utility u   = (Utility)(GetComponentInParent <Character>().util);
                    float   hor = Input.GetAxis(hmove);
                    //Debug.Log ("Wall left: " + IsWallLeft() + " , " + "Wall right: " + IsWallRight() + " , " + "jumping : " + isJumping);

                    float ang = hor > 0 ? 90 : hor == 0 ? lastAng : 270;
                    transform.rotation = Quaternion.Euler(new Vector3(0, ang, 0));
                    lastAng            = ang;

                    if ((!(u is Dash) || u.countdown <= 0) && !isWallJumping)
                    {
                        float wd = wallDir(0.01f);
                        if (((hor > 0 && wd < 0) || (hor < 0 && wd > 0)))
                        {
                            hor = 0;
                        }
                        rigidbody.velocity = (new Vector3(maxSpeed * hor, rigidbody.velocity.y, 0));

                        /*
                         * if (Mathf.Abs(hor) > 0.2f && wallDir(0.01f) != 0 && Mathf.Sign(wallDir(0.01f)) != Mathf.Sign(hor))
                         * {
                         * dropTimer = dropTime;
                         * }
                         */
                    }

                    /*
                     * if (Mathf.Abs(rigidbody.velocity.x) > maxSpeed) {
                     *  rigidbody.velocity = new Vector3(maxSpeed * Mathf.Sign (rigidbody.velocity.x), rigidbody.velocity.y, 0);
                     *          }
                     */
                    transform.position = new Vector3(transform.position.x, transform.position.y, 0);

                    Vector2 aim     = new Vector2(Input.GetAxis(haim) * hAimMod, Input.GetAxis(vaim) * vAimMod);
                    float   trigger = Input.GetAxis(firetrigger);
                    if (!GetComponent <Character>().isDead)
                    {
                        if ((aim.sqrMagnitude > 0.2f || GetComponent <CharacterProjectile>().p is Fireblast) && !fired && trigger > 0.5f)
                        {
                            fired = true;
                            //Debug.Log("Player Fire " + characterNumber);
                            GetComponentInParent <CharacterProjectile>().p.bullet.GetComponent <Magic>().owningChar = gameObject;
                            GetComponent <CharacterProjectile>().p.Fire(aim);
                        }
                    }
                    if (dropTimer > 0)
                    {
                        dropTimer -= Time.deltaTime;
                    }

                    //if (trigger >= -0.5) {
                    fired = false;
                    // }

                    int tcount = 0;
                    //Utility calls.
                    if (Input.GetAxis(utilTrigger) >= 0.5f)
                    {
                        if (u.countdown <= 0)
                        {
                            //Debug.Log ("Trigger thing" + tcount++);

                            //Debug.Log ("Activate thing.");
                            u.Activate();
                        }
                    }

                    if (aim.sqrMagnitude > 0.2f)
                    {
                        activeAiming.transform.position = transform.position + new Vector3(aim.normalized.x, aim.normalized.y, 0) * 0.7f;
                    }
                    else
                    {
                        activeAiming.transform.position = new Vector3(-1000, -1000, -1000);
                    }

                    if ((Input.GetAxis(vmove) < -0.5f))
                    {
                        dropTimer           = 0;
                        rigidbody.velocity += Physics.gravity * Time.deltaTime * 3;
                    }

                    if ((!isJumping) && IsGrounded(0.01f) && (Input.GetAxis(vmove) > 0.5))
                    {
                        //Debug.Log(characterNumber);
                        isJumping          = true;
                        rigidbody.velocity = new Vector3(rigidbody.velocity.x, jumpPower, 0.0f);
                    }

                    /*
                     * if (dropTimer > 0 && IsOnWall(0.01f))
                     * {
                     * rigidbody.velocity = new Vector3(rigidbody.velocity.x, 0, rigidbody.velocity.z);
                     * rigidbody.useGravity = false;
                     *
                     * } else
                     * {
                     * rigidbody.useGravity = true;
                     * }
                     */
                    /*
                     * if ((dropTimer > 0 && IsOnWall(0.01f) && !IsGrounded(0.01f) && (Input.GetAxis(vmove) > 0.7) && Mathf.Abs(Input.GetAxis(hmove)) < Input.GetAxis(vmove)))
                     * {
                     * int wallJumpDirection = wallDir(0.01f);
                     *
                     * rigidbody.velocity = new Vector3(jumpPower * wallJumpDirection * wallJumpMod, jumpPower, 0);
                     *
                     * if (wallJumpDirection != 0)
                     * {
                     *  isWallJumping = true;
                     *  transform.position += new Vector3(wallJumpDirection / 3, 0, 0);
                     * }
                     * }
                     */
                    if (rigidbody.velocity.y > jumpPower)
                    {
                        rigidbody.velocity = new Vector3(rigidbody.velocity.x, jumpPower, rigidbody.velocity.z);
                    }

                    if (rigidbody.velocity.y < -terminalVelocity)
                    {
                        rigidbody.velocity = new Vector3(rigidbody.velocity.x, -terminalVelocity, rigidbody.velocity.z);
                    }

                    bool grounded = IsGrounded(0.01f);
                    if (!isJumping && !grounded)
                    {
                        isJumping = true;
                    }
                    if (grounded)
                    {
                        isJumping = false;
                    }
                    //isJumping = true;
                }

                ///Pausing.
                if (Input.GetButton(pause))
                {
                    //GameManager.Pause(characterNumber);
                    if (!lastPause)
                    {
                        GameManager.Pause(characterNumber);

                        if (GameObject.FindObjectOfType <MenuSystem>())
                        {
                            if (!gs.show || inSettings)
                            {
                                gs.toggleVisible();
                                inSettings = gs.show;
                            }
                        }
                    }

                    lastPause = true;
                }
                else
                {
                    lastPause = false;
                }

                //Door code.
                if (Input.GetButton(xButton) && !lastX)
                {
                    GetComponent <Character>().CheckForDoor();
                    lastX = true;
                }
                if (!Input.GetButton(xButton))
                {
                    lastX = false;
                }
            }
        }
    }