Exemplo n.º 1
0
    IEnumerator CoDejarPasar(Vector2 posFinalOtro)
    {
        if (npc.estadoActual != EstadoNPC.Ocupado)
        {
            yield return(new WaitWhile(() => pies.moviendo));

            Suelo sueloActual, sueloAux;
            if (posOcupadas.Count == 0)
            {
                AddPosActual();
            }
            sueloActual = new Suelo(posOcupadas[0], posOcupadas[0], m_ciudad, true, this);
            foreach (Data posible in sueloActual.GetPosibles())
            {
                sueloAux = (Suelo)posible;
                if (sueloAux.PosicionNPC != posFinalOtro)
                {
                    MoverOcupar(sueloAux.PosicionNPC);
                    yield return(new WaitWhile(() => pies.moviendo));

                    npc.estadoActual = EstadoNPC.Quieto;
                    yield break;
                }
            }
        }
    }
Exemplo n.º 2
0
 private bool EsPosibleMoverOcupar(Vector2 posInicial, Vector2 posFinal)
 {
     if (posInicial.x != posFinal.x && posInicial.y != posFinal.y)
     {
         return(false);
     }
     if (posInicial.x == posFinal.x && Mathf.Abs(posInicial.y - posFinal.y) > 1)
     {
         return(false);
     }
     if (posInicial.y == posFinal.y && Mathf.Abs(posInicial.x - posFinal.x) > 1)
     {
         return(false);
     }
     return(Suelo.EsPosible(posInicial, posFinal, m_ciudad, considerarNPCs, this, false));
 }
Exemplo n.º 3
0
    //Verifica si las rutas se cruzan, si el otro npc ya lo verifico entonces obtiene su valor.
    private bool RutasCruzadas(NPC otroNPC)
    {
        bool rutasCruzadas;

        if (m_triggeredNPCs.ContainsKey(otroNPC))
        {
            rutasCruzadas = m_triggeredNPCs[otroNPC];
            m_triggeredNPCs.Remove(otroNPC);
        }
        else
        {
            rutasCruzadas = Suelo.RutasCruzadas(pathfinderNpc.GetRutaFiltrada(), otroNPC.pathfinder.GetRutaFiltrada(), m_npc.ciudad, pathfinderNpc, otroNPC.pathfinder);
            otroNPC.ojos.m_triggeredNPCs.Add(m_npc, rutasCruzadas);
        }
        return(rutasCruzadas);
    }
Exemplo n.º 4
0
    public static bool RutasCruzadas(List <Vector2> rutaA, List <Vector2> rutaB, Ciudad ciudad, PathfinderNPC npcA, PathfinderNPC npcB)
    {
        Suelo suelo;

        //En teoria nunca deberia haber un personaje caminando sin ultima posicion que este caminando. (WIP) #TO.DO
        if (npcB.ultimaPosicion == null)
        {
            return(true);
        }
        if (npcA.ultimaPosicion == null)
        {
            return(false);
        }
        Vector2 posFinal = npcB.ultimaPosicion.Value;
        //Ignora la ultima posicion si ambos van hacia alla. TEST QUE PASA SI LA POS FINAL NO ES UN EDIFICIO!
        bool ignorarUltimaPos = npcA.ultimaPosicion.Value == npcB.ultimaPosicion.Value;

        if (ignorarUltimaPos)
        {
            rutaA.Remove(npcA.ultimaPosicion.Value);
            rutaB.Remove(npcB.ultimaPosicion.Value);
        }
        for (int a = 0; a < rutaA.Count; a++)
        {
            for (int b = 0; b < rutaB.Count; b++)
            {
                if (Mathf.Abs(rutaA[a].x - rutaB[b].x) + Mathf.Abs(rutaA[a].y - rutaB[b].y) == 1)
                {
                    PosRutaActual tiempoLlegada;
                    if (npcA.rutaActual.TryGetValue(rutaB[b], out tiempoLlegada))
                    {
                        suelo = new Suelo(rutaA[a], posFinal, ciudad, true, npcA);
                        if (!suelo.EsPosible(tiempoLlegada.m_tiempo, npcB, rutaB[b], ignorarUltimaPos: ignorarUltimaPos))
                        {
                            //Debug.LogError(rutaA[a] + " -> " + rutaB[b]);
                            return(true);
                        }
                    }
                }
            }
        }
        //Debug.LogError("NO CRUZAN");
        return(false);
    }
Exemplo n.º 5
0
    private float GetCostToNode(Suelo suelo)
    {
        if (suelo.PosicionNPC == this.PosicionNPC)
        {
            return(0.4f);
        }
        ESuelo tipoSuelo = (ESuelo)m_ciudad.PosicionesActuales[(int)suelo.PosicionNPC.x, (int)suelo.PosicionNPC.y];

        switch (tipoSuelo)
        {
        case ESuelo.Marmol: return(0.9f);

        case ESuelo.Camino: return(1);

        case ESuelo.Tierra: return(1.5f);

        case ESuelo.Pasto: return(2f);

        case ESuelo.Arena: return(4f);

        default: return(0);
        }
    }
Exemplo n.º 6
0
    public override bool Comparar(Data data)
    {
        Suelo grilla = (Suelo)data;

        return(grilla.Comparador.Equals(this.Comparador));
    }
Exemplo n.º 7
0
    public static bool EsPosible(Vector2 posInicial, Vector2 posObjetivo, Ciudad ciudad, bool considerarNPCs, PathfinderNPC npc, bool usarMargen = true)
    {
        Suelo suelo = new Suelo(posInicial, posObjetivo, ciudad, considerarNPCs, npc);

        return(suelo.EsPosible(posObjetivo, usarMargen));
    }
Exemplo n.º 8
0
 private bool EsPosible(Vector2 posInicial, Vector2 posFinal)
 {
     return(Suelo.EsPosible(posInicial, posFinal, m_ciudad, considerarNPCs, this, false));
 }