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); }
/*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()); } }
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); }
/* * 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); }
protected abstract List <NodoGrafo> generateMinimalSpace(NodoGrafo nd);
public GrafoBusqueda(NodoGrafo _raiz) { raiz = _raiz; }
public Arco(int peso, NodoGrafo nodo) { this.peso = peso; this.nodo = nodo; }