[Change] Documented Camera
This commit is contained in:
		
							parent
							
								
									7eb171b491
								
							
						
					
					
						commit
						4b2803c7b9
					
				
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -4,32 +4,61 @@ import org.jsfml.graphics.RenderWindow; | |||||||
| import org.jsfml.graphics.View; | import org.jsfml.graphics.View; | ||||||
| import org.jsfml.system.Vector2f; | import org.jsfml.system.Vector2f; | ||||||
| 
 | 
 | ||||||
|  | /** | ||||||
|  |  * Camera that can center on various objects. | ||||||
|  |  * @author Ritchie Cunningham | ||||||
|  |  */ | ||||||
| public class Camera { | public class Camera { | ||||||
|     public int[] currentPos = {0, 0}; |     /** | ||||||
|     private static RenderWindow window; |      * The window the camera is affecting. | ||||||
|  |      */ | ||||||
|  |     private RenderWindow window; | ||||||
| 
 | 
 | ||||||
|     public Camera(RenderWindow newWindow) { |     /** | ||||||
|         window = newWindow; |      * Default view. | ||||||
|  |      */ | ||||||
|  |     private View defaultView; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Create a new camera for window w. | ||||||
|  |      * @param w Window for which to create the camera. | ||||||
|  |      */ | ||||||
|  |     public Camera(RenderWindow w) { | ||||||
|  |         window = w; | ||||||
|  |         defaultView = (View) window.getDefaultView(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public static void SetWindow(RenderWindow newWindow) { |     /** | ||||||
|         window = newWindow; |      * Center the camera on the following position. | ||||||
|  |      * @param pos Position to center the camera on. | ||||||
|  |      * @param step | ||||||
|  |      */ | ||||||
|  |     public void centerOn(Vector2f pos, float step) { | ||||||
|  |         View newView = new View(defaultView.getCenter(), defaultView.getSize()); | ||||||
|  |         newView.setCenter(pos); | ||||||
|  |         window.setView(newView); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public static void MoveTo(Vector2f toLoc, float step) { |     /** | ||||||
|         View defaultView = (View) window.getDefaultView(); |      * Center the camera on the default view. | ||||||
|         View view = new View(vectorLerp(defaultView.getCenter(), |      */ | ||||||
|             toLoc, step), defaultView.getSize()); |     public void centerOnDefault() { | ||||||
|         window.setView(view); |         window.setView(defaultView); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public static float Lerp(float x0, float x1, float m) { | 
 | ||||||
|  |     /** | ||||||
|  |      *  | ||||||
|  |      * @param x0 | ||||||
|  |      * @param x1 | ||||||
|  |      * @param m | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     public float Lerp(float x0, float x1, float m) { | ||||||
|         return x0 + m * (x1-x0); |         return x0 + m * (x1-x0); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public static Vector2f vectorLerp(Vector2f v0, Vector2f v1, float m) { |     public Vector2f vectorLerp(Vector2f v0, Vector2f v1, float m) { | ||||||
|         return new Vector2f(Lerp(v0.x, v1.x, m), Lerp(v0.y, v1.y, m)); |         return new Vector2f(Lerp(v0.x, v1.x, m), Lerp(v0.y, v1.y, m)); | ||||||
|     } |     } | ||||||
| 
 |  | ||||||
|     public static void Rotate() {} |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -4,6 +4,7 @@ import org.jsfml.graphics.Color; | |||||||
| import org.jsfml.graphics.RenderWindow; | import org.jsfml.graphics.RenderWindow; | ||||||
| import org.jsfml.graphics.TextStyle; | import org.jsfml.graphics.TextStyle; | ||||||
| import org.jsfml.system.Clock; | import org.jsfml.system.Clock; | ||||||
|  | import org.jsfml.system.Vector2f; | ||||||
| import org.jsfml.system.Vector2i; | import org.jsfml.system.Vector2i; | ||||||
| import org.jsfml.window.Keyboard; | import org.jsfml.window.Keyboard; | ||||||
| import org.jsfml.window.Keyboard.Key; | import org.jsfml.window.Keyboard.Key; | ||||||
| @ -42,6 +43,11 @@ public class Game { | |||||||
| 	 * Repesents whether or not the user has the window opened and in focus. | 	 * Repesents whether or not the user has the window opened and in focus. | ||||||
| 	 */ | 	 */ | ||||||
| 	private boolean windowFocus = true; | 	private boolean windowFocus = true; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Allows the window to shift focus. | ||||||
|  | 	 */ | ||||||
|  | 	private Camera camera; | ||||||
| 	 | 	 | ||||||
| 
 | 
 | ||||||
| 	/** | 	/** | ||||||
| @ -60,6 +66,7 @@ public class Game { | |||||||
| 		window.create(new VideoMode(windowDimensions.x, windowDimensions.y), | 		window.create(new VideoMode(windowDimensions.x, windowDimensions.y), | ||||||
| 			windowTitle); | 			windowTitle); | ||||||
| 		player.changeMap(new Map(10, 10, Tile.SAND)); | 		player.changeMap(new Map(10, 10, Tile.SAND)); | ||||||
|  | 		camera = new Camera(window); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/** | 	/** | ||||||
| @ -151,8 +158,11 @@ public class Game { | |||||||
| 		/* The window has automatic double-buffering. */ | 		/* The window has automatic double-buffering. */ | ||||||
| 		window.clear(); | 		window.clear(); | ||||||
| 		/* Draw each object like layers, background to foreground. */ | 		/* Draw each object like layers, background to foreground. */ | ||||||
|  | 		Vector2f playerPos = player.getSprite().getPosition(); | ||||||
|  | 		camera.centerOn(playerPos, 0); | ||||||
| 		window.draw(player.getMap()); | 		window.draw(player.getMap()); | ||||||
| 		window.draw(player); | 		window.draw(player); | ||||||
|  | 		camera.centerOnDefault(); | ||||||
| 		window.draw(fpsUI); | 		window.draw(fpsUI); | ||||||
| 		window.display(); | 		window.display(); | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -101,7 +101,7 @@ public class Player extends Entity implements Drawable { | |||||||
|              * e.g. NORTH would return the location above the current location. |              * e.g. NORTH would return the location above the current location. | ||||||
|              */ |              */ | ||||||
|             Location newLoc = entityLoc.getRelativeLocation(d); |             Location newLoc = entityLoc.getRelativeLocation(d); | ||||||
|             playerLoc.setDirection(d); |             entityLoc.setDirection(d); | ||||||
|             if(currentMap.isValidLocation(newLoc)) { |             if(currentMap.isValidLocation(newLoc)) { | ||||||
|                 currentAction = PlayerAction.MOVING; |                 currentAction = PlayerAction.MOVING; | ||||||
|                 entityLoc.setDirection(d); |                 entityLoc.setDirection(d); | ||||||
| @ -130,6 +130,14 @@ public class Player extends Entity implements Drawable { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|      |      | ||||||
|  |     /** | ||||||
|  |      * Get animated sprite. | ||||||
|  |      * @return Animated sprite. | ||||||
|  |      */ | ||||||
|  |     public Sprite getSprite() { | ||||||
|  |         return playerSprite.getSprite(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * Draw the player on screen. |      * Draw the player on screen. | ||||||
|      */ |      */ | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user