// Path: Episode 34/TileGame/src/dev/codenmore/tilegame/Handler.java
// public class Handler {
// 	
// 	private Game game;
// 	private World world;
// 	
// 	public Handler(Game game){
// 		this.game = game;
// 	}
// 	
// 	public GameCamera getGameCamera(){
// 		return game.getGameCamera();
// 	}
// 	
// 	public KeyManager getKeyManager(){
// 		return game.getKeyManager();
// 	}
// 	
// 	public MouseManager getMouseManager(){
// 		return game.getMouseManager();
// 	}
// 	
// 	public int getWidth(){
// 		return game.getWidth();
// 	}
// 	
// 	public int getHeight(){
// 		return game.getHeight();
// 	}
// 
// 	public Game getGame() {
// 		return game;
// 	}
// 
// 	public void setGame(Game game) {
// 		this.game = game;
// 	}
// 
// 	public World getWorld() {
// 		return world;
// 	}
// 
// 	public void setWorld(World world) {
// 		this.world = world;
// 	}
// 
// }
// 
// Path: Episode 32/TileGame/src/dev/codenmore/tilegame/worlds/World.java
// public class World {
// 
// 	private Handler handler;
// 	private int width, height;
// 	private int spawnX, spawnY;
// 	private int[][] tiles;
// 	//Entities
// 	private EntityManager entityManager;
// 	// Item
// 	private ItemManager itemManager;
// 	
// 	public World(Handler handler, String path){
// 		this.handler = handler;
// 		entityManager = new EntityManager(handler, new Player(handler, 100, 100));
// 		itemManager = new ItemManager(handler);
// 		// Temporary entity code!
// 		entityManager.addEntity(new Tree(handler, 100, 250));
// 		entityManager.addEntity(new Rock(handler, 100, 450));
// 		
// 		loadWorld(path);
// 		
// 		entityManager.getPlayer().setX(spawnX);
// 		entityManager.getPlayer().setY(spawnY);
// 	}
// 	
// 	public void tick(){
// 		itemManager.tick();
// 		entityManager.tick();
// 	}
// 	
// 	public void render(Graphics g){
// 		int xStart = (int) Math.max(0, handler.getGameCamera().getxOffset() / Tile.TILEWIDTH);
// 		int xEnd = (int) Math.min(width, (handler.getGameCamera().getxOffset() + handler.getWidth()) / Tile.TILEWIDTH + 1);
// 		int yStart = (int) Math.max(0, handler.getGameCamera().getyOffset() / Tile.TILEHEIGHT);
// 		int yEnd = (int) Math.min(height, (handler.getGameCamera().getyOffset() + handler.getHeight()) / Tile.TILEHEIGHT + 1);
// 		
// 		for(int y = yStart;y < yEnd;y++){
// 			for(int x = xStart;x < xEnd;x++){
// 				getTile(x, y).render(g, (int) (x * Tile.TILEWIDTH - handler.getGameCamera().getxOffset()),
// 						(int) (y * Tile.TILEHEIGHT - handler.getGameCamera().getyOffset()));
// 			}
// 		}
// 		// Items
// 		itemManager.render(g);
// 		//Entities
// 		entityManager.render(g);
// 	}
// 	
// 	public Tile getTile(int x, int y){
// 		if(x < 0 || y < 0 || x >= width || y >= height)
// 			return Tile.grassTile;
// 		
// 		Tile t = Tile.tiles[tiles[x][y]];
// 		if(t == null)
// 			return Tile.dirtTile;
// 		return t;
// 	}
// 	
// 	private void loadWorld(String path){
// 		String file = Utils.loadFileAsString(path);
// 		String[] tokens = file.split("\\s+");
// 		width = Utils.parseInt(tokens[0]);
// 		height = Utils.parseInt(tokens[1]);
// 		spawnX = Utils.parseInt(tokens[2]);
// 		spawnY = Utils.parseInt(tokens[3]);
// 		
// 		tiles = new int[width][height];
// 		for(int y = 0;y < height;y++){
// 			for(int x = 0;x < width;x++){
// 				tiles[x][y] = Utils.parseInt(tokens[(x + y * width) + 4]);
// 			}
// 		}
// 	}
// 	
// 	public int getWidth(){
// 		return width;
// 	}
// 	
// 	public int getHeight(){
// 		return height;
// 	}
// 
// 	public EntityManager getEntityManager() {
// 		return entityManager;
// 	}
// 
// 	public Handler getHandler() {
// 		return handler;
// 	}
// 
// 	public void setHandler(Handler handler) {
// 		this.handler = handler;
// 	}
// 
// 	public ItemManager getItemManager() {
// 		return itemManager;
// 	}
// 
// 	public void setItemManager(ItemManager itemManager) {
// 		this.itemManager = itemManager;
// 	}
// 	
// }


import java.awt.Graphics;
import dev.codenmore.tilegame.Handler;
import dev.codenmore.tilegame.worlds.World;
package dev.codenmore.tilegame.states;



public class GameState extends State {
	
