• Share this text:
Report Abuse
Untitled - posted by guest on 15th October 2020 08:08:00 AM

public class PlayerController extends InputAdapter {

    //Camera

    private final Camera camera;

    //Keybinds

    private final IntIntMap keys = new IntIntMap();

    private int STRAFE_LEFT = Keys.A;

    private int STRAFE_RIGHT = Keys.D;

    private int FORWARD = Keys.W;

    private int BACKWARD = Keys.S;

    private int UP = Keys.Q;

    private int DOWN = Keys.E;

    private int JUMP = Keys.SPACE;

    private int CROUCH = Keys.SHIFT_LEFT;

    private int PAUSE = Keys.ESCAPE;

    //Movement Scales

    private float velocity = 5;

    private float jumpMultiplier = 1f;

    private float gravityMultiplier = 1f;

    private float degreesPerPixel = 0.5f;

    //Extra Variables

    private boolean isPaused = true;

    private float degreesPerPixelSave = 0;

    private final Vector3 tmp = new Vector3();

    private float velocityY = 0f;

    private boolean isGrounded;

    public PlayerController(Camera camera) {

        this.camera = camera;

    }

    @Override

    public boolean keyDown (int keycode) {

        keys.put(keycode, keycode);

        return true;

    }

    @Override

    public boolean keyUp (int keycode) {

        keys.remove(keycode, 0);

        return true;

    }

    //Velocity in Units / Second

    public void setVelocity (float velocity) {

        this.velocity = velocity;

    }

    //Multiplier on the Jump Action

    public void setJumpMultiplier (float jumpMultiplier) { this.jumpMultiplier = jumpMultiplier; }

    //Multiplier on Gravity Effect

    public void setGravityMultiplier (float gravityMultiplier) { this.gravityMultiplier = gravityMultiplier; }

    //Mouse Look Sensitivity

    public void setDegreesPerPixel (float degreesPerPixel) {

        this.degreesPerPixel = degreesPerPixel;

        this.degreesPerPixelSave = degreesPerPixel;

    }

    @Override

    public boolean mouseMoved (int screenX, int screenY) {

        float deltaX = -Gdx.input.getDeltaX() * degreesPerPixel;

        float deltaY = -Gdx.input.getDeltaY() * degreesPerPixel;

        camera.direction.rotate(camera.up, deltaX);

        tmp.set(camera.direction).crs(camera.up).nor();

        camera.direction.rotate(tmp, deltaY);

    // camera.up.rotate(tmp, deltaY);

        return true;

    }

    public void update () {

        update(Gdx.graphics.getDeltaTime());

    }

    public void update (float deltaTime) {

        if(!isPaused){

            //Controls Movement

            if (keys.containsKey(FORWARD)) {

                tmp.set(camera.direction).nor().scl(deltaTime * velocity);

                camera.position.add(tmp.x, 0, tmp.z);

            }

            if (keys.containsKey(BACKWARD)) {

                tmp.set(camera.direction).nor().scl(-deltaTime * velocity);

                camera.position.add(tmp.x, 0, tmp.z);

            }

            if (keys.containsKey(STRAFE_LEFT)) {

                tmp.set(camera.direction).crs(camera.up).nor().scl(-deltaTime * velocity);

                camera.position.add(tmp.x, 0, tmp.z);

            }

            if (keys.containsKey(STRAFE_RIGHT)) {

                tmp.set(camera.direction).crs(camera.up).nor().scl(deltaTime * velocity);

                camera.position.add(tmp.x, 0, tmp.z);

            }

            if (keys.containsKey(UP)) {

                tmp.set(camera.up).nor().scl(deltaTime * velocity);

                camera.position.add(tmp.x, 0, tmp.z);

            }

            if (keys.containsKey(DOWN)) {

                tmp.set(camera.up).nor().scl(-deltaTime * velocity);

                camera.position.add(tmp.x, 0, tmp.z);

            }

            if(keys.containsKey(JUMP) && isGrounded == true){

                camera.translate(0,deltaTime*jumpMultiplier,0);

            }

            if (keys.containsKey(JUMP) && isGrounded) {

                velocityY += jumpMultiplier * deltaTime;

            }

            if (isGrounded) {

                velocityY = 0f;

            } else {

                velocityY -= gravityMultiplier * deltaTime;

            }

            camera.translate(0f, velocityY, 0f);

            if(camera.position.y > 0){

                isGrounded = false;

            }

            if(camera.position.y <= 0){

                isGrounded = true;

            }

        }

        //Controls Pause Mechanic

        if (keys.containsKey(PAUSE)) {

            Gdx.input.setCursorCatched(false);

            isPaused = true;

            degreesPerPixel = 0;

        }else{

            Gdx.input.setCursorCatched(true);

            isPaused = false;

            degreesPerPixel = degreesPerPixelSave;

        }

        camera.update(true);

    }

}

Report Abuse

Login or Register to edit or copy and save this text. It's free.