// Token: 0x060002B5 RID: 693 RVA: 0x0000B630 File Offset: 0x00009A30 public List <Celda> get_Path(Celda celda_inicio, Celda celda_final, List <Celda> celdas_no_permitidas, bool detener_delante, byte distancia_detener) { bool flag = celda_inicio == null || celda_final == null; List <Celda> result; if (flag) { result = null; } else { List <Celda> list = new List <Celda> { celda_inicio }; bool flag2 = celdas_no_permitidas.Contains(celda_final); if (flag2) { celdas_no_permitidas.Remove(celda_final); } while (list.Count > 0) { int index = 0; for (int i = 1; i < list.Count; i++) { bool flag3 = list[i].coste_f < list[index].coste_f; if (flag3) { index = i; } bool flag4 = list[i].coste_f != list[index].coste_f; if (!flag4) { bool flag5 = list[i].coste_g > list[index].coste_g; if (flag5) { index = i; } bool flag6 = list[i].coste_g == list[index].coste_g; if (flag6) { index = i; } bool flag7 = list[i].coste_g == list[index].coste_g; if (flag7) { index = i; } } } Celda celda = list[index]; bool flag8 = detener_delante && this.get_Distancia_Nodos(celda, celda_final) <= (int)distancia_detener && !celda_final.es_Caminable(); if (flag8) { return(this.get_Camino_Retroceso(celda_inicio, celda)); } bool flag9 = celda == celda_final; if (flag9) { return(this.get_Camino_Retroceso(celda_inicio, celda_final)); } list.Remove(celda); celdas_no_permitidas.Add(celda); foreach (Celda celda2 in this.get_Celdas_Adyecentes(celda)) { bool flag10 = celdas_no_permitidas.Contains(celda2) || !celda2.es_Caminable(); if (!flag10) { bool flag11 = celda2.es_Teleport() && celda2 != celda_final; if (!flag11) { int num = celda.coste_g + this.get_Distancia_Nodos(celda2, celda); bool flag12 = !list.Contains(celda2); if (flag12) { list.Add(celda2); } else { bool flag13 = num >= celda2.coste_g; if (flag13) { continue; } } celda2.coste_g = num; celda2.coste_h = this.get_Distancia_Nodos(celda2, celda_final); celda2.coste_f = celda2.coste_g + celda2.coste_h; celda2.nodo_padre = celda; } } } } result = null; } return(result); }
public List <short> get_Path(Celda celda_inicio, Celda celda_final, List <Celda> celdas_no_permitidas, bool detener_delante) { List <Celda> celdas_permitidas = new List <Celda>() { celda_inicio }; while (celdas_permitidas.Count > 0) { int index = 0; for (int i = 1; i < celdas_permitidas.Count; i++) { if (celdas_permitidas[i].coste_f < celdas_permitidas[index].coste_f) { index = i; } if (celdas_permitidas[i].coste_f != celdas_permitidas[index].coste_f) { continue; } if (celdas_permitidas[i].coste_g > celdas_permitidas[index].coste_g) { index = i; } if (celdas_permitidas[i].coste_g == celdas_permitidas[index].coste_g) { index = i; } if (celdas_permitidas[i].coste_g == celdas_permitidas[index].coste_g) { index = i; } } Celda actual = celdas_permitidas[index]; if (detener_delante && get_Distancia_Nodos(actual, celda_final) == 1 && !celda_final.es_Caminable()) { return(get_Camino_Retroceso(celda_inicio, actual)); } if (actual == celda_final) { return(get_Camino_Retroceso(celda_inicio, celda_final)); } celdas_permitidas.Remove(actual); celdas_no_permitidas.Add(actual); foreach (Celda celda_siguiente in get_Celdas_Adyecentes(actual)) { if (celdas_no_permitidas.Contains(celda_siguiente) || !celda_siguiente.es_Caminable()) { continue; } if (celda_siguiente.es_Teleport() && celda_siguiente != celda_final) { continue; } int temporal_g = actual.coste_g + get_Distancia_Nodos(celda_siguiente, actual); if (!celdas_permitidas.Contains(celda_siguiente)) { celdas_permitidas.Add(celda_siguiente); } else if (temporal_g >= celda_siguiente.coste_g) { continue; } celda_siguiente.coste_g = temporal_g; celda_siguiente.coste_h = get_Distancia_Nodos(celda_siguiente, celda_final); celda_siguiente.coste_f = celda_siguiente.coste_g + celda_siguiente.coste_h; celda_siguiente.nodo_padre = actual; } } return(null); }