Advertisement
norn

nCamera

Nov 7th, 2011
374
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.61 KB | None | 0 0
  1. #include <a_samp>
  2. forward OnPlayerCameraFinish(playerid);
  3. forward DestroyCameraForPlayer(playerid);
  4. forward UpdatePlayerCameraPosition(playerid);
  5. forward LastCameraPos(playerid, &Float:x, &Float:y, &Float:z);
  6. #define INVALID_CAMERA -1
  7. #define INVALID_TIMER -1
  8. enum _Cam
  9. {
  10. camObjID,
  11. camTimer,
  12. bool:camSyncSurroundings,
  13. Float:camEndPX,
  14. Float:camEndPY,
  15. Float:camEndPZ,
  16. camOVW,
  17. bool:camUVW,
  18. Float:camLPX,
  19. Float:camLPY,
  20. Float:camLPZ,
  21. }
  22. new Cam[MAX_PLAYERS][_Cam];
  23. public OnGameModeInit()
  24. {
  25. for(new s = 0; s < MAX_PLAYERS; s++) {
  26. Cam[s][camObjID] = INVALID_CAMERA;
  27. Cam[s][camTimer] = INVALID_TIMER;
  28. }
  29. return CallLocalFunction("NC_OnGameModeInit", "");
  30. }
  31. #if defined _ALS_OnGameModeInit
  32. #undef OnGameModeInit
  33. #else
  34. #define _ALS_OnGameModeInit
  35. #endif
  36. #define OnGameModeInit NC_OnGameModeInit
  37. forward NC_OnGameModeInit();
  38. public DestroyCameraForPlayer(playerid)
  39. {
  40. if(Cam[playerid][camObjID] != INVALID_CAMERA) {
  41. DestroyPlayerObject(playerid, Cam[playerid][camObjID]);
  42. }
  43. if(Cam[playerid][camTimer] != INVALID_TIMER) { KillTimer(Cam[playerid][camTimer]), Cam[playerid][camTimer] = INVALID_TIMER; }
  44. Cam[playerid][camObjID] = INVALID_CAMERA, Cam[playerid][camObjID] = 0, Cam[playerid][camSyncSurroundings] = false, Cam[playerid][camEndPX] = 0, Cam[playerid][camEndPY] = 0, Cam[playerid][camEndPZ] = 0, Cam[playerid][camOVW] = 0, Cam[playerid][camUVW] = false;
  45. return true;
  46. }
  47. stock SetCameraPosForPlayer(playerid, Float:startx, Float:starty, Float:startz, Float:endx, Float:endy, Float:endz, Float:speed, bool:sync_surroundings=false, bool:rand_vw=false)
  48. {
  49. if(Cam[playerid][camObjID] != INVALID_CAMERA) { DestroyCameraForPlayer(playerid); }
  50. if(rand_vw) {
  51. Cam[playerid][camOVW] = GetPlayerVirtualWorld(playerid);
  52. SetPlayerVirtualWorld(playerid, random(10000));
  53. Cam[playerid][camUVW] = true;
  54. }
  55. Cam[playerid][camObjID] = CreatePlayerObject( playerid, 0, startx, starty, startz, 0, 0, 0 );
  56. Cam[playerid][camEndPX] = endx, Cam[playerid][camEndPY] = endy, Cam[playerid][camEndPZ] = endz;
  57. MovePlayerObject(playerid, Cam[playerid][camObjID], Cam[playerid][camEndPX], Cam[playerid][camEndPY], Cam[playerid][camEndPZ], speed);
  58. Cam[playerid][camTimer] = SetTimerEx("UpdatePlayerCameraPosition", 50, true, "i", playerid);
  59. if(sync_surroundings) { Cam[playerid][camSyncSurroundings] = true; }
  60. return false;
  61. }
  62. public LastCameraPos(playerid, &Float:x, &Float:y, &Float:z)
  63. {
  64. x = Cam[playerid][camLPX], y = Cam[playerid][camLPY], z = Cam[playerid][camLPZ];
  65. return true;
  66. }
  67. public UpdatePlayerCameraPosition(playerid)
  68. {
  69. if(Cam[playerid][camObjID] != INVALID_CAMERA) {
  70. new Float:x, Float:y, Float:z;
  71. GetPlayerObjectPos(playerid, Cam[playerid][camObjID], x, y, z);
  72. if(x == Cam[playerid][camEndPX] && y == Cam[playerid][camEndPY] && z == Cam[playerid][camEndPZ]) {
  73. Cam[playerid][camLPX] = x, Cam[playerid][camLPY] = y, Cam[playerid][camLPZ] = z;
  74. if(Cam[playerid][camUVW]) { SetPlayerVirtualWorld(playerid, Cam[playerid][camOVW]); }
  75. DestroyCameraForPlayer(playerid);
  76. return CallLocalFunction("OnPlayerCameraFinish","i",playerid);
  77. }
  78. else {
  79. if(Cam[playerid][camSyncSurroundings]) {
  80. SetPlayerPos(playerid, x, y, z-5.00);
  81. }
  82. SetPlayerCameraPos(playerid, x, y, z);
  83. SetPlayerCameraLookAt(playerid, Cam[playerid][camEndPX], Cam[playerid][camEndPY], Cam[playerid][camEndPZ]);
  84. }
  85. return true;
  86. }
  87. return false;
  88. }
  89.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement