public bool EsPosible(Vector2 pos, bool usarMargen = true) { //Checar que no sea edifio int x = (int)pos.x; int y = (int)pos.y; if (m_ciudad.PosicionesActuales[x, y] == 0) { return(false); } //DebugIf(pos, "Es posible: " + x + "," + y); if (ConsiderarNPCs) { for (int i = 0; i < m_ciudad.NPCs.Count; i++) { PathfinderNPC otroNPC = m_ciudad.NPCs[i]; if (otroNPC == NpcActual) { continue; } if (otroNPC.NpcCaminando()) { float tiempoLlegada = m_tiempoAcumulado + NpcActual.TiempoPorCasilla(pos); if (!EsPosible(tiempoLlegada, otroNPC, pos, usarMargen)) { return(false); } } else if (otroNPC.posOcupadas.Contains(pos)) { return(false); } } } //DebugIf(pos, "SI TOTAL"); return(true); }
private void InitPadreValues() { CostoAcumulado = m_padre.CostoAcumulado + GetCostToNode((Suelo)m_padre); if (NpcActual != null) { ESuelo tipo = (ESuelo)m_ciudad.PosicionesActuales[(int)PosicionNPC.x, (int)PosicionNPC.y]; m_tiempoAcumulado = ((Suelo)Padre).m_tiempoAcumulado + Pies.m_resistenciasSuelo[tipo.ToString()] * NpcActual.TiempoPorCasilla(PosicionNPC); } }