package ei.game.scene;

import ei.engine.math.Vector3f;
import ei.engine.scene.Node;
import ei.engine.scene.Sprite;

public class Map {
	private static final int POS_SIZE = 50;
	private int width;
	private int hight;
	private GameEntity[][] map;
	private Node mapNode;
	
	public Map(int w, int h){
		this.width = w;
		this.hight = h;
		init();
	}
		
	private void init(){
		map = new GameEntity[width][hight];
		
		// init textures
		mapNode = new Node("MapNode");
		for(int i=0; i<width ;i++){
			for(int j=0; j<hight ;j++){
				Sprite s = new Sprite("MapPos("+i+","+j+")","data/map/sand.jpg");
				s.setLocation(new Vector3f(i*POS_SIZE,j*POS_SIZE,0));
				s.getTexture().setTextureWidth(POS_SIZE+1.2f);
				s.getTexture().setTextureHeight(POS_SIZE+1.2f);
				s.getTexture().setWidth(POS_SIZE+1);
				s.getTexture().setHeight(POS_SIZE+1);
				mapNode.add(s);
			}
		}
	}
	
	/**
	 * Returns if the pos inthe map is empty
	 * 
	 * @param x The x pos
	 * @param y The y pos
	 * @return True if empty else false
	 */
	public boolean isPosEmpty(int x, int y){
		if(map[x][y] != null){
			return true;
		}
		return false;
	}
	
	/**
	 * Returns the object at the pos
	 * 
	 * @param x The x pos
	 * @param y The y pos
	 * @return The object in that pos
	 */
	public GameEntity getPos(int x, int y){
		return map[x][y];
	}
	
	/**
	 * Sets an object at the pos
	 * 
	 * @param e The object
	 * @param x The x pos
	 * @param y The y pos
	 */
	public void setPos(GameEntity e, int x, int y){
		map[x][y] = e;
	}
	
	/**
	 * Removes a object from that pos
	 * 
	 * @param x The x pos
	 * @param y The y pos
	 */
	public void removePos(int x, int y){
		map[x][y] = null;
	}
	
	/**
	 * Returns the map node
	 * 
	 * @return The map node
	 */
	public Node getMapNode(){
		return mapNode;
	}
}
