Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package sourceGame;
- import jme3tools.optimize.LodGenerator;
- import sourceFilters.Bloom;
- import sourceFilters.DoF;
- import sourceFilters.LSF;
- import sourceFilters.Water;
- import sourcePlayer.PlayerNode;
- import com.jme3.app.Application;
- import com.jme3.app.state.AbstractAppState;
- import com.jme3.app.state.AppStateManager;
- import com.jme3.asset.AssetEventListener;
- import com.jme3.asset.AssetKey;
- import com.jme3.asset.AssetManager;
- import com.jme3.asset.TextureKey;
- import com.jme3.audio.LowPassFilter;
- import com.jme3.bullet.BulletAppState;
- import com.jme3.bullet.collision.shapes.CollisionShape;
- import com.jme3.bullet.control.RigidBodyControl;
- import com.jme3.bullet.util.CollisionShapeFactory;
- import com.jme3.input.InputManager;
- import com.jme3.input.KeyInput;
- import com.jme3.input.controls.ActionListener;
- import com.jme3.input.controls.KeyTrigger;
- import com.jme3.light.AmbientLight;
- import com.jme3.light.DirectionalLight;
- import com.jme3.math.ColorRGBA;
- import com.jme3.math.FastMath;
- import com.jme3.math.Vector3f;
- import com.jme3.niftygui.NiftyJmeDisplay;
- import com.jme3.post.FilterPostProcessor;
- import com.jme3.post.SceneProcessor;
- import com.jme3.post.filters.FXAAFilter;
- import com.jme3.post.ssao.SSAOFilter;
- import com.jme3.renderer.Camera;
- import com.jme3.renderer.queue.RenderQueue;
- import com.jme3.scene.Geometry;
- import com.jme3.scene.Node;
- import com.jme3.scene.Spatial;
- import com.jme3.scene.VertexBuffer;
- import com.jme3.scene.control.LodControl;
- import com.jme3.shadow.CompareMode;
- import com.jme3.shadow.DirectionalLightShadowFilter;
- import com.jme3.terrain.Terrain;
- import com.jme3.terrain.geomipmap.TerrainLodControl;
- import com.jme3.terrain.geomipmap.TerrainQuad;
- import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator;
- import com.jme3.terrain.geomipmap.lodcalc.LodCalculatorFactory;
- import com.jme3.terrain.geomipmap.lodcalc.LodDistanceCalculatorFactory;
- import com.jme3.terrain.geomipmap.lodcalc.LodThreshold;
- import com.jme3.terrain.geomipmap.lodcalc.SimpleLodThreshold;
- import com.jme3.util.BufferUtils;
- import com.jme3.util.SkyFactory;
- import de.lessvoid.nifty.Nifty;
- import de.lessvoid.nifty.screen.Screen;
- import de.lessvoid.nifty.screen.ScreenController;
- import java.io.IOException;
- import java.nio.FloatBuffer;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- /**
- *
- * @author Skatty
- */
- public class GameState extends AbstractAppState implements ActionListener,
- ScreenController {
- public Camera cam;
- private FilterPostProcessor fpp;
- private Water water;
- public Vector3f lightDir = new Vector3f(-4.9f, -1.3f, 5.9f); // same as // source
- private float initialWaterHeight = 1.5f; // choose a value for your scene
- private BulletAppState bulletAppState;
- private Vector3f walkDirection = new Vector3f();
- private boolean left = false, right = false, up = false, down = false;
- private float time = 0.0f;
- private float waterHeight = 0.0f;
- private boolean uw = false;
- private LowPassFilter aboveWaterAudioFilter = new LowPassFilter(1, 1);
- public Spatial playerModel;
- private PlayerNode player;
- private Bloom bloom;
- private LSF lsf;
- private DoF dof;
- private Nifty nifty;
- private Game game;
- private InputManager inputManager;
- private boolean e = false;
- public Application app;
- public GameState(Game game) {
- this.game = game;
- }
- public GameState() {
- }
- @Override
- public void initialize(AppStateManager stateManager, Application app) {
- super.initialize(stateManager, app);
- NiftyJmeDisplay niftyDisplay = game.getNiftyDisplay();
- Node rootNode = game.getRootNode();
- nifty = niftyDisplay.getNifty();
- nifty.fromXml("Interface/GUI.xml", "game", this);
- game.getGuiViewPort().addProcessor(niftyDisplay);
- inputManager = game.getInputManager();
- inputManager.setCursorVisible(false);
- cam = app.getCamera();
- bulletAppState = new BulletAppState();
- stateManager.attach(bulletAppState);
- AssetManager assetManager = game.getAssetManager();
- /* Load */
- Spatial map = assetManager.loadModel("Scenes/LeTholonet_BrakMiasta.j3o");
- playerModel = assetManager.loadModel("Models/Ninja/Ninja.mesh.xml");
- playerModel.setLocalScale(1.0f);
- CollisionShape sceneShape = CollisionShapeFactory
- .createMeshShape((Node) map);
- map.addControl(new RigidBodyControl(sceneShape, 0));
- /* End */
- /* 3rd Person Camera */
- player = new PlayerNode(playerModel, inputManager, cam);
- setUpKeys();
- /*Lights*/
- AmbientLight al = new AmbientLight();
- al.setColor(ColorRGBA.White.mult(0.5f));
- DirectionalLight sun = new DirectionalLight();
- sun.setColor(ColorRGBA.White);
- sun.setDirection(new Vector3f(40f, 48f, 20f).normalizeLocal());
- /*End Lights*/
- /*Filter*/
- fpp = new FilterPostProcessor(assetManager);
- /*SSAO*/
- SSAOFilter ssaoFilter = new SSAOFilter(2.94f, 11.92f, 0.33f, 0.61f);
- fpp.addFilter(ssaoFilter);
- /*End SSAO*/
- /*Parallel-Split Shadow*/
- DirectionalLightShadowFilter pssmFilter;
- pssmFilter = new DirectionalLightShadowFilter(game.getAssetManager(), 1024, 3);
- pssmFilter.setLambda(0.55f);
- pssmFilter.setLight(sun);
- pssmFilter.setShadowIntensity(1f);
- fpp.addFilter(pssmFilter);
- /*End PssMShadow*/
- /*FXAA*/
- FXAAFilter FXAA = new FXAAFilter();
- FXAA.setSpanMax(1.45f);
- fpp.addFilter(FXAA);
- /*End FXAA*/
- /*Water*/
- water = new Water(game, this);
- water.initWater();
- fpp.addFilter(water.getWaterFilter());
- /*End water*/
- /*Bloom*/
- bloom = new Bloom();
- bloom.initBloom();
- fpp.addFilter(bloom.bloomFilter);
- /*End Bloom*/
- /*Light Scattering Filter*/
- lsf = new LSF();
- lsf.initLSF();
- fpp.addFilter(lsf.lsfFilter);
- /*End LightScatteringFilter*/
- /*Depth Of Field Filter*/
- dof = new DoF();
- dof.initDoF();
- fpp.addFilter(dof.dofFilter);
- /*End DepthOfFieldFilter*/
- game.getViewPort().addProcessor(fpp);
- /*End Filter*/
- uw = cam.getLocation().y < waterHeight;
- game.getAudioManager().initWaves();
- if (uw) {
- game.getAudioManager().getWaves()
- .setDryFilter(new LowPassFilter(0.5f, 0.1f));
- } else {
- game.getAudioManager().getWaves()
- .setDryFilter(aboveWaterAudioFilter);
- }
- game.getAudioManager().playWaves();
- bulletAppState.getPhysicsSpace().add(map);
- bulletAppState.getPhysicsSpace().add(player);
- rootNode.setShadowMode(RenderQueue.ShadowMode.Receive);
- Geometry geo = (Geometry) rootNode.getChild("Stone_031");
- // LodGenerator lodGenerator = new LodGenerator(geo);
- //lodGenerator.bakeLods(LodGenerator.TriangleReductionMethod.PROPORTIONAL, 0.10f);
- //geo.setLodLevel(1);
- //GeometryBatchFactory.optimize(rootNode, true);
- LodControl control = new LodControl();
- //geo.addControl(control);
- System.out.println(geo);
- rootNode.attachChild(map);
- TerrainLodControl lodControl = rootNode.getChild("Terrain").getControl(TerrainLodControl.class);
- if(lodControl != null) {
- lodControl.setCamera(app.getCamera());
- DistanceLodCalculator calc = (DistanceLodCalculator)lodControl.getLodCalculator();
- calc.setLodMultiplier(0.55f);
- }
- rootNode.attachChild(SkyFactory.createSky(
- assetManager, "Textures/Sky/Bright/FullskiesBlueClear03.dds", false));
- rootNode.attachChild(player);
- rootNode.addLight(sun);
- rootNode.addLight(al);
- }
- private void setUpKeys() {
- inputManager.addMapping("E", new KeyTrigger(KeyInput.KEY_E));
- inputManager.addListener(this, "E");
- }
- public void onAction(String binding, boolean keyPressed, float tpf) {
- // if (binding.equals("E"))
- }
- @Override
- public void update(float tpf) {
- time += tpf;
- waterHeight = (float) Math.cos(((time * 0.6f) % FastMath.TWO_PI)) * 0.5f;
- water.getWaterFilter().setWaterHeight(initialWaterHeight + waterHeight);
- if (water.getWaterFilter().isUnderWater() && !uw) {
- game.getAudioManager().getWaves()
- .setDryFilter(new LowPassFilter(0.5f, 0.1f));
- uw = true;
- }
- if (!water.getWaterFilter().isUnderWater() && uw) {
- uw = false;
- game.getAudioManager().getWaves()
- .setDryFilter(new LowPassFilter(1, 1f));
- }
- Vector3f camDir = cam.getDirection().clone().multLocal(0.4f);
- Vector3f camLeft = cam.getLeft().clone().multLocal(0.2f);
- walkDirection.set(0, 0, 0);
- if (left) {
- walkDirection.addLocal(camLeft);
- }
- if (right) {
- walkDirection.addLocal(camLeft.negate());
- }
- if (up) {
- walkDirection.addLocal(camDir);
- }
- if (down) {
- walkDirection.addLocal(camDir.negate());
- }
- player.update();
- }
- @Override
- public void stateAttached(AppStateManager stateManager) {
- }
- @Override
- public void stateDetached(AppStateManager stateManager) {
- }
- /* Anisotropy */
- AssetEventListener asl = new AssetEventListener() {
- public void assetLoaded(AssetKey key) {
- }
- public void assetRequested(AssetKey key) {
- if (key.getExtension().equals("png")
- || key.getExtension().equals("jpg")
- || key.getExtension().equals("dds")) {
- System.out.println(key.getExtension());
- TextureKey tkey = (TextureKey) key;
- tkey.setAnisotropy(0);
- }
- }
- public void assetDependencyNotFound(AssetKey parentKey,
- AssetKey dependentAssetKey) {
- }
- };
- public void bind(Nifty nifty, Screen screen) {
- this.nifty = nifty;
- nifty.registerScreenController(this);
- nifty.addControls();
- }
- public void onStartScreen() {
- }
- public void back2Menu() {
- game.detachGame();
- nifty.gotoScreen("menu");
- game.attachMenu();
- }
- public void onEndScreen() {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement