package ggj2014BsAs.grupoJ.juego.escena
{
	import entities.Level;
	import flash.geom.Point;
	import ggj2014BsAs.grupoJ.datos.LIndicesColoresBaldosas;
	/**
	 * ...
	 * @author Damián Flores
	 */
	public class PlataformaVariable
	{
		public var posicion:Point;
		public var dimensiones:Point;
		
		public var colisionConColor:Boolean;
		public var colisionSinColor:Boolean;
		public var colorOriginal:int;
		public var asociado:PlataformaVariable;
		
		function PlataformaVariable(_colisionConColor:Boolean, _colisionSinColor:Boolean, _colorOriginal:int, x:int, y:int, ancho:int, alto:int, _asociado:PlataformaVariable = null)
		{
			colorOriginal = _colorOriginal;
			colisionConColor = _colisionConColor;
			colisionSinColor = _colisionSinColor;
			posicion = new Point(x, y);
			dimensiones = new Point(ancho, alto);
			asociado = _asociado;
		}
		
		public function sobreescribirMatriz(cuadros:Array):void
		{
			var conColision:Boolean = cromoActivo ? colisionConColor : colisionSinColor;
			if (asociado && asociado.cromoActivo) conColision = colisionConColor;
			var dimensionesMapa:Point = new Point(Level.COLUMNS, Level.ROWS);
			var nBaldosas:int = dimensiones.x * dimensiones.y;
			var colorAAplicar:Number = cromoActivo ? colorOriginal : -1;
			
			for (var _x:int = 0; _x <  dimensiones.x; _x++)
			{
				for (var _y:int = 0; _y < dimensiones.y; _y++)
				{
					var posicionBaldosa:Point = posicion.add(new Point(_x, _y));
					var indice:int = posicionBaldosa.x + posicionBaldosa.y * dimensionesMapa.x;
					var indiceColor:int = LIndicesColoresBaldosas.obtenerIndice(colorAAplicar, conColision);
					cuadros[indice] = indiceColor;
				}
			}
		}
		
		public function get cromoActivo():Boolean { return Registry.currentColor == colorOriginal; }
		
		public function destruir():void
		{
			asociado = null;
		}
	}
}