@Override
    public void tick() {
        if (input.left && input.right) {
            if (velocity.getX() < 0) velocity.add(slow, 0);
            else if (velocity.getX() > 0) velocity.subtract(slow, 0);
            else velocity.clearX();
            isMoving = false;
        } else if (input.left) {
            if (velocity.getX() > -acceleration.getX()) velocity.subtract(move, 0);
            isMoving = true;
            left = true;
        } else if (input.right) {
            if (velocity.getX() < acceleration.getX()) velocity.add(move, 0);
            isMoving = true;
            left = false;
        } else {
            if (velocity.getX() < 0) {
                velocity.add(slow, 0);
                if (velocity.getX() > 0) velocity.clearX();
            }
            if (velocity.getX() > 0) {
                velocity.subtract(slow, 0);
                if (velocity.getX() < 0) velocity.clearX();
            }
            isMoving = false;
        }

        if (isOnGround && input.up) {
            velocity.setY(-12);
            isOnGround = false;
        }

        velocity.add(0, acceleration.getY());

        if (pos.getY() + this.velocity.getY() >= 380 - sprite.getHeight() * scale || pos.getY() >= 380 - sprite.getHeight() * scale) {
            velocity.clearY();
            isOnGround = true;
        }

        if(pos.getY() == 379 - sprite.getHeight() * scale) pos.setY(380 - sprite.getHeight() * scale);

        if (pos.getX() + velocity.getX() < 0 || pos.getX() + velocity.getX() >= 730 - sprite.getWidth() * scale) {
            velocity.clearX();
            isMoving = false;
        }

        pos.add(velocity);

        if(isMoving) animatedSprite.tick();
    }