Guest User

Untitled

a guest
Feb 2nd, 2013
51
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
  13. #define CAMUPDATE_INTERPOLATE 3 // Interpolation
  14.  
  15. enum E_CAMUPDATE_COORDS
  16. {
  17.     Float:CAMUPDATE_camPos[3],
  18.     Float:CAMUPDATE_camLook[3],
  19.     Float:CAMUPDATE_camPosIP[3], // For interpolation (AFTER POS)
  20.     Float:CAMUPDATE_camLookIP[3] // For interpolation (AFTER LOOK)
  21. }
  22. new Float:pUpdateCamCoords[MAX_PLAYERS][E_CAMUPDATE_COORDS]; // Camera coords (pos+lookat)
  23.  
  24. /* FUNCTIONS
  25. native SetPlayerCamera(playerid, Float:x, Float:y, Float:z, Float:lookx, Float:looky, Float:lookz, bool:camera_interpolate=false);
  26. 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);
  27. */
  28.  
  29. // Set a player's camera. If camera_interpolate is true the camera will interpolate (NO TIME CONTROL - see InterpolatePlayerCamera)
  30. stock SetPlayerCamera(playerid, Float:x, Float:y, Float:z, Float:lookx, Float:looky, Float:lookz, bool:camera_interpolate=false)
  31. {
  32.     TogglePlayerSpectating(playerid, true);
  33.    
  34.     if(camera_interpolate == false) pUpdateCam[playerid] = CAMUPDATE_SET;
  35.     else pUpdateCam[playerid] = CAMUPDATE_MOVE;
  36.    
  37.     pUpdateCamCoords[playerid][CAMUPDATE_camPos][0] = x;
  38.     pUpdateCamCoords[playerid][CAMUPDATE_camPos][1] = y;
  39.     pUpdateCamCoords[playerid][CAMUPDATE_camPos][2] = z;
  40.  
  41.     pUpdateCamCoords[playerid][CAMUPDATE_camLook][0] = lookx;
  42.     pUpdateCamCoords[playerid][CAMUPDATE_camLook][1] = looky;
  43.     pUpdateCamCoords[playerid][CAMUPDATE_camLook][2] = lookz;
  44.     return 1;
  45. }
  46.  
  47. // Interpolate a player's camera.
  48. 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)
  49. {
  50.     TogglePlayerSpectating(playerid, true);
  51.    
  52.     pUpdateCam[playerid] = CAMUPDATE_INTERPOLATE;
  53.    
  54.     pUpdateCamCoords[playerid][CAMUPDATE_camPos][0] = startposx;
  55.     pUpdateCamCoords[playerid][CAMUPDATE_camPos][1] = startposy;
  56.     pUpdateCamCoords[playerid][CAMUPDATE_camPos][2] = startposz;
  57.  
  58.     pUpdateCamCoords[playerid][CAMUPDATE_camLook][0] = startlookx;
  59.     pUpdateCamCoords[playerid][CAMUPDATE_camLook][1] = startlooky;
  60.     pUpdateCamCoords[playerid][CAMUPDATE_camLook][2] = startlookz;
  61.    
  62.     pUpdateCamCoords[playerid][CAMUPDATE_camPosIP][0] = toposx;
  63.     pUpdateCamCoords[playerid][CAMUPDATE_camPosIP][1] = toposy;
  64.     pUpdateCamCoords[playerid][CAMUPDATE_camPosIP][2] = toposz;
  65.    
  66.     pUpdateCamCoords[playerid][CAMUPDATE_camLookIP][0] = tolookx;
  67.     pUpdateCamCoords[playerid][CAMUPDATE_camLookIP][1] = tolooky;
  68.     pUpdateCamCoords[playerid][CAMUPDATE_camLookIP][2] = tolookz;
  69.    
  70.     SetPVarInt(playerid, "CAM_IP_TIME", interpolation_time);
  71.     return 1;
  72. }
  73.  
  74. public OnPlayerUpdate(playerid)
  75. {
  76.     if(pUpdateCam[playerid] != 0) // If camera needs setting, let's do it
  77.     {
  78.         switch(pUpdateCam[playerid])
  79.         {
  80.             case CAMUPDATE_SET:
  81.             {
  82.                 SetPlayerCameraPos(playerid, pUpdateCamCoords[playerid][CAMUPDATE_camPos][0], pUpdateCamCoords[playerid][CAMUPDATE_camPos][1], pUpdateCamCoords[playerid][CAMUPDATE_camPos][2]);
  83.                 SetPlayerCameraLookAt(playerid, pUpdateCamCoords[playerid][CAMUPDATE_camLook][0], pUpdateCamCoords[playerid][CAMUPDATE_camLook][1], pUpdateCamCoords[playerid][CAMUPDATE_camLook][2]);
  84.             }
  85.             case CAMUPDATE_MOVE:
  86.             {
  87.                 SetPlayerCameraPos(playerid, pUpdateCamCoords[playerid][CAMUPDATE_camPos][0], pUpdateCamCoords[playerid][CAMUPDATE_camPos][1], pUpdateCamCoords[playerid][CAMUPDATE_camPos][2]);
  88.                 SetPlayerCameraLookAt(playerid, pUpdateCamCoords[playerid][CAMUPDATE_camLook][0], pUpdateCamCoords[playerid][CAMUPDATE_camLook][1], pUpdateCamCoords[playerid][CAMUPDATE_camLook][2], CAMERA_MOVE);
  89.             }
  90.             case CAMUPDATE_INTERPOLATE:
  91.             {
  92.                 InterpolateCameraPos(playerid,
  93.                 pUpdateCamCoords[playerid][CAMUPDATE_camPos][0], pUpdateCamCoords[playerid][CAMUPDATE_camPos][1], pUpdateCamCoords[playerid][CAMUPDATE_camPos][2],
  94.                 pUpdateCamCoords[playerid][CAMUPDATE_camPosIP][0], pUpdateCamCoords[playerid][CAMUPDATE_camPosIP][1], pUpdateCamCoords[playerid][CAMUPDATE_camPosIP][2],
  95.                 GetPVarInt(playerid, "CAM_IP_TIME"), CAMERA_MOVE);
  96.  
  97.                 InterpolateCameraLookAt(playerid,
  98.                 pUpdateCamCoords[playerid][CAMUPDATE_camLook][0], pUpdateCamCoords[playerid][CAMUPDATE_camLook][1], pUpdateCamCoords[playerid][CAMUPDATE_camLook][2],
  99.                 pUpdateCamCoords[playerid][CAMUPDATE_camLookIP][0], pUpdateCamCoords[playerid][CAMUPDATE_camLookIP][1], pUpdateCamCoords[playerid][CAMUPDATE_camLookIP][2],
  100.                 GetPVarInt(playerid, "CAM_IP_TIME"), CAMERA_MOVE);
  101.             }
  102.         }
  103.         pUpdateCam[playerid] = 0; // Doesn't need updating anymore
  104.     }
  105.    
  106.     // Hooking
  107.     #if defined NOHUDCAM_OnPlayerUpdate
  108.         return NOHUDCAM_OnPlayerUpdate(playerid);
  109.     #else
  110.         return 1;
  111.     #endif
  112. }
  113. #if defined NOHUDCAM_OnPlayerUpdate
  114.     forward NOHUDCAM_OnPlayerUpdate(playerid);
  115. #endif
  116. #if defined _ALS_OnPlayerUpdate
  117.     #undef OnPlayerUpdate
  118. #else
  119.     #define _ALS_OnPlayerUpdate
  120. #endif
  121. #define OnPlayerUpdate NOHUDCAM_OnPlayerUpdate
Advertisement
Add Comment
Please, Sign In to add comment