Advertisement
ipsBruno

(Pawn) INCLUDE Motor desviador de obstaculos

Aug 24th, 2012
693
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 1.95 KB | None | 0 0
  1.  
  2. angulacaoFinal(Float:x, Float:y, Float:xn, Float:yn) {
  3.  
  4.     static Float: angulacao;
  5.  
  6.     angulacao = atan2(x - xn, y - yn);
  7.  
  8.     if(angulacao > 360)     angulacao-=360;
  9.     else if(angulacao < 0)      angulacao+=360;
  10.  
  11.     return _: (angulacao) ;
  12. }
  13.  
  14.  
  15. checarObstaculos(Float: x, Float: y, Float: xn, Float: yn, Float: zn) {
  16.  
  17. // declarar e pegar angulação
  18.     static Float: angulo;
  19.  
  20.     angulo = - (Float: angulacaoFinal(x,y, xn, yn));
  21.  
  22. // desvia quando o muro tiver proximo a 1.5 metros
  23.  
  24.     x += (1.5 * floatsin(angulo, degrees)),
  25.     y += (1.5 * floatcos(angulo, degrees));
  26.  
  27.     MapAndreas_FindZ_For2DCoord(x, y, angulo);
  28.  
  29. // desvia estruturas maiores que 2 metros
  30.  
  31.     return ( (angulo) > (zn + 2.0) );
  32. }
  33.  
  34. desviarObstaulo(id, Float: x, Float: y, Float: xn, Float: yn, Float: zn) {
  35.  
  36.     static Float: angulo, lado;
  37.  
  38.     angulo = - (Float: angulacaoFinal(x,y, xn, yn)) ;
  39.  
  40. // desviar para esquerda
  41.     if( 180 > angulo > 0)  {
  42.  
  43.         angulo -= 90;
  44.  
  45.         if(angulo > 360)        angulo-=360;
  46.         else if(angulo < 0)     angulo+=360;
  47.  
  48.     }
  49.  
  50. // desviar para direita
  51.     else {
  52.         angulo += 90;
  53.  
  54.         if(angulo > 360)        angulo-=360;
  55.         else if(angulo < 0)     angulo+=360;
  56.     }
  57.  
  58.     xn += (1.5 * floatsin(angulo, degrees)),
  59.     yn += (1.5 * floatcos(angulo, degrees));
  60.  
  61.  
  62.     MapAndreas_FindZ_For2DCoord(xn, yn, angulo);
  63.  
  64.  
  65.     if ( (angulo) > (zn + 2.0) ) {
  66.  
  67.         if(lado == 1) {
  68.             angulo += 180 ;
  69.         }
  70.         else {
  71.             angulo -= 180 ;
  72.         }
  73.     }
  74.  
  75.  
  76.     // funcao para mover o objeto
  77.     // ou MOVERNPC
  78.     return MoveRNPC(id, xn, yn, angulo, 0.0083);
  79.  
  80. }
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88. ////////////////////////////////////////////////////////////////////////
  89. //
  90. //     MODO DE USO
  91.  
  92. /*
  93.     // em um temporizador de mais ou menos 0100 a 1500 ms
  94.  
  95.                 if(checarObstaculos( npcid, y, npcPos[0], npcPos[1], npcPos[2])) {
  96.                     desviarObstaulo(npcid, x, y, npcPos[0], npcPos[1], npcPos[2] ) ;
  97.  
  98.                 }
  99.                 else {
  100.                     MoveRNPC(npcid, x, y-0.1, z, 0.0083);
  101.                 }
  102. */
  103.  
  104. ///////////////////////////////////////////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement