- Share this text:
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);
}
}