package de.heatup.mapengine;

import de.heatup.cfg.Config;

public class MapGrid {
	
	private static MapGridCell[][] allGridCells = new MapGridCell[Config.mapMaxTilesWidth][Config.mapMaxTilesHeight];
	
	private static MapGridCell dummyCell = new MapGridCell(); /* wird zurückgegeben, falls der MapGrid index ausserhalb unserer allGridCells dimension zeigt. */
	/**
	 * Neue Grid Zelle an x und y hinzufügen und festlegen, ob die Zelle begehbar ist.
	 * @param x X-Koordinate
	 * @param y Y-Koordinate
	 * @param isPath legt fest, ob es sich hier um eine begehbare Zelle handelt.
	 */
	protected static void addGrid(int x, int y, boolean isPath) {
		if (!(x < 0 || x > Config.mapMaxTilesWidth || y < 0 || y > Config.mapMaxTilesHeight)) {
			MapGridCell newCell = new MapGridCell();
			newCell.setPath(isPath);
			allGridCells[x][y] = newCell;
		}
	}
	/**
	 * Neue Grid Zelle an x und y hinzufügen und festlegen, ob diese Zelle begehbar ist und ob es sich um einen Trigger handelt.
	 * @param x X-Koordinate
	 * @param y Y-Koordinate
	 * @param isPath legt fest, ob es sich hier um eine begehbare Zelle handelt.
	 * @param isTrigger legt fest, ob es sich hier um eine Trigger Zelle handelt.
	 * @param correspondingHardwareToTrigger legt fest, welche Hardware zu triggern ist.
	 */
	protected static void addGrid(int x, int y, boolean isPath, boolean isTrigger, char correspondingHardwareToTrigger) {
		if (!(x < 0 || x > Config.mapMaxTilesWidth || y < 0 || y > Config.mapMaxTilesHeight)) {
			MapGridCell newCell = new MapGridCell();
			newCell.setPath(isPath);
			newCell.setTrigger(isTrigger);
			newCell.setCorrespondingHardwareToTrigger(correspondingHardwareToTrigger);
			allGridCells[x][y] = newCell;
		}
	}
	/**
	 * Neue Grid Zelle an x und y hinzufügen und festlegen, ob es sich um einen Trigger handelt.
	 * @param x X-Koordinate
	 * @param y Y-Koordinate
	 * @param isTrigger legt fest, ob es sich hier um eine Trigger Zelle handelt.
	 * @param correspondingHardwareToTrigger legt fest, welche Hardware zu triggern ist.
	 */
	protected static void addGrid(int x, int y, boolean isTrigger, char correspondingHardwareToTrigger) {
		if (!(x < 0 || x > Config.mapMaxTilesWidth || y < 0 || y > Config.mapMaxTilesHeight)) {
			MapGridCell newCell = new MapGridCell();
			newCell.setTrigger(isTrigger);
			newCell.setCorrespondingHardwareToTrigger(correspondingHardwareToTrigger);
			allGridCells[x][y] = newCell;
		}
	}
	/**
	 * Liefert die GridCell von angegebener Position zurück.
	 * @param x X-Koordinate
	 * @param y Y-Koordinate
	 * @return liefert eine GridCell mit allen Eigenschaften zurück.
	 */
	public static MapGridCell getGridCell(int x, int y) {
		if (!(x < 0 || x > Config.mapMaxTilesWidth-1 || y < 0 || y > Config.mapMaxTilesHeight-1)) {
			return allGridCells[x][y];
		}
		return dummyCell;
	}
}
