Advertisement
Guest User

Stewie` Fader R4

a guest
Mar 13th, 2013
1,149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <a_samp>
  2.  
  3. forward Fader_PlayerProcess(playerid);
  4. forward OnPlayerFadeIn(playerid);
  5. forward OnPlayerFadeOut(playerid);
  6. stock fadeIn(playerid, ms, color = 0x000000FF);
  7. stock fadeOut(playerid, ms, color = 0x000000FF);
  8.  
  9. static const
  10.     MAX_TRANSPARENCY = 0xFF,
  11.     TIMER_FRAME = 25;
  12.    
  13. enum {
  14.     FADE_IN = 1,
  15.     FADE_OUT
  16. }
  17.  
  18. enum E_PLAYER_FADE_INFO {
  19.     PlayerText:fadeText,
  20.     fadeCurrentAlpha,
  21.    
  22.     fadeTotalFrames,
  23.     fadeTransparencyPerFrame,
  24.     fadeColor,
  25.    
  26.     fadeTimer,
  27.     fadeType
  28. }
  29. static gPlayerFadeInfo[MAX_PLAYERS][E_PLAYER_FADE_INFO];
  30.  
  31. #define CAP_MAX(%0) ((%0 > MAX_TRANSPARENCY) ? (MAX_TRANSPARENCY) : %0)
  32. #define CAP_MIN(%0) ((%0 < 0) ? (0) : %0)
  33.  
  34. /* Natives:
  35. *   native fadeIn(playerid, ms, color = 0x000000FF);
  36. *   native fadeOut(playerid, ms, color = 0x000000FF);
  37. *
  38. *   por Stewie`
  39. */
  40.  
  41. stock fadeIn(playerid, ms, color = 0x000000FF) {
  42.     if(!IsPlayerConnected(playerid))
  43.         return 0;
  44.        
  45.     // pegar a transparência atual da textdraw
  46.     new alpha = gPlayerFadeInfo[playerid][fadeCurrentAlpha];
  47.     // no caso da textdraw tiver a transparência cheia, ou mais do que o permitido, o nosso trabalho está feito
  48.     if((MAX_TRANSPARENCY - alpha) <= 0) {
  49.         gPlayerFadeInfo[playerid][fadeCurrentAlpha] = MAX_TRANSPARENCY;
  50.         gPlayerFadeInfo[playerid][fadeType] = 0;
  51.  
  52.         PlayerTextDrawBoxColor(playerid, gPlayerFadeInfo[playerid][fadeText], (gPlayerFadeInfo[playerid][fadeColor] << 8) | alpha);
  53.         PlayerTextDrawShow(playerid, gPlayerFadeInfo[playerid][fadeText]);
  54.         return 1;
  55.     }
  56.     // configurar o tipo de fade que estamos aplicando
  57.     gPlayerFadeInfo[playerid][fadeType] = FADE_IN;
  58.    
  59.     // mover um byte para a direita para 'apagar' a transparência
  60.     // e '>>' para não voltar para o começo os primeiros bits
  61.     gPlayerFadeInfo[playerid][fadeColor] = color >> 8;
  62.  
  63.     // a quantidade de frames que o PlayerProcess irá processar
  64.     // você pode perceber que a duração é dividida pelos frames por processamento e, se existe restante, é adicinado mais um processamento
  65.     gPlayerFadeInfo[playerid][fadeTotalFrames] = ((ms / TIMER_FRAME) + _:((ms % TIMER_FRAME) > 0));
  66.     // o tanto de transparência que será adicionado por cada processamento
  67.     // no fim, deve ser checado a quantidade de transarência que a textdraw possui
  68.     // a transparência que será adicionada até o final é dividida pela quantidade de frames que serão rodados
  69.     gPlayerFadeInfo[playerid][fadeTransparencyPerFrame] =  (MAX_TRANSPARENCY - alpha) / gPlayerFadeInfo[playerid][fadeTotalFrames];
  70.    
  71.     if(gPlayerFadeInfo[playerid][fadeTransparencyPerFrame] <= 0) {
  72.         gPlayerFadeInfo[playerid][fadeTransparencyPerFrame] = 10;
  73.     }
  74.    
  75.     PlayerTextDrawBoxColor(playerid, gPlayerFadeInfo[playerid][fadeText], (gPlayerFadeInfo[playerid][fadeColor] << 8) | alpha);
  76.     PlayerTextDrawShow(playerid, gPlayerFadeInfo[playerid][fadeText]);
  77.     // se não existir o timer, criá-lo!
  78.     if(!gPlayerFadeInfo[playerid][fadeTimer]) {
  79.         gPlayerFadeInfo[playerid][fadeTimer] = SetTimerEx("Fader_PlayerProcess", TIMER_FRAME, 1, "i", playerid);
  80.     }
  81.     return 1;
  82. }
  83.  
  84. stock fadeOut(playerid, ms, color = 0x000000FF) {
  85.     if(!IsPlayerConnected(playerid))
  86.         return 0;
  87.        
  88.     // pegar a transparência atual da textdraw
  89.     new alpha = gPlayerFadeInfo[playerid][fadeCurrentAlpha];
  90.     // no caso da textdraw não tiver nenhuma transparênca, sair
  91.     if(alpha <= 0) {
  92.         gPlayerFadeInfo[playerid][fadeCurrentAlpha] = MAX_TRANSPARENCY;
  93.         gPlayerFadeInfo[playerid][fadeType] = 0;
  94.  
  95.         PlayerTextDrawBoxColor(playerid, gPlayerFadeInfo[playerid][fadeText], (gPlayerFadeInfo[playerid][fadeColor] << 8) | alpha);
  96.         PlayerTextDrawShow(playerid, gPlayerFadeInfo[playerid][fadeText]);
  97.         return 1;
  98.     }
  99.     // configurar o tipo de fade que estamos aplicando
  100.     gPlayerFadeInfo[playerid][fadeType] = FADE_OUT;
  101.    
  102.     // mover um byte para a direita para 'apagar' a transparência
  103.     // e '>>' para não voltar para o começo os primeiros bits
  104.     gPlayerFadeInfo[playerid][fadeColor] = color >> 8;
  105.  
  106.     // a quantidade de frames que o PlayerProcess irá processar
  107.     // você pode perceber que a duração é dividida pelos frames por processamento e, se existe restante, é adicinado mais um processamento
  108.     gPlayerFadeInfo[playerid][fadeTotalFrames] = ((ms / TIMER_FRAME) + _:((ms % TIMER_FRAME) > 0));
  109.     // o tanto de transparência que será subtraída por cada processamento
  110.     // no fim, deve ser checado a quantidade de transarência que a textdraw possui
  111.     // a transparência que será subtraída até o final é dividida pela quantidade de frames que serão rodados
  112.     gPlayerFadeInfo[playerid][fadeTransparencyPerFrame] =  (alpha) / gPlayerFadeInfo[playerid][fadeTotalFrames];
  113.    
  114.     if(gPlayerFadeInfo[playerid][fadeTransparencyPerFrame] <= 0) {
  115.         gPlayerFadeInfo[playerid][fadeTransparencyPerFrame] = 10;
  116.     }
  117.    
  118.     PlayerTextDrawBoxColor(playerid, gPlayerFadeInfo[playerid][fadeText], (gPlayerFadeInfo[playerid][fadeColor] << 8) | alpha);
  119.     PlayerTextDrawShow(playerid, gPlayerFadeInfo[playerid][fadeText]);
  120.     // se não existir o timer, criá-lo!
  121.     if(!gPlayerFadeInfo[playerid][fadeTimer]) {
  122.         gPlayerFadeInfo[playerid][fadeTimer] = SetTimerEx("Fader_PlayerProcess", TIMER_FRAME, 1, "i", playerid);
  123.     }
  124.     return 1;
  125. }
  126.  
  127. public Fader_PlayerProcess(playerid) {
  128.     // se o fade foi desligado para o player, mas o timer ainda está ativo
  129.     if(gPlayerFadeInfo[playerid][fadeType] == 0) {
  130.         // se o timer existe
  131.         if(gPlayerFadeInfo[playerid][fadeTimer] > 0) {
  132.             KillTimer(gPlayerFadeInfo[playerid][fadeTimer]);
  133.             gPlayerFadeInfo[playerid][fadeTimer] = 0;
  134.  
  135.             PlayerTextDrawBoxColor(playerid, gPlayerFadeInfo[playerid][fadeText], (gPlayerFadeInfo[playerid][fadeColor] << 8) | gPlayerFadeInfo[playerid][fadeCurrentAlpha]);
  136.             PlayerTextDrawShow(playerid, gPlayerFadeInfo[playerid][fadeText]);
  137.         }
  138.     }
  139.    
  140.     switch(gPlayerFadeInfo[playerid][fadeType]) {
  141.         case FADE_IN: {
  142.             gPlayerFadeInfo[playerid][fadeCurrentAlpha] += gPlayerFadeInfo[playerid][fadeTransparencyPerFrame];
  143.             gPlayerFadeInfo[playerid][fadeCurrentAlpha] = CAP_MAX(gPlayerFadeInfo[playerid][fadeCurrentAlpha]);
  144.            
  145.             PlayerTextDrawBoxColor(playerid, gPlayerFadeInfo[playerid][fadeText], (gPlayerFadeInfo[playerid][fadeColor] << 8) | gPlayerFadeInfo[playerid][fadeCurrentAlpha]);
  146.             PlayerTextDrawShow(playerid, gPlayerFadeInfo[playerid][fadeText]);
  147.            
  148.             if(gPlayerFadeInfo[playerid][fadeCurrentAlpha] == MAX_TRANSPARENCY) {
  149.                 gPlayerFadeInfo[playerid][fadeType] = 0;
  150.                 KillTimer(gPlayerFadeInfo[playerid][fadeTimer]);
  151.                 gPlayerFadeInfo[playerid][fadeTimer] = 0;
  152.  
  153.                 CallLocalFunction("OnPlayerFadeIn", "i", playerid);
  154.             }
  155.         }
  156.         case FADE_OUT: {
  157.             gPlayerFadeInfo[playerid][fadeCurrentAlpha] -= gPlayerFadeInfo[playerid][fadeTransparencyPerFrame];
  158.             gPlayerFadeInfo[playerid][fadeCurrentAlpha] = CAP_MIN(gPlayerFadeInfo[playerid][fadeCurrentAlpha]);
  159.            
  160.             PlayerTextDrawBoxColor(playerid, gPlayerFadeInfo[playerid][fadeText], (gPlayerFadeInfo[playerid][fadeColor] << 8) | gPlayerFadeInfo[playerid][fadeCurrentAlpha]);
  161.             PlayerTextDrawShow(playerid, gPlayerFadeInfo[playerid][fadeText]);
  162.            
  163.             if(gPlayerFadeInfo[playerid][fadeCurrentAlpha] == 0) {
  164.                 gPlayerFadeInfo[playerid][fadeType] = 0;
  165.                 KillTimer(gPlayerFadeInfo[playerid][fadeTimer]);
  166.                 gPlayerFadeInfo[playerid][fadeTimer] = 0;
  167.  
  168.                 CallLocalFunction("OnPlayerFadeOut", "i", playerid);
  169.             }
  170.         }
  171.     }
  172.     return 1;
  173. }
  174.  
  175. public OnPlayerConnect(playerid) {
  176.     new tmp[E_PLAYER_FADE_INFO];
  177.     gPlayerFadeInfo[playerid] = tmp;
  178.  
  179.     new PlayerText:text = CreatePlayerTextDraw(playerid, -20.0, -20.0, "_");
  180.     gPlayerFadeInfo[playerid][fadeText] = text;
  181.     // detalhes
  182.     PlayerTextDrawUseBox(playerid, text, 1);
  183.     PlayerTextDrawBoxColor(playerid, text, 0xFFFFFF00);
  184.     PlayerTextDrawLetterSize(playerid, text, 680.0, 500.0);
  185.     PlayerTextDrawTextSize(playerid, text, 680.0, 500.0);
  186.  
  187.     if (funcidx("Fader_OnPlayerConnect") != -1)
  188.     {
  189.         return CallLocalFunction("Fader_OnPlayerConnect", "i", playerid);
  190.     }  
  191.     return 1;
  192. }
  193.  
  194. public OnPlayerDisconnect(playerid,reason) {
  195.     gPlayerFadeInfo[playerid][fadeTimer] = 0;
  196.  
  197.     if (funcidx("Fader_OnPlayerDisconnect") != -1)
  198.     {
  199.         return CallLocalFunction("Fader_OnPlayerDisconnect", "ii", playerid, reason);
  200.     }  
  201.     return 1;
  202. }
  203.  
  204. #if defined _ALS_OnPlayerConnect
  205.     #undef OnPlayerConnect
  206. #else
  207.     #define _ALS_OnPlayerConnect
  208. #endif
  209. #define OnPlayerConnect Fader_OnPlayerConnect
  210. forward Fader_OnPlayerConnect(playerid);
  211.  
  212. #if defined _ALS_OnPlayerDisconnect
  213.     #undef OnPlayerDisconnect
  214. #else
  215.     #define _ALS_OnPlayerDisconnect
  216. #endif
  217. #define OnPlayerDisconnect Fader_OnPlayerDisconnect
  218. forward OnPlayerDisconnect(playerid, reason);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement