home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ool.zip / OOL / samples / sample13 / sample13.cpp < prev    next >
C/C++ Source or Header  |  1997-04-03  |  5KB  |  161 lines

  1. /*
  2.  * Fire - a sample program for the XGame library
  3.  * Copyright (C) 1997 by Thomas Bonk (thomas@ghecko.saar.de).
  4.  * All rights reserved.
  5.  * Fire.cpp - main module (class definitions)
  6.  */
  7.  
  8. #include "sample13.h"
  9. #include XMessageBox_i
  10.  
  11.  
  12. void FlameThread::PrepPal( void )
  13. {
  14.         ULONG    data[256];
  15.         int i;
  16.  
  17.  
  18.         pPal = new XPalette();
  19.  
  20.         // initialize palette for the fire
  21.         memset( data, 0, sizeof( data ) );      // everything black
  22.         for( i = 0; i <= 7; i++ )
  23.         {
  24.                 data[11 + i] = i * 9;           // col 10-17: ascending blue
  25.                 data[19 + i] = 63 - i * 9;      // col 18-25: descending blue
  26.         } // for
  27.         for( i = 8; i <= 31; i++ )
  28.                 data[11 + i] |= (((i - 8) * 255 / 23) << 16);   // col 8-31: ascending red
  29.         for( i = 32; i <= 55; i++ )             // col 32-55: ascending green, red constant
  30.         {
  31.                 data[11 + i] |= 255 << 16;
  32.                 data[11 + i] |= (((i - 32) * 255 / 23) << 8);
  33.         } // for
  34.         for( i = 56; i <= 79; i++ )             // col 56-79: ascending blue, red and green constant
  35.         {
  36.                 data[11 + i] |= ((255 << 16) | (255 << 8));
  37.                 data[11 + i] |= ((i - 56) * 255 / 23);
  38.         } // for
  39.         for( i = 80; i <= 245; i++ )
  40.                 data[11 + i] = (255 << 16) | (255 << 8) | 255;
  41.  
  42.         pPal->SetColors( data, 10, 236 );
  43.         pBlitter->SetPalette( pPal );
  44. } // FlameThread::PrepPal
  45.  
  46. void FlameThread::ScrollUp( void )
  47. {
  48.         int   x, y;
  49.         PBYTE pbuf = &pBuffer[31360];
  50.  
  51.         memmove( &pBuffer[31360], &pBuffer[31680], 32000 );
  52.         for( y = 98; y < 199; y++ )
  53.                 for( x = 0; x < 320; x++, pbuf++ )
  54.                 {
  55.                         if( 0 == x )
  56.                                 *pbuf = (*pbuf         + *(pbuf - 320) + *(pbuf - 319) +
  57.                                          *(pbuf + 1)   + *(pbuf + 321) + *(pbuf + 320)  ) / 6;
  58.                         else if( 319 == x )
  59.                                 *pbuf = (*pbuf         + *(pbuf - 320) + *(pbuf + 320) +
  60.                                          *(pbuf - 1)   + *(pbuf - 321) + *(pbuf - 319)  ) / 6;
  61.                         else
  62.                                 *pbuf = (*pbuf         + *(pbuf - 320) + *(pbuf - 319) +
  63.                                          *(pbuf + 1)   + *(pbuf + 321) + *(pbuf + 320) +
  64.                                          *(pbuf - 1)   + *(pbuf - 321) + *(pbuf - 319)  ) / 9;
  65.                         if( *pbuf > 10 )
  66.                                 (*pbuf)--;
  67.                         else
  68.                                 *pbuf = 10;
  69.                 } // for
  70. } // FlameThread::ScrollUp
  71.  
  72. void FlameThread::NewLine( void )
  73. {
  74.         int   x, y;
  75.         PBYTE pbuf = &pBuffer[63040];
  76.  
  77.         for( y = 197; y < 200; y++ )
  78.                 for( x = 0; x < 320; x++, pbuf++ )
  79.                 {
  80.                         BYTE c;
  81.  
  82.                         do
  83.                         {
  84.                                 c = rand();
  85.                         } while( (c < 75) || (c > 90) );
  86.                         *pbuf = c;
  87.                 } // for
  88.  
  89.         for( y = 0; y < rand() % 45; y++ )
  90.         {
  91.                 x = rand() % 320;
  92.                 pbuf = &pBuffer[x + 63040];
  93.  
  94.                 *pbuf           = 255;
  95.                 *(pbuf + 320)   = 255;
  96.                 *(pbuf + 640)   = 255;
  97.                 *(pbuf + 1)     = 255;
  98.                 *(pbuf + 321)   = 255;
  99.                 *(pbuf + 641)   = 255;
  100.                 *(pbuf - 1)     = 255;
  101.                 *(pbuf - 321)   = 255;
  102.                 *(pbuf - 641)   = 255;
  103.         } // for 
  104. } // FlameThread::NewLine
  105.  
  106. void FlameThread::Init( void )
  107. {
  108.         PrepPal();
  109.         pBuffer = pBlitter->GetVirtualScreen()->GetBuffer();
  110.         srand( 42 );
  111.  
  112.         while( TRUE )
  113.         {
  114.                 ScrollUp();
  115.                 NewLine();
  116.                 pBlitter->Blit();
  117.                 DosSleep( 0 );
  118.         } // while
  119. } // FlameThread::Init
  120.  
  121.  
  122. FlameApp::FlameApp( void ) : XApplication()
  123. {
  124.         // initialize virt. screen and blitter
  125.         pScreen  = new XVirtualScreen( 320, 200 );
  126.         pBlitter = new XBlitter();
  127.         pBlitter->AssociateVirtualScreen( pScreen );
  128.  
  129.         // initialize window
  130.         XResource        xres( 100, GetResourceLibrary() );
  131.         XRect            xrect( 100, 100, 320, 230 );
  132.         pWindow = new FlameWindow( &xres,
  133.                                    "Flame demo",
  134.                                    pBlitter,
  135.                                    BLT_NODIRTYRECT,
  136.                                    XFrameWindow::defaultStyle,
  137.                                    &xrect                      );
  138.  
  139.         pThread = new FlameThread( pBlitter );
  140.         pThread->Run();
  141. } // FlameApp::FlameApp
  142.  
  143. FlameApp::~FlameApp() //virtual raus, svb
  144. {
  145.         pThread->Terminate();
  146.         delete pThread;
  147.         pBlitter->DisassociateVirtualScreen();
  148.         delete pBlitter;
  149.         delete pScreen;
  150.         delete pWindow;
  151. } // FlameApp::~FlameApp
  152.  
  153.  
  154. void main( void )
  155. {
  156.         FlameApp* pApp = new FlameApp();
  157.         pApp->Start();
  158.         delete pApp;
  159. }
  160.  
  161.