	private World world;
	
// Path: Episode 34/TileGame/src/dev/codenmore/tilegame/Handler.java
// public class Handler {
// 	
// 	private Game game;
// 	private World world;
// 	
// 	public Handler(Game game){
// 		this.game = game;
// 	}
// 	
// 	public GameCamera getGameCamera(){
// 		return game.getGameCamera();
// 	}
// 	
// 	public KeyManager getKeyManager(){
// 		return game.getKeyManager();
// 	}
// 	
// 	public MouseManager getMouseManager(){
// 		return game.getMouseManager();
// 	}
// 	
// 	public int getWidth(){
// 		return game.getWidth();
// 	}
// 	
// 	public int getHeight(){
// 		return game.getHeight();
// 	}
// 
// 	public Game getGame() {
// 		return game;
// 	}
// 
// 	public void setGame(Game game) {
// 		this.game = game;
// 	}
// 
// 	public World getWorld() {
// 		return world;
// 	}
// 
// 	public void setWorld(World world) {
// 		this.world = world;
// 	}
// 
// }
// 
// Path: Episode 32/TileGame/src/dev/codenmore/tilegame/worlds/World.java
// public class World {
// 
// 	private Handler handler;
// 	private int width, height;
// 	private int spawnX, spawnY;
// 	private int[][] tiles;
// 	//Entities
// 	private EntityManager entityManager;
// 	// Item
// 	private ItemManager itemManager;
// 	
// 	public World(Handler handler, String path){
// 		this.handler = handler;
// 		entityManager = new EntityManager(handler, new Player(handler, 100, 100));
// 		itemManager = new ItemManager(handler);
// 		// Temporary entity code!
// 		entityManager.addEntity(new Tree(handler, 100, 250));
// 		entityManager.addEntity(new Rock(handler, 100, 450));
// 		
// 		loadWorld(path);
// 		
// 		entityManager.getPlayer().setX(spawnX);
// 		entityManager.getPlayer().setY(spawnY);
// 	}
// 	
// 	public void tick(){
// 		itemManager.tick();
// 		entityManager.tick();
// 	}
// 	
// 	public void render(Graphics g){
// 		int xStart = (int) Math.max(0, handler.getGameCamera().getxOffset() / Tile.TILEWIDTH);
// 		int xEnd = (int) Math.min(width, (handler.getGameCamera().getxOffset() + handler.getWidth()) / Tile.TILEWIDTH + 1);
// 		int yStart = (int) Math.max(0, handler.getGameCamera().getyOffset() / Tile.TILEHEIGHT);
// 		int yEnd = (int) Math.min(height, (handler.getGameCamera().getyOffset() + handler.getHeight()) / Tile.TILEHEIGHT + 1);
// 		
// 		for(int y = yStart;y < yEnd;y++){
// 			for(int x = xStart;x < xEnd;x++){
// 				getTile(x, y).render(g, (int) (x * Tile.TILEWIDTH - handler.getGameCamera().getxOffset()),
// 						(int) (y * Tile.TILEHEIGHT - handler.getGameCamera().getyOffset()));
// 			}
// 		}
// 		// Items
// 		itemManager.render(g);
// 		//Entities
// 		entityManager.render(g);
// 	}
// 	
// 	public Tile getTile(int x, int y){
// 		if(x < 0 || y < 0 || x >= width || y >= height)
// 			return Tile.grassTile;
// 		
// 		Tile t = Tile.tiles[tiles[x][y]];
// 		if(t == null)
// 			return Tile.dirtTile;
// 		return t;
// 	}
// 	
// 	private void loadWorld(String path){
// 		String file = Utils.loadFileAsString(path);
// 		String[] tokens = file.split("\\s+");
// 		width = Utils.parseInt(tokens[0]);
// 		height = Utils.parseInt(tokens[1]);
// 		spawnX = Utils.parseInt(tokens[2]);
// 		spawnY = Utils.parseInt(tokens[3]);
// 		
// 		tiles = new int[width][height];
// 		for(int y = 0;y < height;y++){
// 			for(int x = 0;x < width;x++){
// 				tiles[x][y] = Utils.parseInt(tokens[(x + y * width) + 4]);
// 			}
// 		}
// 	}
// 	
// 	public int getWidth(){
// 		return width;
// 	}
// 	
// 	public int getHeight(){
// 		return height;
// 	}
// 
// 	public EntityManager getEntityManager() {
// 		return entityManager;
// 	}
// 
// 	public Handler getHandler() {
// 		return handler;
// 	}
// 
// 	public void setHandler(Handler handler) {
// 		this.handler = handler;
// 	}
// 
// 	public ItemManager getItemManager() {
// 		return itemManager;
// 	}
// 
// 	public void setItemManager(ItemManager itemManager) {
// 		this.itemManager = itemManager;
// 	}
// 	
// }


// Path: Episode 34/TileGame/src/dev/codenmore/tilegame/states/GameState.java
import java.awt.Graphics;
import dev.codenmore.tilegame.Handler;
import dev.codenmore.tilegame.worlds.World;

package dev.codenmore.tilegame.states;



public class GameState extends State {
	
	private World world;
	
	public GameState(Handler handler){