fader.inc 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. // Emmet's simple screen fader
  2. enum e_fadeInfo {
  3. PlayerText:e_fadeBox,
  4. e_fadeActive,
  5. e_fadeInit,
  6. e_fadeExtra,
  7. e_fadeColor,
  8. e_fadeTimer,
  9. e_fadeStep
  10. };
  11. static
  12. s_FadeData[MAX_PLAYERS][e_fadeInfo];
  13. forward OnPlayerFadeComplete(playerid, extraid);
  14. stock FadeScreenForPlayer(playerid, extraid, color = 0x000000FF, speed = 25)
  15. {
  16. if (!s_FadeData[playerid][e_fadeInit])
  17. {
  18. s_FadeData[playerid][e_fadeBox] = CreatePlayerTextDraw(playerid, 0.0000, 0.0000, "_");
  19. s_FadeData[playerid][e_fadeInit] = 1;
  20. PlayerTextDrawFont(playerid, s_FadeData[playerid][e_fadeBox], 1);
  21. PlayerTextDrawLetterSize(playerid, s_FadeData[playerid][e_fadeBox], 0.500000, 50.000000);
  22. PlayerTextDrawUseBox(playerid, s_FadeData[playerid][e_fadeBox], 1);
  23. PlayerTextDrawTextSize(playerid, s_FadeData[playerid][e_fadeBox], 640.000000, 30.000000);
  24. }
  25. if (s_FadeData[playerid][e_fadeActive])
  26. {
  27. KillTimer(s_FadeData[playerid][e_fadeTimer]);
  28. }
  29. PlayerTextDrawBoxColor(playerid, s_FadeData[playerid][e_fadeBox], color & ~0xFF);
  30. PlayerTextDrawShow(playerid, s_FadeData[playerid][e_fadeBox]);
  31. s_FadeData[playerid][e_fadeActive] = 1;
  32. s_FadeData[playerid][e_fadeColor] = 0;
  33. s_FadeData[playerid][e_fadeExtra] = extraid;
  34. s_FadeData[playerid][e_fadeStep] = 0;
  35. s_FadeData[playerid][e_fadeTimer] = SetTimerEx("FadeTimer", 100, true, "ddd", playerid, color, speed);
  36. return 1;
  37. }
  38. stock StopScreenFade(playerid)
  39. {
  40. PlayerTextDrawHide(playerid, s_FadeData[playerid][e_fadeBox]);
  41. KillTimer(s_FadeData[playerid][e_fadeTimer]);
  42. s_FadeData[playerid][e_fadeActive] = 0;
  43. s_FadeData[playerid][e_fadeColor] = 0;
  44. s_FadeData[playerid][e_fadeStep] = 0;
  45. s_FadeData[playerid][e_fadeExtra] = 0;
  46. return 1;
  47. }
  48. forward FadeTimer(playerid, color, speed);
  49. public FadeTimer(playerid, color, speed)
  50. {
  51. new
  52. extraid = s_FadeData[playerid][e_fadeExtra];
  53. s_FadeData[playerid][e_fadeStep] += speed;
  54. s_FadeData[playerid][e_fadeColor] = color + s_FadeData[playerid][e_fadeStep];
  55. if (s_FadeData[playerid][e_fadeStep] >= 255)
  56. {
  57. KillTimer(s_FadeData[playerid][e_fadeTimer]);
  58. CallLocalFunction("OnPlayerFadeComplete", "ii", playerid, extraid);
  59. StopScreenFade(playerid);
  60. }
  61. else
  62. {
  63. PlayerTextDrawHide(playerid, s_FadeData[playerid][e_fadeBox]);
  64. PlayerTextDrawBoxColor(playerid, s_FadeData[playerid][e_fadeBox], s_FadeData[playerid][e_fadeColor]);
  65. PlayerTextDrawShow(playerid, s_FadeData[playerid][e_fadeBox]);
  66. }
  67. return 1;
  68. }
  69. public OnPlayerDisconnect(playerid, reason)
  70. {
  71. StopScreenFade(playerid);
  72. s_FadeData[playerid][e_fadeInit] = 0;
  73. #if defined SF_OnPlayerDisconnect
  74. return SF_OnPlayerDisconnect(playerid, reason);
  75. #else
  76. return 1;
  77. #endif
  78. }
  79. #if defined _ALS_OnPlayerDisconnect
  80. #undef OnPlayerDisconnect
  81. #else
  82. #define _ALS_OnPlayerDisconnect
  83. #endif
  84. #define OnPlayerDisconnect SF_OnPlayerDisconnect
  85. #if defined SF_OnPlayerDisconnect
  86. forward SF_OnPlayerDisconnect(playerid, reason);
  87. #endif