/// <summary> /// <para>Obtener el area a rango</para> /// </summary> /// <param name="grid">Grid</param> /// <returns></returns> public override List <Area> GetAreasARango(Grid grid) // Obtener el area a rango { Punto pos = Unidad.Area.pos; List <Area> retValue = new List <Area>(); int dir = (Unidad.dir == Direcciones.Norte || Unidad.dir == Direcciones.Este) ? 1 : -1; int lateral = 1; if (Unidad.dir == Direcciones.Norte || Unidad.dir == Direcciones.Sur) { for (int n = 1; n <= horizontal; n++) { int min = -(lateral / 2); int max = (lateral / 2); for (int i = min; i <= max; i++) { Punto next = new Punto(pos.x + i, pos.y + (n * dir)); Area area = grid.GetArea(next); if (ComprobarAreaValida(area)) { retValue.Add(area); } } lateral += 2; } } else { for (int n = 1; n <= horizontal; n++) { int min = -(lateral / 2); int max = (lateral / 2); for (int i = min; i <= max; i++) { Punto next = new Punto(pos.x + (n * dir), pos.y + i); Area area = grid.GetArea(next); if (ComprobarAreaValida(area)) { retValue.Add(area); } } lateral += 2; } } return(retValue); }
/// <summary> /// <para>Obtener el area en area</para> /// </summary> /// <param name="grid">Grid</param> /// <param name="pos">Posicion</param> /// <returns></returns> public override List <Area> GetAreasEnArea(Grid grid, Punto pos) // Obtener el area en area { List <Area> retValue = new List <Area>(); Area area = grid.GetArea(pos); if (area != null) { retValue.Add(area); } return(retValue); }
/// <summary> /// <para>Obtener el area a rango</para> /// </summary> /// <param name="grid">Grid</param> /// <returns></returns> public override List <Area> GetAreasARango(Grid grid) // Obtener el area a rango { Punto posInicial = Unidad.Area.pos; Punto posFinal; List <Area> retValue = new List <Area>(); switch (Unidad.dir) { case Direcciones.Norte: posFinal = new Punto(posInicial.x, grid.Max.y); break; case Direcciones.Este: posFinal = new Punto(grid.Max.x, posInicial.y); break; case Direcciones.Sur: posFinal = new Punto(posInicial.x, grid.Min.y); break; default: // West posFinal = new Punto(grid.Min.x, posInicial.y); break; } int dist = 0; while (posInicial != posFinal) { if (posInicial.x < posFinal.x) { posInicial.x++; } else if (posInicial.x > posFinal.x) { posInicial.x--; } if (posInicial.y < posFinal.y) { posInicial.y++; } else if (posInicial.y > posFinal.y) { posInicial.y--; } Area a = grid.GetArea(posInicial); if (a != null && Mathf.Abs(a.altura - Unidad.Area.altura) <= vertical) { retValue.Add(a); } dist++; if (dist >= horizontal) { break; } } return(retValue); }
private Area area; // Area #endregion #region Metodos /// <summary> /// <para>Obtener el area en area</para> /// </summary> /// <param name="grid">Grid</param> /// <param name="pos">Posicion</param> /// <returns></returns> public override List <Area> GetAreasEnArea(Grid grid, Punto pos) // Obtener el area en area { area = grid.GetArea(pos); return(grid.Buscar(area, Criterio)); }