Advertisement
Guest User

GameState.java

a guest
Jan 20th, 2014
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.06 KB | None | 0 0
  1. package sourceGame;
  2.  
  3. import jme3tools.optimize.LodGenerator;
  4. import sourceFilters.Bloom;
  5. import sourceFilters.DoF;
  6. import sourceFilters.LSF;
  7. import sourceFilters.Water;
  8. import sourcePlayer.PlayerNode;
  9. import com.jme3.app.Application;
  10. import com.jme3.app.state.AbstractAppState;
  11. import com.jme3.app.state.AppStateManager;
  12. import com.jme3.asset.AssetEventListener;
  13. import com.jme3.asset.AssetKey;
  14. import com.jme3.asset.AssetManager;
  15. import com.jme3.asset.TextureKey;
  16. import com.jme3.audio.LowPassFilter;
  17. import com.jme3.bullet.BulletAppState;
  18. import com.jme3.bullet.collision.shapes.CollisionShape;
  19. import com.jme3.bullet.control.RigidBodyControl;
  20. import com.jme3.bullet.util.CollisionShapeFactory;
  21. import com.jme3.input.InputManager;
  22. import com.jme3.input.KeyInput;
  23. import com.jme3.input.controls.ActionListener;
  24. import com.jme3.input.controls.KeyTrigger;
  25. import com.jme3.light.AmbientLight;
  26. import com.jme3.light.DirectionalLight;
  27. import com.jme3.math.ColorRGBA;
  28. import com.jme3.math.FastMath;
  29. import com.jme3.math.Vector3f;
  30. import com.jme3.niftygui.NiftyJmeDisplay;
  31. import com.jme3.post.FilterPostProcessor;
  32. import com.jme3.post.SceneProcessor;
  33. import com.jme3.post.filters.FXAAFilter;
  34. import com.jme3.post.ssao.SSAOFilter;
  35. import com.jme3.renderer.Camera;
  36. import com.jme3.renderer.queue.RenderQueue;
  37. import com.jme3.scene.Geometry;
  38. import com.jme3.scene.Node;
  39. import com.jme3.scene.Spatial;
  40. import com.jme3.scene.VertexBuffer;
  41. import com.jme3.scene.control.LodControl;
  42. import com.jme3.shadow.CompareMode;
  43. import com.jme3.shadow.DirectionalLightShadowFilter;
  44. import com.jme3.terrain.Terrain;
  45. import com.jme3.terrain.geomipmap.TerrainLodControl;
  46. import com.jme3.terrain.geomipmap.TerrainQuad;
  47. import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator;
  48. import com.jme3.terrain.geomipmap.lodcalc.LodCalculatorFactory;
  49. import com.jme3.terrain.geomipmap.lodcalc.LodDistanceCalculatorFactory;
  50. import com.jme3.terrain.geomipmap.lodcalc.LodThreshold;
  51. import com.jme3.terrain.geomipmap.lodcalc.SimpleLodThreshold;
  52. import com.jme3.util.BufferUtils;
  53. import com.jme3.util.SkyFactory;
  54.  
  55. import de.lessvoid.nifty.Nifty;
  56. import de.lessvoid.nifty.screen.Screen;
  57. import de.lessvoid.nifty.screen.ScreenController;
  58. import java.io.IOException;
  59. import java.nio.FloatBuffer;
  60. import java.util.logging.Level;
  61. import java.util.logging.Logger;
  62.  
  63. /**
  64.  *
  65.  * @author Skatty
  66.  */
  67. public class GameState extends AbstractAppState implements ActionListener,
  68.         ScreenController {
  69.     public Camera cam;
  70.     private FilterPostProcessor fpp;
  71.     private Water water;
  72.     public Vector3f lightDir = new Vector3f(-4.9f, -1.3f, 5.9f); // same as                                                         // source
  73.     private float initialWaterHeight = 1.5f; // choose a value for your scene
  74.     private BulletAppState bulletAppState;
  75.     private Vector3f walkDirection = new Vector3f();
  76.     private boolean left = false, right = false, up = false, down = false;
  77.     private float time = 0.0f;
  78.     private float waterHeight = 0.0f;
  79.     private boolean uw = false;
  80.     private LowPassFilter aboveWaterAudioFilter = new LowPassFilter(1, 1);
  81.     public Spatial playerModel;
  82.     private PlayerNode player;
  83.     private Bloom bloom;
  84.     private LSF lsf;
  85.     private DoF dof;
  86.     private Nifty nifty;
  87.     private Game game;
  88.     private InputManager inputManager;
  89.     private boolean e = false;
  90.         public Application app;
  91.  
  92.     public GameState(Game game) {
  93.         this.game = game;
  94.     }
  95.  
  96.     public GameState() {
  97.  
  98.     }
  99.  
  100.     @Override
  101.     public void initialize(AppStateManager stateManager, Application app) {
  102.         super.initialize(stateManager, app);
  103.  
  104.         NiftyJmeDisplay niftyDisplay = game.getNiftyDisplay();
  105.         Node rootNode = game.getRootNode();
  106.  
  107.         nifty = niftyDisplay.getNifty();
  108.         nifty.fromXml("Interface/GUI.xml", "game", this);
  109.         game.getGuiViewPort().addProcessor(niftyDisplay);
  110.         inputManager = game.getInputManager();
  111.         inputManager.setCursorVisible(false);
  112.         cam = app.getCamera();
  113.         bulletAppState = new BulletAppState();
  114.         stateManager.attach(bulletAppState);
  115.  
  116.         AssetManager assetManager = game.getAssetManager();
  117.         /* Load */
  118.         Spatial map = assetManager.loadModel("Scenes/LeTholonet_BrakMiasta.j3o");
  119.         playerModel = assetManager.loadModel("Models/Ninja/Ninja.mesh.xml");
  120.                 playerModel.setLocalScale(1.0f);
  121.                
  122.         CollisionShape sceneShape = CollisionShapeFactory
  123.                 .createMeshShape((Node) map);
  124.         map.addControl(new RigidBodyControl(sceneShape, 0));
  125.         /* End */
  126.  
  127.         /* 3rd Person Camera */
  128.         player = new PlayerNode(playerModel, inputManager, cam);
  129.         setUpKeys();
  130.        
  131.                 /*Lights*/
  132.         AmbientLight al = new AmbientLight();
  133.         al.setColor(ColorRGBA.White.mult(0.5f));
  134.         DirectionalLight sun = new DirectionalLight();
  135.         sun.setColor(ColorRGBA.White);
  136.         sun.setDirection(new Vector3f(40f, 48f, 20f).normalizeLocal());
  137.         /*End Lights*/
  138.                
  139.         /*Filter*/
  140.                 fpp = new FilterPostProcessor(assetManager);
  141.                
  142.         /*SSAO*/
  143.         SSAOFilter ssaoFilter = new SSAOFilter(2.94f, 11.92f, 0.33f, 0.61f);
  144.                 fpp.addFilter(ssaoFilter);
  145.         /*End SSAO*/
  146.                
  147.                 /*Parallel-Split Shadow*/
  148.                 DirectionalLightShadowFilter pssmFilter;
  149.                 pssmFilter = new DirectionalLightShadowFilter(game.getAssetManager(), 1024, 3);
  150.                 pssmFilter.setLambda(0.55f);
  151.                 pssmFilter.setLight(sun);
  152.                 pssmFilter.setShadowIntensity(1f);
  153.                 fpp.addFilter(pssmFilter);
  154.                 /*End PssMShadow*/
  155.                
  156.                 /*FXAA*/
  157.                 FXAAFilter FXAA = new FXAAFilter();
  158.                 FXAA.setSpanMax(1.45f);
  159.                 fpp.addFilter(FXAA);
  160.                 /*End FXAA*/
  161.                
  162.         /*Water*/
  163.         water = new Water(game, this);
  164.         water.initWater();
  165.         fpp.addFilter(water.getWaterFilter());
  166.         /*End water*/
  167.                
  168.         /*Bloom*/
  169.         bloom = new Bloom();
  170.         bloom.initBloom();
  171.         fpp.addFilter(bloom.bloomFilter);  
  172.         /*End Bloom*/
  173.  
  174.         /*Light Scattering Filter*/
  175.         lsf = new LSF();
  176.         lsf.initLSF();
  177.         fpp.addFilter(lsf.lsfFilter);
  178.         /*End LightScatteringFilter*/
  179.                
  180.  
  181.         /*Depth Of Field Filter*/
  182.         dof = new DoF();
  183.         dof.initDoF();
  184.         fpp.addFilter(dof.dofFilter);
  185.         /*End DepthOfFieldFilter*/
  186.                
  187.         game.getViewPort().addProcessor(fpp);
  188.         /*End Filter*/
  189.  
  190.         uw = cam.getLocation().y < waterHeight;
  191.         game.getAudioManager().initWaves();
  192.         if (uw) {
  193.             game.getAudioManager().getWaves()
  194.                     .setDryFilter(new LowPassFilter(0.5f, 0.1f));
  195.         } else {
  196.             game.getAudioManager().getWaves()
  197.                     .setDryFilter(aboveWaterAudioFilter);
  198.         }
  199.         game.getAudioManager().playWaves();
  200.  
  201.         bulletAppState.getPhysicsSpace().add(map);
  202.         bulletAppState.getPhysicsSpace().add(player);
  203.         rootNode.setShadowMode(RenderQueue.ShadowMode.Receive);
  204.                
  205.           Geometry geo = (Geometry) rootNode.getChild("Stone_031");
  206.            // LodGenerator lodGenerator = new LodGenerator(geo);          
  207.             //lodGenerator.bakeLods(LodGenerator.TriangleReductionMethod.PROPORTIONAL, 0.10f);
  208.             //geo.setLodLevel(1);
  209.             //GeometryBatchFactory.optimize(rootNode, true);
  210.             LodControl control = new LodControl();
  211.             //geo.addControl(control);
  212.                 System.out.println(geo);
  213.         rootNode.attachChild(map);
  214.                
  215.                TerrainLodControl lodControl = rootNode.getChild("Terrain").getControl(TerrainLodControl.class);
  216.                 if(lodControl != null) {
  217.                     lodControl.setCamera(app.getCamera());
  218.                     DistanceLodCalculator calc = (DistanceLodCalculator)lodControl.getLodCalculator();
  219.                     calc.setLodMultiplier(0.55f);
  220.                 }
  221.                
  222.                 rootNode.attachChild(SkyFactory.createSky(
  223.                 assetManager, "Textures/Sky/Bright/FullskiesBlueClear03.dds", false));
  224.         rootNode.attachChild(player);
  225.         rootNode.addLight(sun);  
  226.         rootNode.addLight(al);
  227.     }
  228.  
  229.     private void setUpKeys() {
  230.         inputManager.addMapping("E", new KeyTrigger(KeyInput.KEY_E));
  231.         inputManager.addListener(this, "E");
  232.     }
  233.  
  234.     public void onAction(String binding, boolean keyPressed, float tpf) {
  235.         // if (binding.equals("E"))
  236.     }
  237.  
  238.     @Override
  239.     public void update(float tpf) {
  240.         time += tpf;
  241.         waterHeight = (float) Math.cos(((time * 0.6f) % FastMath.TWO_PI)) * 0.5f;
  242.         water.getWaterFilter().setWaterHeight(initialWaterHeight + waterHeight);
  243.         if (water.getWaterFilter().isUnderWater() && !uw) {
  244.             game.getAudioManager().getWaves()
  245.                     .setDryFilter(new LowPassFilter(0.5f, 0.1f));
  246.             uw = true;
  247.         }
  248.         if (!water.getWaterFilter().isUnderWater() && uw) {
  249.             uw = false;
  250.             game.getAudioManager().getWaves()
  251.                     .setDryFilter(new LowPassFilter(1, 1f));
  252.         }
  253.         Vector3f camDir = cam.getDirection().clone().multLocal(0.4f);
  254.         Vector3f camLeft = cam.getLeft().clone().multLocal(0.2f);
  255.         walkDirection.set(0, 0, 0);
  256.         if (left) {
  257.             walkDirection.addLocal(camLeft);
  258.         }
  259.         if (right) {
  260.             walkDirection.addLocal(camLeft.negate());
  261.         }
  262.         if (up) {
  263.             walkDirection.addLocal(camDir);
  264.         }
  265.         if (down) {
  266.             walkDirection.addLocal(camDir.negate());
  267.         }
  268.         player.update();
  269.     }
  270.  
  271.     @Override
  272.     public void stateAttached(AppStateManager stateManager) {
  273.     }
  274.  
  275.     @Override
  276.     public void stateDetached(AppStateManager stateManager) {
  277.     }
  278.  
  279.     /* Anisotropy */
  280.     AssetEventListener asl = new AssetEventListener() {
  281.         public void assetLoaded(AssetKey key) {
  282.  
  283.         }
  284.  
  285.         public void assetRequested(AssetKey key) {
  286.             if (key.getExtension().equals("png")
  287.                     || key.getExtension().equals("jpg")
  288.                     || key.getExtension().equals("dds")) {
  289.                 System.out.println(key.getExtension());
  290.                 TextureKey tkey = (TextureKey) key;
  291.                 tkey.setAnisotropy(0);
  292.             }
  293.         }
  294.  
  295.         public void assetDependencyNotFound(AssetKey parentKey,
  296.                 AssetKey dependentAssetKey) {
  297.         }
  298.     };
  299.  
  300.     public void bind(Nifty nifty, Screen screen) {
  301.         this.nifty = nifty;
  302.         nifty.registerScreenController(this);
  303.         nifty.addControls();
  304.     }
  305.  
  306.     public void onStartScreen() {
  307.     }
  308.  
  309.     public void back2Menu() {
  310.         game.detachGame();
  311.         nifty.gotoScreen("menu");
  312.         game.attachMenu();
  313.     }
  314.  
  315.     public void onEndScreen() {
  316.     }
  317.  
  318. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement