Guest User

Untitled

a guest
Feb 4th, 2013
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. SetPlayerCamera function by MP2
  3.  
  4. Set a player's camera WITHOUT THE HUD!
  5. Works by putting players in to spectate mode then setting the camera on the
  6. next OnPlayerUpdate call.
  7. */
  8.  
  9. new pUpdateCam[MAX_PLAYERS]; // Cam needs setting? See defines below
  10. #define CAMUPDATE_NONE 0
  11. #define CAMUPDATE_SET 1 // Just set the camera
  12. #define CAMUPDATE_MOVE 2 // 'CAMERA_MOVE' in SetPlayerCameraLookAt (reset)
  13. #define CAMUPDATE_MOVE2 3 // 'CAMERA_MOVE' in SetPlayerCameraLookAt (move)
  14. #define CAMUPDATE_INTERPOLATE 4 // Interpolation
  15.  
  16. enum E_CAMUPDATE_COORDS
  17. {
  18.     Float:CAMUPDATE_camPos[3],
  19.     Float:CAMUPDATE_camLook[3],
  20.     Float:CAMUPDATE_camPosNEW[3], // For interpolation (AFTER POS)
  21.     Float:CAMUPDATE_camLookNEW[3] // For interpolation (AFTER LOOK)
  22. }
  23. new Float:pUpdateCamCoords[MAX_PLAYERS][E_CAMUPDATE_COORDS]; // Camera coords (pos+lookat)
  24.  
  25. /* FUNCTIONS
  26. native SetPlayerCamera(playerid, Float:x, Float:y, Float:z, Float:lookx, Float:looky, Float:lookz, bool:camera_interpolate=false);
  27. native InterpolatePlayerCamera(playerid, Float:startposx, Float:startposy, Float:startposz, Float:startlookx, Float:startlooky, Float:startlookz, Float:toposx, Float:toposy, Float:toposz, Float:tolookx, Float:tolooky, Float:tolookz, interpolation_time=3000);
  28. */
  29.  
  30. // Set a player's camera. If camera_interpolate is true the camera will interpolate (NO TIME CONTROL - see InterpolatePlayerCamera)
  31. stock SetPlayerCamera(playerid, Float:x, Float:y, Float:z, Float:lookx, Float:looky, Float:lookz, bool:camera_interpolate=false)
  32. {
  33.     TogglePlayerSpectating(playerid, true);
  34.    
  35.     if(camera_interpolate == false) // Just set
  36.     {
  37.         pUpdateCam[playerid] = CAMUPDATE_SET;
  38.        
  39.         // Store the new coordinates
  40.         pUpdateCamCoords[playerid][CAMUPDATE_camPos][0] = x;
  41.         pUpdateCamCoords[playerid][CAMUPDATE_camPos][1] = y;
  42.         pUpdateCamCoords[playerid][CAMUPDATE_camPos][2] = z;
  43.  
  44.         pUpdateCamCoords[playerid][CAMUPDATE_camLook][0] = lookx;
  45.         pUpdateCamCoords[playerid][CAMUPDATE_camLook][1] = looky;
  46.         pUpdateCamCoords[playerid][CAMUPDATE_camLook][2] = lookz;
  47.     }
  48.     else // We will need to re-set the camera to where it currently is
  49.     {
  50.         pUpdateCam[playerid] = CAMUPDATE_MOVE;
  51.         new Float:curx, Float:cury, Float:curz; // Cam pos
  52.         new Float:curvx, Float:curvy, Float:curvz; // Front vector
  53.         GetPlayerCameraPos(playerid, curx, cury, curz);
  54.         GetPlayerCameraFrontVector(playerid, curvx, curvy, curvz);
  55.        
  56.         // NEW coordinates (after setting)
  57.         pUpdateCamCoords[playerid][CAMUPDATE_camPosNEW][0] = x;
  58.         pUpdateCamCoords[playerid][CAMUPDATE_camPosNEW][1] = y;
  59.         pUpdateCamCoords[playerid][CAMUPDATE_camPosNEW][2] = z;
  60.  
  61.         pUpdateCamCoords[playerid][CAMUPDATE_camLookNEW][0] = lookx;
  62.         pUpdateCamCoords[playerid][CAMUPDATE_camLookNEW][1] = looky;
  63.         pUpdateCamCoords[playerid][CAMUPDATE_camLookNEW][2] = lookz;
  64.        
  65.         // CURRENT coordinates
  66.         pUpdateCamCoords[playerid][CAMUPDATE_camPos][0] = curx;
  67.         pUpdateCamCoords[playerid][CAMUPDATE_camPos][1] = cury;
  68.         pUpdateCamCoords[playerid][CAMUPDATE_camPos][2] = curz;
  69.        
  70.         curx += curvx;
  71.         cury += curvy;
  72.         curz += curvz;
  73.  
  74.         pUpdateCamCoords[playerid][CAMUPDATE_camLook][0] = curx;
  75.         pUpdateCamCoords[playerid][CAMUPDATE_camLook][1] = cury;
  76.         pUpdateCamCoords[playerid][CAMUPDATE_camLook][2] = curz;
  77.     }
  78.     return 1;
  79. }
  80.  
  81. // Interpolate a player's camera.
  82. stock InterpolatePlayerCamera(playerid, Float:startposx, Float:startposy, Float:startposz, Float:startlookx, Float:startlooky, Float:startlookz, Float:toposx, Float:toposy, Float:toposz, Float:tolookx, Float:tolooky, Float:tolookz, interpolation_time=3000)
  83. {
  84.     TogglePlayerSpectating(playerid, true);
  85.    
  86.     pUpdateCam[playerid] = CAMUPDATE_INTERPOLATE;
  87.    
  88.     pUpdateCamCoords[playerid][CAMUPDATE_camPos][0] = startposx;
  89.     pUpdateCamCoords[playerid][CAMUPDATE_camPos][1] = startposy;
  90.     pUpdateCamCoords[playerid][CAMUPDATE_camPos][2] = startposz;
  91.  
  92.     pUpdateCamCoords[playerid][CAMUPDATE_camLook][0] = startlookx;
  93.     pUpdateCamCoords[playerid][CAMUPDATE_camLook][1] = startlooky;
  94.     pUpdateCamCoords[playerid][CAMUPDATE_camLook][2] = startlookz;
  95.    
  96.     pUpdateCamCoords[playerid][CAMUPDATE_camPosNEW][0] = toposx;
  97.     pUpdateCamCoords[playerid][CAMUPDATE_camPosNEW][1] = toposy;
  98.     pUpdateCamCoords[playerid][CAMUPDATE_camPosNEW][2] = toposz;
  99.    
  100.     pUpdateCamCoords[playerid][CAMUPDATE_camLookNEW][0] = tolookx;
  101.     pUpdateCamCoords[playerid][CAMUPDATE_camLookNEW][1] = tolooky;
  102.     pUpdateCamCoords[playerid][CAMUPDATE_camLookNEW][2] = tolookz;
  103.    
  104.     SetPVarInt(playerid, "CAM_IP_TIME", interpolation_time);
  105.     return 1;
  106. }
  107.  
  108. public OnPlayerUpdate(playerid)
  109. {
  110.     if(pUpdateCam[playerid] != 0) // If camera needs setting, let's do it
  111.     {
  112.         switch(pUpdateCam[playerid])
  113.         {
  114.             case CAMUPDATE_SET:
  115.             {
  116.                 SetPlayerCameraPos(playerid, pUpdateCamCoords[playerid][CAMUPDATE_camPos][0], pUpdateCamCoords[playerid][CAMUPDATE_camPos][1], pUpdateCamCoords[playerid][CAMUPDATE_camPos][2]);
  117.                 SetPlayerCameraLookAt(playerid, pUpdateCamCoords[playerid][CAMUPDATE_camLook][0], pUpdateCamCoords[playerid][CAMUPDATE_camLook][1], pUpdateCamCoords[playerid][CAMUPDATE_camLook][2]);
  118.                
  119.                 pUpdateCam[playerid] = 0; // Doesn't need updating anymore
  120.             }
  121.             case CAMUPDATE_MOVE:
  122.             {
  123.                 // Set it back to the old one first
  124.                 SetPlayerCameraPos(playerid, pUpdateCamCoords[playerid][CAMUPDATE_camPos][0], pUpdateCamCoords[playerid][CAMUPDATE_camPos][1], pUpdateCamCoords[playerid][CAMUPDATE_camPos][2]);
  125.                 SetPlayerCameraLookAt(playerid, pUpdateCamCoords[playerid][CAMUPDATE_camLook][0], pUpdateCamCoords[playerid][CAMUPDATE_camLook][1], pUpdateCamCoords[playerid][CAMUPDATE_camLook][2]);
  126.                
  127.                 pUpdateCam[playerid] = CAMUPDATE_MOVE2;
  128.             }
  129.             case CAMUPDATE_MOVE2:
  130.             {
  131.                 // Now move it
  132.                 SetPlayerCameraPos(playerid, pUpdateCamCoords[playerid][CAMUPDATE_camPosNEW][0], pUpdateCamCoords[playerid][CAMUPDATE_camPosNEW][1], pUpdateCamCoords[playerid][CAMUPDATE_camPosNEW][2]);
  133.                 SetPlayerCameraLookAt(playerid, pUpdateCamCoords[playerid][CAMUPDATE_camLookNEW][0], pUpdateCamCoords[playerid][CAMUPDATE_camLookNEW][1], pUpdateCamCoords[playerid][CAMUPDATE_camLookNEW][2], CAMERA_MOVE);
  134.                
  135.                 pUpdateCam[playerid] = 0; // Doesn't need updating anymore
  136.             }
  137.             case CAMUPDATE_INTERPOLATE:
  138.             {
  139.                 InterpolateCameraPos(playerid,
  140.                 pUpdateCamCoords[playerid][CAMUPDATE_camPos][0], pUpdateCamCoords[playerid][CAMUPDATE_camPos][1], pUpdateCamCoords[playerid][CAMUPDATE_camPos][2],
  141.                 pUpdateCamCoords[playerid][CAMUPDATE_camPosNEW][0], pUpdateCamCoords[playerid][CAMUPDATE_camPosNEW][1], pUpdateCamCoords[playerid][CAMUPDATE_camPosNEW][2],
  142.                 GetPVarInt(playerid, "CAM_IP_TIME"), CAMERA_MOVE);
  143.  
  144.                 InterpolateCameraLookAt(playerid,
  145.                 pUpdateCamCoords[playerid][CAMUPDATE_camLook][0], pUpdateCamCoords[playerid][CAMUPDATE_camLook][1], pUpdateCamCoords[playerid][CAMUPDATE_camLook][2],
  146.                 pUpdateCamCoords[playerid][CAMUPDATE_camLookNEW][0], pUpdateCamCoords[playerid][CAMUPDATE_camLookNEW][1], pUpdateCamCoords[playerid][CAMUPDATE_camLookNEW][2],
  147.                 GetPVarInt(playerid, "CAM_IP_TIME"), CAMERA_MOVE);
  148.                
  149.                 DeletePVar(playerid, "CAM_IP_TIME"); // Delete it; no longer needed.
  150.                
  151.                 pUpdateCam[playerid] = 0; // Doesn't need updating anymore
  152.             }
  153.         }
  154.     }
  155.    
  156.     // Hooking
  157.     #if defined NOHUDCAM_OnPlayerUpdate
  158.         return NOHUDCAM_OnPlayerUpdate(playerid);
  159.     #else
  160.         return 1;
  161.     #endif
  162. }
  163. #if defined NOHUDCAM_OnPlayerUpdate
  164.     forward NOHUDCAM_OnPlayerUpdate(playerid);
  165. #endif
  166. #if defined _ALS_OnPlayerUpdate
  167.     #undef OnPlayerUpdate
  168. #else
  169.     #define _ALS_OnPlayerUpdate
  170. #endif
  171. #define OnPlayerUpdate NOHUDCAM_OnPlayerUpdate
Advertisement
Add Comment
Please, Sign In to add comment