Пример #1
0
    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);
    }
Пример #2
0
 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);
     }
 }