Example #1
0
 public LRTASD(bool[][] walls, Vector2 origin, Vector2 destiny)
 {
     this.destiny = destiny;
     populateWeights(walls, origin, destiny);
     nodoActual = new NodoGrafo(origin, pesos[(int)origin.x][(int)origin.y]);
     grafoB     = new GrafoBusqueda(nodoActual);
 }
Example #2
0
    /*private Vector2 nextMove(int[] minimalSpace, Vector2 position)
     * {
     *
     *  int minorCostIndex = -1, minorCost = int.MaxValue;
     *  for (int i = 0; i < minimalSpace.Length; i++)
     *  {
     *      if (minimalSpace[i] < minorCost)
     *      {
     *          minorCost = minimalSpace[i];
     *          minorCostIndex = i;
     *      }
     *  }
     *  switch (minorCostIndex)
     *  {
     *      case 0: return new Vector2(0, 1);
     *      case 1: return new Vector2(1, 0);
     *      case 2: return new Vector2(0, -1);
     *      case 3: return new Vector2(-1, 0);
     *      default: return new Vector2(0, 0);
     *  }
     * }*/

    protected internal override Steering getSteering(PersonajeBase personaje)
    {
        Vector2 personajePos = SimManagerLRTA.positionToGrid(personaje.posicion);

        if (pesos[(int)Math.Round(personajePos.x)][(int)Math.Round(personajePos.y)] != 0)
        {
            if (setup || pursueSD.finishedLinear)
            {
                minimalSpace(personajePos);
                NodoGrafo nextNode = nextMove();

                pesos[(int)personajePos.x][(int)personajePos.y] = pesos[(int)nextNode.posicionGrid.x][(int)nextNode.posicionGrid.y] + 1;

                personaje.fakeMovement.posicion           = SimManagerLRTA.gridToPosition(nextNode.posicionGrid);
                personaje.fakeMovement.transform.position = SimManagerLRTA.gridToPosition(nextNode.posicionGrid);
                //personaje.innerDetector = 0.5f;
                personaje.fakeMovement.innerDetector = personaje.innerDetector;

                pursueSD.target = personaje.fakeMovement;
                setup           = false;

                nodoActual = nextNode;
            }
            return(pursueSD.getSteering(personaje));
        }
        else
        {
            _finishedLinear = true;
            return(new Steering());
        }
    }
Example #3
0
    protected override List <NodoGrafo> generateMinimalSpace(NodoGrafo ng)
    {
        List <NodoGrafo> listanodos = new List <NodoGrafo>();

        //cruz
        listanodos.Add(new NodoGrafo(new Vector2(ng.posicionGrid.x, ng.posicionGrid.y + 1), pesos[(int)ng.posicionGrid.x][(int)ng.posicionGrid.y + 1]));
        listanodos.Add(new NodoGrafo(new Vector2(ng.posicionGrid.x + 1, ng.posicionGrid.y), pesos[(int)ng.posicionGrid.x + 1][(int)ng.posicionGrid.y]));
        listanodos.Add(new NodoGrafo(new Vector2(ng.posicionGrid.x, ng.posicionGrid.y - 1), pesos[(int)ng.posicionGrid.x][(int)ng.posicionGrid.y - 1]));
        listanodos.Add(new NodoGrafo(new Vector2(ng.posicionGrid.x - 1, ng.posicionGrid.y), pesos[(int)ng.posicionGrid.x - 1][(int)ng.posicionGrid.y]));

        return(listanodos);
    }
Example #4
0
    /*
     * private Vector2 nextMove(int[] minimalSpace, Vector2 position)
     * {
     *
     *  int minorCostIndex = -1, minorCost = int.MaxValue;
     *  float minorDistance = float.MaxValue;
     *  for (int i=0; i < minimalSpace.Length; i++)
     *  {
     *      if (minimalSpace[i]!=int.MaxValue && minimalSpace[i] <= minorCost)
     *      {
     *          float distance=0;
     *          switch (i)
     *          {
     *              case 0: distance = (destiny - (position+ new Vector2(0, 1))).magnitude;
     *                  break;
     *              case 1:
     *                  distance = (destiny - (position + new Vector2(1, 0))).magnitude;
     *                  break;
     *              case 2:
     *                  distance = (destiny - (position + new Vector2(0, -1))).magnitude;
     *                  break;
     *              case 3:
     *                  distance = (destiny - (position + new Vector2(-1, 0))).magnitude;
     *                  break;
     *              default:
     *                  break;
     *          }
     *          if (minimalSpace[i] < minorCost)
     *          {
     *              minorCost = minimalSpace[i];
     *              minorCostIndex = i;
     *              minorDistance = distance;
     *          }else if (distance<minorDistance)
     *          {
     *              minorCost = minimalSpace[i];
     *              minorCostIndex = i;
     *              minorDistance = distance;
     *          }
     *      }
     *  }
     *
     *  switch (minorCostIndex)
     *  {
     *      case 0: return new Vector2(0, 1);
     *      case 1: return new Vector2(1, 0);
     *      case 2: return new Vector2(0, -1);
     *      case 3: return new Vector2(-1, 0);
     *      default: return new Vector2(0, 0);
     *  }
     * }
     */

    protected NodoGrafo nextMove()
    {
        int       minorCost = int.MaxValue;
        NodoGrafo nextNode  = null;

        foreach (NodoGrafo nodito in nodoActual.adyacentes)
        {
            if (nodito.peso < minorCost)
            {
                nextNode  = nodito;
                minorCost = nodito.peso;
            }
        }
        return(nextNode);
    }
Example #5
0
 protected abstract List <NodoGrafo> generateMinimalSpace(NodoGrafo nd);
Example #6
0
 public GrafoBusqueda(NodoGrafo _raiz)
 {
     raiz = _raiz;
 }
Example #7
0
 public Arco(int peso, NodoGrafo nodo)
 {
     this.peso = peso;
     this.nodo = nodo;
 }