Car.java 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package eu.tankernn.gameEngine.entities;
  2. import org.lwjgl.input.Keyboard;
  3. import org.lwjgl.util.vector.Vector3f;
  4. import eu.tankernn.gameEngine.loader.models.TexturedModel;
  5. import eu.tankernn.gameEngine.renderEngine.DisplayManager;
  6. import eu.tankernn.gameEngine.settings.Physics;
  7. import eu.tankernn.gameEngine.terrains.Terrain;
  8. import eu.tankernn.gameEngine.terrains.TerrainPack;
  9. public class Car extends Player {
  10. private static final float MAX_SPEED = 100.0f, ACCELERATION = 20.0f, DECELERATION = 10.0f, BRAKE = 40.0f,
  11. TURN_FORCE = 160.0f;
  12. public Car(TexturedModel model, Vector3f position, float rotX, float rotY, float rotZ, float scale,
  13. TerrainPack terrainPack) {
  14. super(model, position, rotX, rotY, rotZ, scale, terrainPack);
  15. }
  16. @Override
  17. public void move(TerrainPack terrainPack) {
  18. checkInputs();
  19. super.increaseRotation(0, currentTurnSpeed * DisplayManager.getFrameTimeSeconds(), 0);
  20. float distance = currentSpeed * DisplayManager.getFrameTimeSeconds();
  21. float dx = (float) (distance * Math.sin(Math.toRadians(super.getRotY())));
  22. float dz = (float) (distance * Math.cos(Math.toRadians(super.getRotY())));
  23. super.increasePosition(dx, 0, dz);
  24. upwardsSpeed += Physics.GRAVITY * DisplayManager.getFrameTimeSeconds();
  25. super.increasePosition(0, upwardsSpeed * DisplayManager.getFrameTimeSeconds(), 0);
  26. Terrain currentTerrain = terrainPack.getTerrainByWorldPos(this.getPosition().x, this.getPosition().z);
  27. float terrainHeight = 0;
  28. if (currentTerrain != null) {
  29. terrainHeight = currentTerrain.getHeightOfTerrain(super.getPosition().x, super.getPosition().z);
  30. }
  31. if (super.getPosition().getY() < terrainHeight) {
  32. super.getPosition().y = terrainHeight;
  33. }
  34. }
  35. @Override
  36. protected void checkInputs() {
  37. if (Keyboard.isKeyDown(Keyboard.KEY_W)) {
  38. this.currentSpeed += ACCELERATION * DisplayManager.getFrameTimeSeconds();
  39. this.currentSpeed = Math.min(currentSpeed, MAX_SPEED);
  40. } else if (Keyboard.isKeyDown(Keyboard.KEY_S)) {
  41. this.currentSpeed -= BRAKE * DisplayManager.getFrameTimeSeconds();
  42. this.currentSpeed = Math.max(currentSpeed, 0);
  43. } else {
  44. this.currentSpeed -= DECELERATION * DisplayManager.getFrameTimeSeconds();
  45. this.currentSpeed = Math.max(currentSpeed, 0);
  46. }
  47. if (Keyboard.isKeyDown(Keyboard.KEY_A)) {
  48. this.currentTurnSpeed += TURN_FORCE * DisplayManager.getFrameTimeSeconds();
  49. } else if (Keyboard.isKeyDown(Keyboard.KEY_D)) {
  50. this.currentTurnSpeed -= TURN_FORCE * DisplayManager.getFrameTimeSeconds();
  51. } else {
  52. if (this.currentTurnSpeed > 0) {
  53. this.currentTurnSpeed -= TURN_FORCE;
  54. if (currentTurnSpeed < 0)
  55. this.currentTurnSpeed = 0;
  56. } else if (this.currentTurnSpeed < 0) {
  57. this.currentTurnSpeed += TURN_FORCE;
  58. if (currentTurnSpeed > 0)
  59. this.currentTurnSpeed = 0;
  60. }
  61. }
  62. this.currentTurnSpeed = Math.min(currentTurnSpeed, TURN_MAX);
  63. this.currentTurnSpeed = Math.max(currentTurnSpeed, -TURN_MAX);
  64. // TODO Nitro
  65. }
  66. }