Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- SetPlayerCamera function by MP2
- Set a player's camera WITHOUT THE HUD!
- Works by putting players in to spectate mode then setting the camera on the
- next OnPlayerUpdate call.
- */
- new pUpdateCam[MAX_PLAYERS]; // Cam needs setting? See defines below
- #define CAMUPDATE_NONE 0
- #define CAMUPDATE_SET 1 // Just set the camera
- #define CAMUPDATE_MOVE 2 // 'CAMERA_MOVE' in SetPlayerCameraLookAt
- #define CAMUPDATE_INTERPOLATE 3 // Interpolation
- enum E_CAMUPDATE_COORDS
- {
- Float:CAMUPDATE_camPos[3],
- Float:CAMUPDATE_camLook[3],
- Float:CAMUPDATE_camPosIP[3], // For interpolation (AFTER POS)
- Float:CAMUPDATE_camLookIP[3] // For interpolation (AFTER LOOK)
- }
- new Float:pUpdateCamCoords[MAX_PLAYERS][E_CAMUPDATE_COORDS]; // Camera coords (pos+lookat)
- /* FUNCTIONS
- native SetPlayerCamera(playerid, Float:x, Float:y, Float:z, Float:lookx, Float:looky, Float:lookz, bool:camera_interpolate=false);
- 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);
- */
- // Set a player's camera. If camera_interpolate is true the camera will interpolate (NO TIME CONTROL - see InterpolatePlayerCamera)
- stock SetPlayerCamera(playerid, Float:x, Float:y, Float:z, Float:lookx, Float:looky, Float:lookz, bool:camera_interpolate=false)
- {
- TogglePlayerSpectating(playerid, true);
- if(camera_interpolate == false) pUpdateCam[playerid] = CAMUPDATE_SET;
- else pUpdateCam[playerid] = CAMUPDATE_MOVE;
- pUpdateCamCoords[playerid][CAMUPDATE_camPos][0] = x;
- pUpdateCamCoords[playerid][CAMUPDATE_camPos][1] = y;
- pUpdateCamCoords[playerid][CAMUPDATE_camPos][2] = z;
- pUpdateCamCoords[playerid][CAMUPDATE_camLook][0] = lookx;
- pUpdateCamCoords[playerid][CAMUPDATE_camLook][1] = looky;
- pUpdateCamCoords[playerid][CAMUPDATE_camLook][2] = lookz;
- return 1;
- }
- // Interpolate a player's camera.
- 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)
- {
- TogglePlayerSpectating(playerid, true);
- pUpdateCam[playerid] = CAMUPDATE_INTERPOLATE;
- pUpdateCamCoords[playerid][CAMUPDATE_camPos][0] = startposx;
- pUpdateCamCoords[playerid][CAMUPDATE_camPos][1] = startposy;
- pUpdateCamCoords[playerid][CAMUPDATE_camPos][2] = startposz;
- pUpdateCamCoords[playerid][CAMUPDATE_camLook][0] = startlookx;
- pUpdateCamCoords[playerid][CAMUPDATE_camLook][1] = startlooky;
- pUpdateCamCoords[playerid][CAMUPDATE_camLook][2] = startlookz;
- pUpdateCamCoords[playerid][CAMUPDATE_camPosIP][0] = toposx;
- pUpdateCamCoords[playerid][CAMUPDATE_camPosIP][1] = toposy;
- pUpdateCamCoords[playerid][CAMUPDATE_camPosIP][2] = toposz;
- pUpdateCamCoords[playerid][CAMUPDATE_camLookIP][0] = tolookx;
- pUpdateCamCoords[playerid][CAMUPDATE_camLookIP][1] = tolooky;
- pUpdateCamCoords[playerid][CAMUPDATE_camLookIP][2] = tolookz;
- SetPVarInt(playerid, "CAM_IP_TIME", interpolation_time);
- return 1;
- }
- public OnPlayerUpdate(playerid)
- {
- if(pUpdateCam[playerid] != 0) // If camera needs setting, let's do it
- {
- switch(pUpdateCam[playerid])
- {
- case CAMUPDATE_SET:
- {
- SetPlayerCameraPos(playerid, pUpdateCamCoords[playerid][CAMUPDATE_camPos][0], pUpdateCamCoords[playerid][CAMUPDATE_camPos][1], pUpdateCamCoords[playerid][CAMUPDATE_camPos][2]);
- SetPlayerCameraLookAt(playerid, pUpdateCamCoords[playerid][CAMUPDATE_camLook][0], pUpdateCamCoords[playerid][CAMUPDATE_camLook][1], pUpdateCamCoords[playerid][CAMUPDATE_camLook][2]);
- }
- case CAMUPDATE_MOVE:
- {
- SetPlayerCameraPos(playerid, pUpdateCamCoords[playerid][CAMUPDATE_camPos][0], pUpdateCamCoords[playerid][CAMUPDATE_camPos][1], pUpdateCamCoords[playerid][CAMUPDATE_camPos][2]);
- SetPlayerCameraLookAt(playerid, pUpdateCamCoords[playerid][CAMUPDATE_camLook][0], pUpdateCamCoords[playerid][CAMUPDATE_camLook][1], pUpdateCamCoords[playerid][CAMUPDATE_camLook][2], CAMERA_MOVE);
- }
- case CAMUPDATE_INTERPOLATE:
- {
- InterpolateCameraPos(playerid,
- pUpdateCamCoords[playerid][CAMUPDATE_camPos][0], pUpdateCamCoords[playerid][CAMUPDATE_camPos][1], pUpdateCamCoords[playerid][CAMUPDATE_camPos][2],
- pUpdateCamCoords[playerid][CAMUPDATE_camPosIP][0], pUpdateCamCoords[playerid][CAMUPDATE_camPosIP][1], pUpdateCamCoords[playerid][CAMUPDATE_camPosIP][2],
- GetPVarInt(playerid, "CAM_IP_TIME"), CAMERA_MOVE);
- InterpolateCameraLookAt(playerid,
- pUpdateCamCoords[playerid][CAMUPDATE_camLook][0], pUpdateCamCoords[playerid][CAMUPDATE_camLook][1], pUpdateCamCoords[playerid][CAMUPDATE_camLook][2],
- pUpdateCamCoords[playerid][CAMUPDATE_camLookIP][0], pUpdateCamCoords[playerid][CAMUPDATE_camLookIP][1], pUpdateCamCoords[playerid][CAMUPDATE_camLookIP][2],
- GetPVarInt(playerid, "CAM_IP_TIME"), CAMERA_MOVE);
- DeletePVar(playerid, "CAM_IP_TIME"); // Delete it; no longer needed.
- }
- }
- pUpdateCam[playerid] = 0; // Doesn't need updating anymore
- }
- // Hooking
- #if defined NOHUDCAM_OnPlayerUpdate
- return NOHUDCAM_OnPlayerUpdate(playerid);
- #else
- return 1;
- #endif
- }
- #if defined NOHUDCAM_OnPlayerUpdate
- forward NOHUDCAM_OnPlayerUpdate(playerid);
- #endif
- #if defined _ALS_OnPlayerUpdate
- #undef OnPlayerUpdate
- #else
- #define _ALS_OnPlayerUpdate
- #endif
- #define OnPlayerUpdate NOHUDCAM_OnPlayerUpdate
Advertisement
Add Comment
Please, Sign In to add comment