home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Inne / Gry / Atomic_Tanks / Atomic-Tanks-5.1.exe / src / fade.cpp < prev    next >
C/C++ Source or Header  |  2009-09-07  |  8KB  |  236 lines

  1. /*
  2.  * atanks - obliterate each other with oversize weapons
  3.  * Copyright (C) 2003  Thomas Hudson
  4.  *
  5.  * This program is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU General Public License
  7.  * as published by the Free Software Foundation; either version 2
  8.  * of the License, or (at your option) any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  * */
  19.  
  20. /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  21. fade.cc
  22.  
  23. Provides graphical transitions via change and quickChange, as prototyped in
  24. main.h
  25. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
  26.  
  27. /*
  28. TODO
  29.  + Add more faders
  30.  + Improve/complete documentation
  31. */
  32.  
  33.  
  34.  
  35. #include "globaldata.h"
  36. #include "main.h"
  37.  
  38.  
  39.  
  40. /*****************************************************************************
  41. Internal fades
  42.  
  43. The following section of code defines the internal fade routines.  These
  44. routines are used by the change function to perform transitions.  To add a
  45. new fader, simply implement a function as seen below and then add it to
  46. change's function pointer array.
  47. *****************************************************************************/
  48. /*
  49. static void spiralPixelFade (GLOBALDATA *global, BITMAP *target)
  50. {
  51.   int blockSize = 8;
  52.   int spiralSize = 20;
  53.   int length = spiralSize, x = 0, y = 0;
  54.   int stepSize = (spiralSize + 1) * blockSize;
  55.   int x2, y2;
  56.   int count;
  57.  
  58.   for (count = 0, y = stepSize - blockSize; count < length; count++, y -= blockSize)
  59.     for (x2 = 0; x2 <= global->screenWidth; x2 += stepSize)
  60.       for (y2 = 0; y2 <= global->screenHeight; y2 += stepSize)
  61.         blit (target, screen, x2+x, y2+y, x2+x, y2+y, blockSize, blockSize);
  62.   while (length)
  63.     {
  64.       for (count = 0; count < length; count++, x += blockSize)
  65.         for (x2 = 0; x2 <= global->screenWidth; x2 += stepSize)
  66.           for (y2 = 0; y2 <= global->screenHeight; y2 += stepSize)
  67.             blit (target, screen, x2+x, y2+y, x2+x, y2+y, blockSize, blockSize);
  68.       for (count = 0; count < length; count++, y += blockSize)
  69.         for (x2 = 0; x2 <= global->screenWidth; x2 += stepSize)
  70.           for (y2 = 0; y2 <= global->screenHeight; y2 += stepSize)
  71.             blit (target, screen, x2+x, y2+y, x2+x, y2+y, blockSize, blockSize);
  72.       length--;
  73.       for (count = 0; count < length; count++, x -= blockSize)
  74.         for (x2 = 0; x2 <= global->screenWidth; x2 += stepSize)
  75.           for (y2 = 0; y2 <= global->screenHeight; y2 += stepSize)
  76.             blit (target, screen, x2+x, y2+y, x2+x, y2+y, blockSize, blockSize);
  77.       for (count = 0; count < length; count++, y -= blockSize)
  78.         for (x2 = 0; x2 <= global->screenWidth; x2 += stepSize)
  79.           for (y2 = 0; y2 <= global->screenHeight; y2 += stepSize)
  80.             blit (target, screen, x2+x, y2+y, x2+x, y2+y, blockSize, blockSize);
  81.       length--;
  82.     }
  83.   for (x2 = 0; x2 <= global->screenWidth; x2 += stepSize)
  84.     for (y2 = 0; y2 <= global->screenHeight; y2 += stepSize)
  85.       blit (target, screen, x2+x, y2+y, x2+x, y2+y, blockSize, blockSize);
  86. }
  87.  
  88. static void topDownMultiWipeFade (GLOBALDATA *global, BITMAP *target)
  89. {
  90.   int z, zz ;
  91.  
  92.   for (zz = 0; zz < 8; zz++)
  93.     {
  94.       int lineCount = 0;
  95.       for (z = zz; z < global->screenHeight; z += 8)
  96.         {
  97.           blit (target, screen, 0, z, 0, z, global->screenWidth, 1);
  98.           if (lineCount == 10)
  99.             {
  100.               lineCount = 0;
  101.               rest (1);
  102.             }
  103.           lineCount++;
  104.         }
  105.     }
  106. }
  107.  
  108. static void topDownWipeFade (GLOBALDATA *global, BITMAP *target)
  109. {
  110.   int z;
  111.  
  112.   for (z = 0; z <= global->screenHeight / 8; z++)
  113.     {
  114.       blit (target, screen, 0, z * 8, 0, z * 8, global->screenWidth, 8);
  115.       rest (1);
  116.     }
  117. }
  118.  
  119. static void bottomUpWipeFade (GLOBALDATA *global, BITMAP *target)
  120. {
  121.   int z;
  122.  
  123.   for (z = global->screenHeight / 8; z >= 0; z--)
  124.     {
  125.       blit (target, screen, 0, z * 8, 0, z * 8, global->screenWidth, 8);
  126.       rest (1);
  127.     }
  128. }
  129.  
  130. static void rightLeftWipeFade (GLOBALDATA *global, BITMAP *target)
  131. {
  132.   int z;
  133.  
  134.   for (z = global->screenWidth / 8; z >= 0; z--)
  135.     {
  136.       blit (target, screen, z * 8, 0, z * 8, 0, 8, global->screenHeight);
  137.       rest (1);
  138.     }
  139. }
  140.  
  141. static void leftRightWipeFade (GLOBALDATA *global, BITMAP *target)
  142. {
  143.   int z;
  144.  
  145.   for (z = 0; z <= global->screenWidth / 8; z++)
  146.     {
  147.       blit (target, screen, z * 8, 0, z * 8, 0, 8, global->screenHeight);
  148.       rest (1);
  149.     }
  150. }
  151.  
  152. static void crossLinesFade (GLOBALDATA *global, BITMAP *target)
  153. {
  154.   int z;
  155.  
  156.   for (z = 0; z < (global->screenWidth/4+4) / 4; z++)
  157.     {
  158.       blit (target, screen, z * 8, 0, z * 8, 0, 4, global->screenHeight);
  159.       blit (target, screen, (global->screenWidth-1) - (z * 8), 0, (global->screenWidth-1) - (z * 8), 0, 4, global->screenHeight);
  160.       blit (target, screen, 0, (z * 6), 0, (z * 6), global->screenWidth, 4);
  161.       blit (target, screen, 0, (global->screenHeight - (z * 6)), 0, (global->screenHeight - (z * 6)), global->screenWidth, 4);
  162.       rest (1);
  163.     }
  164.   for (z = (global->screenWidth/4+4) / 4; z != 0; z--)
  165.     {
  166.       blit (target, screen, z * 8 + 4, 0, z * 8 + 4, 0, 4, global->screenHeight);
  167.       blit (target, screen, (global->screenWidth-1) - (z * 8) + 4, 0, (global->screenWidth-1) - (z * 8) + 4, 0, 4, global->screenHeight);
  168.       blit (target, screen, 0, (z * 6) + 4, 0, (z * 6) + 4, global->screenWidth, 4);
  169.       blit (target, screen, 0, (global->screenHeight - (z * 6)) + 4, 0, (global->screenHeight - (z * 6)) + 4, global->screenWidth, 4);
  170.       rest (1);
  171.     }
  172. }
  173.  
  174. */
  175.  
  176. /*****************************************************************************
  177. changeHandleError
  178.  
  179. Used internally by change and quickChange.  Prints out error messages.
  180. *****************************************************************************/
  181. static void changeHandleError (GLOBALDATA *global, BITMAP *target)
  182. {
  183.   if (! global->os_mouse) show_mouse (NULL);
  184.   if (errorMessage)
  185.     {
  186.       textout_ex (target, font, errorMessage, errorX, errorY, makecol (255, 0, 0), -1);
  187.       errorMessage = NULL;
  188.     }
  189. }
  190.  
  191.  
  192. /*****************************************************************************
  193. change
  194.  
  195. Selects and executes a random transition.
  196. *****************************************************************************/
  197. /*
  198. void change(GLOBALDATA *global, BITMAP *target)
  199. {
  200.   static void (* const procs[])(GLOBALDATA*,BITMAP*) =
  201.   {
  202.     crossLinesFade,            spiralPixelFade,
  203.     leftRightWipeFade,        rightLeftWipeFade,
  204.     bottomUpWipeFade,        topDownWipeFade,
  205.     topDownMultiWipeFade,
  206.   } ;
  207.   static const int cprocs = sizeof( procs ) / sizeof( procs[0] );
  208.  
  209.   if (! global->os_mouse) show_mouse (NULL);
  210.   changeHandleError (global, target);
  211.  
  212.   (procs[rand() % cprocs]) (global, target);
  213.  
  214.   clear_keybuf ();
  215. }
  216. */
  217.  
  218. void change(GLOBALDATA *global, BITMAP *target)
  219. {
  220.     quickChange(global, target);
  221. }
  222.  
  223. /*****************************************************************************
  224. quickChange
  225.  
  226. Executes a fast and simple transition.
  227.  
  228. *****************************************************************************/
  229. void quickChange (GLOBALDATA *global, BITMAP *target)
  230. {
  231.   changeHandleError (global, target);
  232.   blit (target, screen, 0, 0, 0, 0, global->screenWidth, global->screenHeight);
  233.   rest (1);
  234. }
  235.  
  236.