Browse Source

Fullscreen, refractoring and bugfix

Added fullscreen capability and resizable display.
Refractored guassiaBlur package.
Fixed a bug with the player camera.
Tankernn 8 years ago
parent
commit
558b3f213a

+ 2 - 2
src/main/java/eu/tankernn/gameEngine/entities/Camera.java

@@ -25,9 +25,9 @@ public class Camera implements Positionable {
 	/**
 	 * Points the camera so that that <code>entity</code> is in the center.
 	 * 
-	 * @param entity The <code>Entity</code> to point towards
+	 * @param entity The object to point towards
 	 */
-	public void pointToEntity(Entity entity) {
+	public void pointToEntity(Positionable entity) {
 		Vector3f targetPos = entity.getPosition();
 		Vector3f delta = new Vector3f();
 		Vector3f.sub(position, targetPos, delta);

+ 20 - 14
src/main/java/eu/tankernn/gameEngine/entities/PlayerCamera.java

@@ -19,7 +19,6 @@ public class PlayerCamera extends Camera {
 	private Player player;
 	private TerrainPack terrainPack;
 	
-	
 	public PlayerCamera(Player player, TerrainPack terrainPack) {
 		this.player = player;
 		this.terrainPack = terrainPack;
@@ -32,22 +31,17 @@ public class PlayerCamera extends Camera {
 	public void update() {
 		calculateZoom();
 		if (Mouse.isButtonDown(0) || Mouse.isButtonDown(1)) {
-			if (!this.isLocked) {
+			if (!this.isLocked) { // Happens first frame mouse held down
 				this.isLocked = true;
 				this.lockedPosition = player.getRotY();
 			}
-			try {
-				Mouse.setNativeCursor(new Cursor(1, 1, 0, 0, 1, IntBuffer.allocate(1), null)); //Hide the cursor
-			} catch (LWJGLException e) {
-				e.printStackTrace();
-			}
+			hideCursor();
 			
 			calculatePitch();
 			calculateAngleAroundPlayer();
 			
-			if (Mouse.isButtonDown(1)) {
+			if (Mouse.isButtonDown(1)) { // Right click
 				float targetRot = this.angleAroundPlayer + this.lockedPosition;
-				this.lockedPosition = 0;
 				float delta = targetRot - player.getRotY();
 				player.increaseRotation(0, delta, 0);
 			}
@@ -56,11 +50,7 @@ public class PlayerCamera extends Camera {
 				this.isLocked = false;
 				this.angleAroundPlayer -= (player.getRotY() - lockedPosition);
 			}
-			try {
-				Mouse.setNativeCursor(null);
-			} catch (LWJGLException e) {
-				e.printStackTrace();
-			}
+			showCursor();
 		}
 		
 		if (!this.isLocked) {
@@ -135,4 +125,20 @@ public class PlayerCamera extends Camera {
 		float angleChange = Mouse.getDX() * 0.3f;
 		angleAroundPlayer -= angleChange;
 	}
+	
+	private void hideCursor() {
+		try {
+			Mouse.setNativeCursor(new Cursor(1, 1, 0, 0, 1, IntBuffer.allocate(1), null)); //Hide the cursor
+		} catch (LWJGLException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	private void showCursor() {
+		try {
+			Mouse.setNativeCursor(null);
+		} catch (LWJGLException e) {
+			e.printStackTrace();
+		}
+	}
 }

+ 2 - 2
src/main/java/eu/tankernn/gameEngine/postProcessing/PostProcessing.java

@@ -5,9 +5,9 @@ import org.lwjgl.opengl.GL11;
 import org.lwjgl.opengl.GL20;
 import org.lwjgl.opengl.GL30;
 
-import eu.tankernn.gameEngine.gaussianBlur.HorizontalBlur;
-import eu.tankernn.gameEngine.gaussianBlur.VerticalBlur;
 import eu.tankernn.gameEngine.models.RawModel;
+import eu.tankernn.gameEngine.postProcessing.gaussianBlur.HorizontalBlur;
+import eu.tankernn.gameEngine.postProcessing.gaussianBlur.VerticalBlur;
 import eu.tankernn.gameEngine.renderEngine.Loader;
 
 public class PostProcessing {

+ 1 - 1
src/main/java/eu/tankernn/gameEngine/gaussianBlur/HorizontalBlur.java → src/main/java/eu/tankernn/gameEngine/postProcessing/gaussianBlur/HorizontalBlur.java

@@ -1,4 +1,4 @@
-package eu.tankernn.gameEngine.gaussianBlur;
+package eu.tankernn.gameEngine.postProcessing.gaussianBlur;
 
 import org.lwjgl.opengl.GL11;
 import org.lwjgl.opengl.GL13;

+ 3 - 3
src/main/java/eu/tankernn/gameEngine/gaussianBlur/HorizontalBlurShader.java → src/main/java/eu/tankernn/gameEngine/postProcessing/gaussianBlur/HorizontalBlurShader.java

@@ -1,11 +1,11 @@
-package eu.tankernn.gameEngine.gaussianBlur;
+package eu.tankernn.gameEngine.postProcessing.gaussianBlur;
 
 import eu.tankernn.gameEngine.shaders.ShaderProgram;
 
 public class HorizontalBlurShader extends ShaderProgram {
 
-	private static final String VERTEX_FILE = "/eu/tankernn/gameEngine/gaussianBlur/horizontalBlurVertex.glsl";
-	private static final String FRAGMENT_FILE = "/eu/tankernn/gameEngine/gaussianBlur/blurFragment.glsl";
+	private static final String VERTEX_FILE = "/eu/tankernn/gameEngine/postProcessing/gaussianBlur/horizontalBlurVertex.glsl";
+	private static final String FRAGMENT_FILE = "/eu/tankernn/gameEngine/postProcessing/gaussianBlur/blurFragment.glsl";
 	
 	private int location_targetWidth;
 	

+ 1 - 1
src/main/java/eu/tankernn/gameEngine/gaussianBlur/VerticalBlur.java → src/main/java/eu/tankernn/gameEngine/postProcessing/gaussianBlur/VerticalBlur.java

@@ -1,4 +1,4 @@
-package eu.tankernn.gameEngine.gaussianBlur;
+package eu.tankernn.gameEngine.postProcessing.gaussianBlur;
 
 import org.lwjgl.opengl.GL11;
 import org.lwjgl.opengl.GL13;

+ 3 - 3
src/main/java/eu/tankernn/gameEngine/gaussianBlur/VerticalBlurShader.java → src/main/java/eu/tankernn/gameEngine/postProcessing/gaussianBlur/VerticalBlurShader.java

@@ -1,11 +1,11 @@
-package eu.tankernn.gameEngine.gaussianBlur;
+package eu.tankernn.gameEngine.postProcessing.gaussianBlur;
 
 import eu.tankernn.gameEngine.shaders.ShaderProgram;
 
 public class VerticalBlurShader extends ShaderProgram{
 
-	private static final String VERTEX_FILE = "/eu/tankernn/gameEngine/gaussianBlur/verticalBlurVertex.glsl";
-	private static final String FRAGMENT_FILE = "/eu/tankernn/gameEngine/gaussianBlur/blurFragment.glsl";
+	private static final String VERTEX_FILE = "/eu/tankernn/gameEngine/postProcessing/gaussianBlur/verticalBlurVertex.glsl";
+	private static final String FRAGMENT_FILE = "/eu/tankernn/gameEngine/postProcessing/gaussianBlur/blurFragment.glsl";
 	
 	private int location_targetHeight;
 	

+ 0 - 0
src/main/java/eu/tankernn/gameEngine/gaussianBlur/blurFragment.glsl → src/main/java/eu/tankernn/gameEngine/postProcessing/gaussianBlur/blurFragment.glsl


+ 0 - 0
src/main/java/eu/tankernn/gameEngine/gaussianBlur/horizontalBlurVertex.glsl → src/main/java/eu/tankernn/gameEngine/postProcessing/gaussianBlur/horizontalBlurVertex.glsl


+ 0 - 0
src/main/java/eu/tankernn/gameEngine/gaussianBlur/verticalBlurVertex.glsl → src/main/java/eu/tankernn/gameEngine/postProcessing/gaussianBlur/verticalBlurVertex.glsl


+ 82 - 1
src/main/java/eu/tankernn/gameEngine/renderEngine/DisplayManager.java

@@ -1,5 +1,9 @@
 package eu.tankernn.gameEngine.renderEngine;
 
+import java.awt.Dimension;
+import java.awt.Toolkit;
+
+import org.lwjgl.input.Keyboard;
 import org.lwjgl.opengl.GL11;
 import org.lwjgl.LWJGLException;
 import org.lwjgl.Sys;
@@ -25,6 +29,7 @@ public class DisplayManager {
 	
 	private static long lastFrameTime;
 	private static float delta;
+	private static boolean fullscreen = false;
 	
 	/**
 	 * Creates a new display.
@@ -35,7 +40,8 @@ public class DisplayManager {
 				.withProfileCore(true);
 		
 		try {
-			Display.setDisplayMode(new DisplayMode(WIDTH, HEIGHT));
+			setDisplayMode(WIDTH, HEIGHT, fullscreen);
+			Display.setResizable(true);
 			Display.create(new PixelFormat().withSamples(MULTISAMPLING).withDepthBits(24), attribs);
 			GL11.glEnable(GL13.GL_MULTISAMPLE);
 		} catch (LWJGLException e) {
@@ -48,10 +54,85 @@ public class DisplayManager {
 		Display.setTitle(Settings.GAME_NAME);
 	}
 	
+	/**
+	 * Set the display mode to be used
+	 * 
+	 * @param width The width of the display required
+	 * @param height The height of the display required
+	 * @param fullscreen True if we want fullscreen mode
+	 */
+	public static void setDisplayMode(int width, int height, boolean fullscreen) {
+		
+		// return if requested DisplayMode is already set
+		if ((Display.getDisplayMode().getWidth() == width) &&
+				(Display.getDisplayMode().getHeight() == height) &&
+				(Display.isFullscreen() == fullscreen)) {
+			return;
+		}
+		
+		try {
+			DisplayMode targetDisplayMode = null;
+			
+			if (fullscreen) {
+				DisplayMode[] modes = Display.getAvailableDisplayModes();
+				int freq = 0;
+				
+				for (int i = 0; i < modes.length; i++) {
+					DisplayMode current = modes[i];
+					
+					if ((current.getWidth() == width) && (current.getHeight() == height)) {
+						if ((targetDisplayMode == null) || (current.getFrequency() >= freq)) {
+							if ((targetDisplayMode == null) || (current.getBitsPerPixel() > targetDisplayMode.getBitsPerPixel())) {
+								targetDisplayMode = current;
+								freq = targetDisplayMode.getFrequency();
+							}
+						}
+						
+						// if we've found a match for bpp and frequence against the 
+						// original display mode then it's probably best to go for this one
+						// since it's most likely compatible with the monitor
+						if ((current.getBitsPerPixel() == Display.getDesktopDisplayMode().getBitsPerPixel()) &&
+								(current.getFrequency() == Display.getDesktopDisplayMode().getFrequency())) {
+							targetDisplayMode = current;
+							break;
+						}
+					}
+				}
+			} else {
+				targetDisplayMode = new DisplayMode(width, height);
+			}
+			
+			if (targetDisplayMode == null) {
+				System.out.println("Failed to find value mode: " + width + "x" + height + " fs=" + fullscreen);
+				return;
+			}
+			
+			Display.setDisplayMode(targetDisplayMode);
+			Display.setFullscreen(fullscreen);
+			Display.setResizable(!fullscreen);
+			
+		} catch (LWJGLException e) {
+			System.out.println("Unable to setup mode " + width + "x" + height + " fullscreen=" + fullscreen + e);
+		}
+	}
+	
 	/**
 	 * Updates the display. Should be called every frame.
 	 */
 	public static void updateDisplay() {
+		if (Keyboard.isKeyDown(Keyboard.KEY_F)) {
+			fullscreen = !fullscreen;
+			
+			if (fullscreen) {
+				Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+				int width = (int) screenSize.getWidth();
+				int height = (int) screenSize.getHeight();
+				setDisplayMode(width, height, fullscreen);
+			} else {
+				setDisplayMode(WIDTH, HEIGHT, fullscreen);
+			}
+		}
+		
 		Display.sync(FPS_CAP);
 		Display.update();
 		long currentFrameTime = getCurrentTime();