Advertisement
ipsBruno

(Pawn) Algorítimo Inteligente (IA). Checar Obstáculos.

Jul 28th, 2014
628
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.50 KB | None | 0 0
  1. /*
  2. *
  3. * Função importante para o IA do NPC
  4. * Essa função checa se entre nX nY e pX pY tem algum obstaculo
  5. * Ex: muro, casas, postes, arvores, então ele retorna FALSE
  6. * Isto evita que o NPC passe por cima das casas ou prédios ;)
  7. * No entanto, como MapAndreas não é muito preciso, o NPC pode passar por cima de pequenos muros
  8. *
  9. */
  10.  
  11. #if defined _route_included
  12.         #endinput
  13. #endif
  14.  
  15. #define _route_included
  16.  
  17. stock DiagonalRoute(Float:nx, Float:ny, Float: nz, Float:px, Float:py, Float:pz, Float: offset = 1.5, Float: diffHeigth = 1.5) {
  18.  
  19.     //if(floatround(nz) != floatround(pz))
  20.     //  return  false; 
  21.  
  22.     static Float: diffX;
  23.  
  24.     if(nx > px) {
  25.         diffX = nx - px;
  26.     }
  27.     else {
  28.         diffX = px - nx;
  29.     }
  30.  
  31.     new Float: diffY;
  32.  
  33.     if(ny > py) {
  34.         diffY = ny - py;
  35.     }
  36.     else {
  37.         diffY = py - ny;
  38.     }
  39.  
  40.     static Float: diffXY;
  41.  
  42.     if(diffX > diffY) {
  43.         diffXY = (diffX / diffY) * offset ;
  44.     }
  45.     else {
  46.         diffXY = (diffY / diffX) * offset ;
  47.     }
  48.  
  49.     if((nx < px)){
  50.         while(nx < px) {
  51.             nx += (diffXY);
  52.             if(ny > py) {
  53.                 ny -= offset  ;
  54.             }
  55.             else {
  56.                 ny += offset  ;
  57.             }
  58.             MapAndreas_FindZ_For2DCoord(nx, ny, nz);
  59.             if(floatabs((nz) - (pz)) > diffHeigth ) {
  60.                 return  false;
  61.             }
  62.             pz = nz;
  63.         }
  64.     }
  65.     else {
  66.         while(nx > px) {
  67.             nx -= (diffXY);
  68.             if(ny > py) {
  69.                 ny -= offset ;
  70.             }
  71.             else {
  72.                 ny += offset ;
  73.             }
  74.             MapAndreas_FindZ_For2DCoord(nx, ny, nz);
  75.             if(floatabs((nz) - (pz)) > diffHeigth ) {
  76.                 return  false;
  77.             }
  78.             pz = nz;
  79.         }
  80.     }
  81.  
  82.     return true;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement