ComputerCraft32

VehicleControl.java

Jul 10th, 2020
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.81 KB | None | 0 0
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package mygame.controls_states;
  7.  
  8. import com.jme3.bullet.BulletAppState;
  9. import com.jme3.bullet.collision.PhysicsCollisionEvent;
  10. import com.jme3.bullet.collision.PhysicsCollisionListener;
  11. import com.jme3.bullet.collision.PhysicsSweepTestResult;
  12. import com.jme3.bullet.collision.shapes.BoxCollisionShape;
  13. import com.jme3.bullet.control.RigidBodyControl;
  14. import com.jme3.collision.CollisionResults;
  15. import com.jme3.input.InputManager;
  16. import com.jme3.input.KeyInput;
  17. import com.jme3.input.controls.AnalogListener;
  18. import com.jme3.input.controls.KeyTrigger;
  19. import com.jme3.math.Ray;
  20. import com.jme3.math.Transform;
  21. import com.jme3.math.Vector3f;
  22. import com.jme3.renderer.RenderManager;
  23. import com.jme3.renderer.ViewPort;
  24. import com.jme3.scene.Geometry;
  25. import com.jme3.scene.Spatial;
  26. import com.jme3.scene.control.AbstractControl;
  27. import com.jme3.scene.shape.Box;
  28. import java.util.List;
  29.  
  30. /**
  31.  *
  32.  *
  33.  */
  34. public class VehicleController extends AbstractControl implements PhysicsCollisionListener {
  35.  
  36.     Vector3f movement = null;
  37.     float rebound;
  38.     float rotLeft, rotRight;
  39.     float deltaTime;
  40.     public int signal = 0;
  41.     Geometry vehicle;
  42.     InputManager inputManager;
  43.     float forward;
  44.     float backwards;
  45.     float left;
  46.     float right;
  47.     float up;
  48.     float down;
  49.     Spatial terrain;
  50.     int hitpoints = 100;
  51.     RigidBodyControl vehiclePhysics;
  52.     BulletAppState appState;
  53.     BoxCollisionShape shape = new BoxCollisionShape(new Vector3f(10, 2, 10));
  54.  
  55.     public VehicleController(InputManager inputManager, Geometry vehicle, Spatial terrain, RigidBodyControl vehiclePhysics, BulletAppState appState) {
  56.  
  57.         this.appState = appState;
  58.         this.vehiclePhysics = vehiclePhysics;
  59.         this.terrain = terrain;
  60.         this.vehicle = vehicle;
  61.         this.inputManager = inputManager;
  62.  
  63.         initKeys();
  64.     }
  65.  
  66.     AnalogListener analogListener = new AnalogListener() {
  67.         @Override
  68.         public void onAnalog(String name, float value, float tpf) {
  69.             switch (name) {
  70.                 case "Forwards":
  71.  
  72.                     forward += 1;
  73.                     break;
  74.                 case "Backwards":
  75.  
  76.                     backwards += 1;
  77.                     break;
  78.                 case "Left":
  79.  
  80.                     left += 1;
  81.                     break;
  82.                 case "Right":
  83.  
  84.                     right += 1;
  85.                     break;
  86.                 case "Up":
  87.  
  88.                     up += 1;
  89.                     break;
  90.                 case "Down":
  91.  
  92.                     down += 1;
  93.                     break;
  94.  
  95.                 case "RotRight":
  96.  
  97.                     rotRight += 0.25;
  98.                     break;
  99.                 case "RotLeft":
  100.  
  101.                     rotLeft += 0.25;
  102.                     break;
  103.  
  104.             }
  105.         }
  106.  
  107.     };
  108.  
  109.     private void initKeys() {
  110.  
  111.         inputManager.addMapping("Forwards", new KeyTrigger(KeyInput.KEY_1));
  112.         inputManager.addMapping("RotLeft", new KeyTrigger(KeyInput.KEY_2));
  113.         inputManager.addMapping("RotRight", new KeyTrigger(KeyInput.KEY_3));
  114.  
  115.         inputManager.addListener(analogListener, "Forwards");
  116.         inputManager.addListener(analogListener, "RotRight");
  117.         inputManager.addListener(analogListener, "RotLeft");
  118.  
  119.     }
  120.  
  121.     @Override
  122.     protected void controlUpdate(float tpf) {
  123.  
  124.         System.out.println(vehicle.getWorldRotation());
  125.        
  126.         if (up > 0) {
  127.             Transform startPosUp = new Transform(vehicle.getWorldTranslation().add(new Vector3f(0, 1, 0)));
  128.             Transform endPosUp = new Transform(vehicle.getWorldTranslation().add(new Vector3f(0, 1, 0)).add(new Vector3f(0, up, 0)));
  129.  
  130.             List<PhysicsSweepTestResult> sweepUp = appState.getPhysicsSpace().sweepTest(shape, startPosUp, endPosUp);
  131.  
  132.             if (sweepUp.isEmpty() && up > 1) {
  133.                 vehicle.move(0, up, 0);
  134.             } else {
  135.                 up = 0;
  136.                 down += 5 * tpf;
  137.             }
  138.         }
  139.         if (rotLeft > 0) {
  140.  
  141.             vehicle.rotate(0, -rotLeft * tpf, 0);
  142.             movement = (vehicle.getWorldRotation().mult(Vector3f.UNIT_Z)).mult(1);
  143.         }
  144.        
  145.  
  146.         if (rotRight > 0) {
  147.  
  148.             vehicle.rotate(0, rotRight * tpf, 0);
  149.             movement = (vehicle.getWorldRotation().mult(Vector3f.UNIT_Z)).mult(1);
  150.         }
  151.        
  152.  
  153.         if (down > 0) {
  154.             Transform startPosDown = new Transform(vehicle.getWorldTranslation().add(new Vector3f(0, -1, 0)));
  155.             Transform endPosDown = new Transform(vehicle.getWorldTranslation().add(new Vector3f(0, -1, 0)).add(new Vector3f(0, -down, 0)));
  156.  
  157.             List<PhysicsSweepTestResult> sweepDown = appState.getPhysicsSpace().sweepTest(shape, startPosDown, endPosDown);
  158.  
  159.             if (sweepDown.isEmpty()) {
  160.                 vehicle.move(0, -down, 0);
  161.             } else {
  162.                 down = 0;
  163.  
  164.             }
  165.         }
  166.         if (forward > 0) {
  167.             Transform startPosForward = new Transform(vehicle.getWorldTranslation().add(new Vector3f(0, 0, 5)));
  168.             Transform endPosForward = new Transform(vehicle.getWorldTranslation().add(new Vector3f(0, 0, 5)).add(vehicle.getWorldRotation().mult(Vector3f.UNIT_Z)));
  169.  
  170.             List<PhysicsSweepTestResult> sweepForward = appState.getPhysicsSpace().sweepTest(shape, startPosForward, endPosForward);
  171.  
  172.             if (movement == null) {
  173.                 movement = (vehicle.getWorldRotation().mult(Vector3f.UNIT_Z)).mult(1);
  174.             }
  175.  
  176.             if (sweepForward.isEmpty()) {
  177.  
  178.                 vehicle.move(movement.x * forward * tpf, movement.y * forward * tpf, movement.z * forward * tpf);
  179.             } else {
  180.                 if (vehicle.getWorldRotation().mult(Vector3f.UNIT_Z).z > 0) {
  181.                     forward = 0;
  182.                     backwards = 20;
  183.                 }
  184.  
  185.                 if (vehicle.getWorldRotation().mult(Vector3f.UNIT_Z).z < 0) {
  186.                     forward = 0;
  187.                     rebound = 20;
  188.                 }
  189.  
  190.             }
  191.  
  192.         }
  193.  
  194.         if (backwards > 0) {
  195.             Transform startPosBackwards = new Transform(vehicle.getWorldTranslation().add(new Vector3f(0, 0, -5)));
  196.             Transform endPosBackwards = new Transform(vehicle.getWorldTranslation().add(new Vector3f(0, 0, -5)).add((vehicle.getWorldRotation().mult(new Vector3f(0, 0, -1)))));
  197.  
  198.             List<PhysicsSweepTestResult> sweepForward = appState.getPhysicsSpace().sweepTest(shape, startPosBackwards, endPosBackwards);
  199.  
  200.             if (sweepForward.isEmpty()) {
  201.                 vehicle.move(-movement.x * backwards * tpf, -movement.y * backwards * tpf, -movement.z * backwards * tpf);
  202.             } else {
  203.                 backwards = 0;
  204.                 forward = 20;
  205.             }
  206.         }
  207.  
  208.         if (rebound > 0) {
  209.             Transform startPosBackwards = new Transform(vehicle.getWorldTranslation().add(new Vector3f(0, 0, 5)));
  210.             Transform endPosBackwards = new Transform(vehicle.getWorldTranslation().add(new Vector3f(0, 0, 5)).add((vehicle.getWorldRotation().mult(Vector3f.UNIT_Z))));
  211.  
  212.             List<PhysicsSweepTestResult> sweepForward = appState.getPhysicsSpace().sweepTest(shape, startPosBackwards, endPosBackwards);
  213.  
  214.             if (sweepForward.isEmpty()) {
  215.                 vehicle.move(movement.x * rebound * tpf, movement.y * rebound * tpf, movement.z * rebound * tpf);
  216.             } else {
  217.                 rebound = 0;
  218.                 backwards = 20;
  219.             }
  220.         }
  221.  
  222.         if (rebound > 0) {
  223.             rebound -= 10 * tpf;
  224.         }
  225.  
  226.         if (rebound < 0) {
  227.             rebound = 0;
  228.         }
  229. //
  230. ////        if (forward > 0) {
  231. ////            forward -= 10 * tpf;
  232. ////        }
  233. ////
  234. ////        if (forward < 0) {
  235. ////            forward = 0;
  236. ////        }
  237.         if (backwards > 0) {
  238.             backwards -= 10 * tpf;
  239.         }
  240.  
  241.         if (backwards < 0) {
  242.             backwards = 10 * tpf;
  243.         }
  244.  
  245.         if (up > 0) {
  246.             up -= 10 * tpf;
  247.         }
  248.  
  249.         if (up < 0) {
  250.             up = 0;
  251.         }
  252.  
  253.         if (down > 0) {
  254.             down -= 10 * tpf;
  255.         }
  256.  
  257.         if (down < 0) {
  258.             down = 0;
  259.         }
  260.  
  261.         if (rotLeft > 0) {
  262.             rotLeft -= 10 * tpf;
  263.         }
  264.  
  265.         if (rotLeft < 0) {
  266.             rotLeft = 0 * tpf;
  267.  
  268.         }
  269.  
  270.         if (rotRight > 0) {
  271.             rotRight -= 10 * tpf;
  272.         }
  273.  
  274.         if (rotRight < 0) {
  275.             rotRight = 0 * tpf;
  276.  
  277.         }
  278.  
  279.     }
  280.  
  281.     @Override
  282.     protected void controlRender(RenderManager rm, ViewPort vp) {
  283.  
  284.     }
  285.  
  286.     @Override
  287.     public void collision(PhysicsCollisionEvent event) {
  288.  
  289.     }
  290. }
Advertisement
Add Comment
Please, Sign In to add comment