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 >
Wrap
C/C++ Source or Header
|
2000-08-13
|
3KB
|
159 lines
/*
layere - pics
return:
0 - doslo k chybe
1 - este nezacal
2 - prebehol v poriadku
3 - uz skoncil
*/
#include <iostream>
#include "api3ds.h"
#include "efekt.h"
#include "efekt_06.h"
#include "syncs.h"
extern int sync_id;
extern BOOL usefog;
int efekt_06::init()
{
cout << "Efekt 6 init ... ";
start=TRUE;
counter=0;
//->init
for (int i=0;i<l_num;i++) l_fade[i]=0.0;
//<-
cout << "ok!" << endl;
return 1;
}
int efekt_06::load()
{
l_num=0;
cout << "Loading efekt06 ... ";
// -> load
FILE *stream=fopen(CFGNAME06,"r");
if (stream==NULL) return 0;
BOOL loading=TRUE;
float loadin,loadout,loadins,loadouts;
char loadname[30];
while (loading)
{
fscanf(stream,"%f - %f %f %f %s\n",&loadin,&loadout,&loadins,&loadouts,loadname);
if (loadin==-1) loading=false;
else
{
l_name[l_num]=loadname;
l_in[l_num]=loadin;
l_out[l_num]=loadout;
if (loadins<1.0/60.0) l_ins[l_num]=1.0;
else l_ins[l_num]=1.0/(loadins*refresh);
if (loadouts<1.0/60.0) l_outs[l_num]=1.0;
else l_outs[l_num]=1.0/(loadouts*refresh);
l_num++;
}
}
for (int i=0;i<l_num;i++)
{
l_tex[i]=texture_library->GetOrCreate(l_name[i]);
}
// <-
cout << "ok!"<<endl;
return 1;
}
int efekt_06::free() //vrati 3 ako ok, 0 ak doslo k chybe
{
end=true;
// -> free
// <-
return 3;
}
void efekt_06::uprav(float &fade,float ins,float outs,float insp, float outsp)
{
float cntr=counter/refresh;
if ((cntr>=ins)&&(cntr<outs))
{
if (fade<1.0) fade+=insp;
else fade=1.0;
}
if (cntr>=outs)
{
if (fade>0.0) fade-=outsp;
else fade=0.0;
}
;
}
int efekt_06::update()
{
id=Sync[GetSyncNum(float(counter)/float(refresh))].id;
// -> update
for (int i=0;i<l_num;i++)
uprav(l_fade[i], l_in[i], l_out[i], l_ins[i], l_outs[i]);
// <-
return 1;
}
void efekt_06::showtex(float color)
{
glBegin(GL_QUADS);
glColor3f(color,color,color);
glTexCoord2f( 1.0, 1.0);
glVertex2f( 1.0, 1.0);
glTexCoord2f( 0.0, 1.0);
glVertex2f(-1.0, 1.0);
glTexCoord2f( 0.0, 0.0);
glVertex2f(-1.0,-1.0);
glTexCoord2f( 1.0, 0.0);
glVertex2f( 1.0,-1.0);
glEnd();
}
int efekt_06::go(double t)
{
if (!start) if (!init()) return 0;
int cur_frm=(int)(t*refresh);
if (cur_frm>counter)
while (counter<cur_frm)
{
counter++;
update();
}
//tu sa kresli->
float sm=0.0;
for (int i=0;i<l_num;i++) sm+=l_fade[i];
if (sm>0.0)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_TEXTURE_2D);
glDisable(GL_LIGHTING);
glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE,GL_ONE);
}
else return 2;
for (int i=0;i<l_num;i++)
if (l_fade[i]>0.0)
{
(l_tex[i])->GL();
showtex(l_fade[i]);
}
//<-
return 2;
}