void Update()
    {
        environment = GameObject.Find("Environment").GetComponent <Environment> ().pushThisButton;
        if (totalTime > 0.0f)
        {
            percentElapsed = Math.Min(1.0f, percentElapsed + Time.deltaTime / totalTime);
        }

        Vector3 pos   = transform.position;
        bool    left  = Input.GetKeyDown(KeyCode.LeftArrow) || Input.GetKeyDown(KeyCode.A);
        bool    right = (Input.GetKeyDown(KeyCode.RightArrow) || Input.GetKeyDown(KeyCode.D)) && !left;

        UpdateLists();

        if (state == State.Idle && (left || right))
        {
            List <Enemy> list = left ? leftSide : rightSide;

            if (list.Count > 0)
            {
                Enemy enemy = list [0];
                list.RemoveAt(0);

                state      = State.Attack;
                desiredPos = new Vector3(enemy.transform.position.x, pos.y, pos.z);
                startPos   = pos;
                setAnimLength(0.2f);

                spriteRenderer.flipX = left;
                AttackOn();
                enemy.Hit(10);
            }
            else
            {
                score.ComboFail();
                this.health -= 1;
            }
        }

        if (state == State.Attack)
        {
            transform.position = EaseIn(startPos, desiredPos, percentElapsed);

            if (percentElapsed == 1.0f)
            {
                if (Math.Abs(transform.position.x) > maxDistanceFromCentre)
                {
                    state = State.WallJump;
                    if (player == 0)
                    {
                        if (environment == 1)
                        {
                            spriteRenderer.sprite = wallslide;
                        }
                        else if (environment == 2)
                        {
                            spriteRenderer.sprite = wallslide;
                        }
                        else if (environment == 3)
                        {
                            spriteRenderer.sprite = wallslidemono;
                        }
                        else if (environment == 4)
                        {
                            spriteRenderer.sprite = wallslidetrue;
                        }
                    }
                    else
                    {
                        if (environment == 1)
                        {
                            spriteRenderer.sprite = gwallslide;
                        }
                        else if (environment == 2)
                        {
                            spriteRenderer.sprite = gwallslide;
                        }
                        else if (environment == 3)
                        {
                            spriteRenderer.sprite = gwallslidemono;
                        }
                        else if (environment == 4)
                        {
                            spriteRenderer.sprite = gwallslidetrue;
                        }
                    }
                    desiredPos = new Vector3(0, -0.6f, 0);
                    startPos   = pos;
                    setAnimLength(0.4f);
                    spriteRenderer.flipX = !spriteRenderer.flipX;
                }
                else
                {
                    OnAttackEnd();
                }
            }
        }
        else if (state == State.WallJump)
        {
            transform.position = EaseIn(startPos, desiredPos, percentElapsed);

            if (percentElapsed == 1.0f)
            {
                OnAttackEnd();
            }
        }

        if (health < 0 && isAlive)
        {
            Die();
        }

        UpdateGuideBoxes();
    }