home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 February / Chip_2001-02_cd1.bin / bonus / demos / CS / exp / SOURCES / DEMO / EFEKT_06.CPP < prev    next >
C/C++ Source or Header  |  2000-08-13  |  3KB  |  159 lines

  1. /*
  2.  
  3. layere - pics
  4.  
  5. return:
  6.   0 - doslo k chybe
  7.   1 - este nezacal
  8.   2 - prebehol v poriadku
  9.   3 - uz skoncil
  10. */
  11.  
  12. #include <iostream>
  13. #include "api3ds.h"
  14. #include "efekt.h"
  15. #include "efekt_06.h"
  16. #include "syncs.h"
  17.  
  18. extern int sync_id;
  19. extern BOOL usefog;
  20.  
  21. int  efekt_06::init()
  22. {
  23.   cout << "Efekt 6 init ... ";
  24.   start=TRUE;
  25.   counter=0;
  26. //->init
  27.   for (int i=0;i<l_num;i++) l_fade[i]=0.0;
  28. //<-
  29.   cout << "ok!" << endl;
  30.   return 1;
  31. }
  32.  
  33. int  efekt_06::load()
  34. {
  35.    l_num=0;
  36.    cout << "Loading efekt06 ... ";
  37. // -> load
  38.  
  39.    FILE *stream=fopen(CFGNAME06,"r");
  40.    if (stream==NULL) return 0;
  41.    BOOL loading=TRUE;
  42.    float loadin,loadout,loadins,loadouts;
  43.    char loadname[30];
  44.    while (loading)
  45.      {
  46.      fscanf(stream,"%f - %f %f %f  %s\n",&loadin,&loadout,&loadins,&loadouts,loadname);
  47.      if (loadin==-1) loading=false;
  48.        else
  49.        {
  50.        l_name[l_num]=loadname;
  51.        l_in[l_num]=loadin;
  52.        l_out[l_num]=loadout;
  53.        if (loadins<1.0/60.0) l_ins[l_num]=1.0;
  54.                         else l_ins[l_num]=1.0/(loadins*refresh);
  55.        if (loadouts<1.0/60.0) l_outs[l_num]=1.0;
  56.                          else l_outs[l_num]=1.0/(loadouts*refresh);
  57.        l_num++;
  58.        }
  59.      }
  60.  
  61.    for (int i=0;i<l_num;i++)
  62.      {
  63.      l_tex[i]=texture_library->GetOrCreate(l_name[i]);
  64.      }
  65.  
  66. // <-
  67.     cout << "ok!"<<endl;
  68.     return 1;
  69. }
  70.  
  71. int  efekt_06::free()  //vrati 3 ako ok, 0 ak doslo k chybe
  72. {
  73. end=true;
  74. // -> free
  75.  
  76. // <-
  77. return 3;
  78. }
  79.  
  80. void efekt_06::uprav(float &fade,float ins,float outs,float insp, float outsp)
  81. {
  82. float cntr=counter/refresh;
  83. if ((cntr>=ins)&&(cntr<outs))
  84.   {
  85.   if (fade<1.0) fade+=insp;
  86.               else fade=1.0;
  87.  }
  88. if (cntr>=outs)
  89.   {
  90.   if (fade>0.0) fade-=outsp;
  91.             else fade=0.0;
  92.   }
  93. ;
  94. }
  95.  
  96. int  efekt_06::update()
  97. {
  98. id=Sync[GetSyncNum(float(counter)/float(refresh))].id;
  99. // -> update
  100. for (int i=0;i<l_num;i++)
  101.   uprav(l_fade[i], l_in[i], l_out[i], l_ins[i], l_outs[i]);
  102. // <-
  103. return 1;
  104. }
  105.  
  106. void efekt_06::showtex(float color)
  107. {
  108.   glBegin(GL_QUADS);
  109.   glColor3f(color,color,color);
  110.   glTexCoord2f( 1.0, 1.0);
  111.     glVertex2f( 1.0, 1.0);
  112.   glTexCoord2f( 0.0, 1.0);
  113.     glVertex2f(-1.0, 1.0);
  114.   glTexCoord2f( 0.0, 0.0);
  115.     glVertex2f(-1.0,-1.0);
  116.   glTexCoord2f( 1.0, 0.0);
  117.     glVertex2f( 1.0,-1.0);
  118.   glEnd();
  119. }
  120.  
  121. int efekt_06::go(double t)
  122. {
  123. if (!start) if (!init()) return 0;
  124. int cur_frm=(int)(t*refresh);
  125.  
  126. if (cur_frm>counter)
  127.   while (counter<cur_frm)
  128.     {
  129.     counter++;
  130.     update();
  131.     }
  132. //tu sa kresli->
  133.  
  134. float sm=0.0;
  135. for (int i=0;i<l_num;i++) sm+=l_fade[i];
  136. if (sm>0.0)
  137.   {
  138.   glMatrixMode(GL_PROJECTION);
  139.   glLoadIdentity();
  140.   glMatrixMode(GL_MODELVIEW);
  141.   glLoadIdentity();
  142.   glEnable(GL_TEXTURE_2D);
  143.   glDisable(GL_LIGHTING);
  144.   glDisable(GL_DEPTH_TEST);
  145.   glDisable(GL_CULL_FACE);
  146.   glEnable(GL_BLEND);
  147.   glBlendFunc(GL_ONE,GL_ONE);
  148.   }
  149.   else return 2;
  150.  
  151. for (int i=0;i<l_num;i++)
  152. if (l_fade[i]>0.0)
  153.   {
  154.   (l_tex[i])->GL();
  155.   showtex(l_fade[i]);
  156.   }
  157. //<-
  158. return 2;
  159. }