[Ayuda] Calcular la ruta correcta.
#1

Bueno.

Estaba tratando de que los NPC's no atraviesen muros de edificios, sin embargo lo logrй con el MapAndreas, pero los NPC's se suben arriba del edificio D:_

Hice este cуdigo, al parecer detecta si a 5 metros hay una altura mбs alta que la del NPC, pero no calcula bien la ruta en donde deberнa ir. Este es el cуdigo:


pawn Код:
stock GetCorrectRoute(playerid, &Float:fX, &Float:fY)
{
    new Float:Pos[3], Float:Z, Float:Angle;

    GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
    GetPlayerFacingAngle(playerid, Angle);
   
    Pos[0] += (5.0 * floatsin(-Angle, degrees));
    Pos[1] += (5.0 * floatcos(-Angle, degrees));
   
    MapAndreas_FindZ_For2DCoord(Pos[0], Pos[1], Z);
   
    if((Z - Pos[2]) > 5.0)
    {
        for(new Float:i = Angle; i < 360; i += 3.0)
        {
            GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
            Pos[0] += (2.0 * floatsin(-i, degrees));
            Pos[1] += (2.0 * floatcos(-i, degrees));

            MapAndreas_FindZ_For2DCoord(Pos[0], Pos[1], Z);

            if((Z-Pos[2]) < 5.0) break;
        }
    }
    return 1;
}
Estб un poco desoptimizado pero primeramente quiero saber cуmo hacer para calcularlo, alguna soluciуn?


PD: Por si me pregunta, PathFinder hace que el movimiento de los NPC's sea muy cutre, por esa razуn no deseo utilizarlo.
Reply
#2

Calcula la diferencia entre la posiciуn (vector Z) del NPC y la posiciуn (Z, tambiйn) del prуximo punto. Si hay una diferencia, no puede ir en esa direcciуn. Prueba alternando 45 grados en cada direcciуn (menos en retroceso, para no devolverse), hasta encontrar una ruta libre.

Cabe recalcar que MapAndreas no es lo suficientemente detallado, por lo que no va a detectar una diferencia de los valores de Z en objetos muy delgados, por ejemplo, murallas estrechas o rejas.

A .... l .... B

El punto intermedio, no serб detectado.

A ...... lllllllllllll ..... B

El punto intermedio, si serб detectado ya que tiene un mayor rango.
Reply
#3

Quote:
Originally Posted by admantis
Посмотреть сообщение
Calcula la diferencia entre la posiciуn (vector Z) del NPC y la posiciуn (Z, tambiйn) del prуximo punto. Si hay una diferencia, no puede ir en esa direcciуn. Prueba alternando 45 grados en cada direcciуn (menos en retroceso, para no devolverse), hasta encontrar una ruta libre.

Cabe recalcar que MapAndreas no es lo suficientemente detallado, por lo que no va a detectar una diferencia de los valores de Z en objetos muy delgados, por ejemplo, murallas estrechas o rejas.

A .... l .... B

El punto intermedio, no serб detectado.

A ...... lllllllllllll ..... B

El punto intermedio, si serб detectado ya que tiene un mayor rango.
El cуdigo ya calcula las posiciones entre ambos puntos, ademбs si altero 45є no funcionarнa bien en callejones estrechos.

Y sн, el MapAndreas sн calcula la altura de una muralla delgada, pero con la funciуn no lo harб muy a menudo xD.
Reply
#4

Para hacer un sistema asi, debes tener claro que quieres que haga el NPC cuando haya un muro frente a el.
Reply
#5

Quote:
Originally Posted by DesingMyCry
Посмотреть сообщение
Para hacer un sistema asi, debes tener claro que quieres que haga el NPC cuando haya un muro frente a el.
El mismo cуdigo lo dice, buscar otra direcciуn (o al menos eso es lo que intento de lograr ).
Reply
#6

Quote:
Originally Posted by DesingMyCry
Посмотреть сообщение
Para hacer un sistema asi, debes tener claro que quieres que haga el NPC cuando haya un muro frente a el.
иl lo que quiere es que si te esta siguiendo un NPC y tu te metes dentro de un lugar que esta lleno de objeto y el NPC esquive los objeto como lo harias tu,

PD: estarа haciendo un pacman
Reply


Forum Jump:


Users browsing this thread: