📄 sprite_light.cpp
字号:
#include "../../lib/Fly3D.h"
#include "lights.h"
int sprite_light::step(int dt)
{
if (mode&2)
{
life-=dt;
if (directx->mpmode!=FLYMP_SERVER)
{
size+=dt*grow;
if (mode&4)
if (life<=0)
color.w=0;
else color.w=(float)life/source->life;
}
}
return 0;
}
int sprite_light::get_custom_param_desc(int i,param_desc *pd)
{
if (pd!=0)
switch(i)
{
case 0:
pd->type='p';
pd->data=&texture;
strcpy(pd->name,"texture");
break;
case 1:
pd->type='f';
pd->data=&size;
strcpy(pd->name,"size");
break;
case 2:
pd->type='c';
pd->data=&color;
strcpy(pd->name,"color");
break;
case 3:
pd->type='f';
pd->data=&grow;
strcpy(pd->name,"grow");
break;
case 4:
pd->type='f';
pd->data=&color.w;
strcpy(pd->name,"transp");
break;
case 5:
pd->type='i';
pd->data=&mode;
strcpy(pd->name,"mode");
break;
}
return 6;
}
void sprite_light::draw()
{
static vector x,y,v;
if (mode&1)
{
x=X*size;
y=Y*size;
}
else
{
x=flyengine->cam->X*size;
y=flyengine->cam->Y*size;
}
glDisable(GL_CULL_FACE);
glBlendFunc(GL_ONE,GL_ONE);
glDepthMask(GL_FALSE);
glDisable(GL_FOG);
glColor3f(color.x*color.w,color.y*color.w,color.z*color.w);
tc->use(texture);
glBegin(GL_QUADS);
glTexCoord2f(1,0);
glVertex3f(pos.x+x.x-y.x, pos.y+x.y-y.y, pos.z+x.z-y.z);
glTexCoord2f(1,1);
glVertex3f(pos.x+x.x+y.x, pos.y+x.y+y.y, pos.z+x.z+y.z);
glTexCoord2f(0,1);
glVertex3f(pos.x+y.x-x.x, pos.y+y.y-x.y, pos.z+y.z-x.z);
glTexCoord2f(0,0);
glVertex3f(pos.x-x.x-y.x, pos.y+-x.y-y.y, pos.z-x.z-y.z);
glEnd();
glEnable(GL_CULL_FACE);
glDepthMask(GL_TRUE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
if (flyengine->fog) glEnable(GL_FOG);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -