📄 gun.cpp
字号:
#include "..\..\lib\Fly3D.h"
#include "weapon.h"
bsp_object *gun::clone()
{
gun *tmp=new gun;
*tmp=*this;
tmp->source=this;
return tmp;
}
int gun::get_custom_param_desc(int i,param_desc *pd)
{
if (pd!=0)
switch(i)
{
case 0:
pd->type=TYPE_GUN_PROJECTILE;
pd->data=&p;
strcpy(pd->name,"projectile");
break;
case 1:
pd->type='i';
pd->data=&firecount;
strcpy(pd->name,"firecount");
break;
case 2:
pd->type=TYPE_SOUND;
pd->data=&sndfire;
strcpy(pd->name,"firesound");
break;
case 3:
pd->type='f';
pd->data=&firevel;
strcpy(pd->name,"firevel");
break;
case 4:
pd->type='i';
pd->data=&delay;
strcpy(pd->name,"delay");
break;
case 5:
pd->type='i';
pd->data=&firedelay;
strcpy(pd->name,"firedelay");
break;
case 6:
pd->type='i';
pd->data=&nfire;
strcpy(pd->name,"nfire");
break;
case 7:
pd->type='f';
pd->data=&randomangle;
strcpy(pd->name,"randomangle");
break;
case 8:
pd->type='i';
pd->data=&nfirepos;
strcpy(pd->name,"nfirepos");
break;
case 9:
pd->type='v';
pd->data=&firepos[0];
strcpy(pd->name,"firepos0");
break;
case 10:
pd->type='v';
pd->data=&firepos[1];
strcpy(pd->name,"firepos1");
break;
case 11:
pd->type='v';
pd->data=&firepos[2];
strcpy(pd->name,"firepos2");
break;
case 12:
pd->type='v';
pd->data=&firepos[3];
strcpy(pd->name,"firepos3");
break;
}
return 13;
}
void gun::fire(bsp_object *obj,int player)
{
vector v;
for( int i=0;i<nfirepos;i++ )
{
if (randomangle)
{
v=obj->Z+obj->X*randomangle*FRAND+obj->Y*randomangle*FRAND;
v.normalize();
}
else v=obj->Z;
v.negate();
if (p)
p->fire(obj->pos+firepos[i]*obj->mat,v,firevel,player);
if (sndfire)
sndfire->add_sound_clone(&obj->pos,0);
}
}
int gun::fire_status()
{
int ret=0;
if (firecount)
{
if (curfire==0)
firetime=flyengine->cur_time;
if (curfire<nfire &&
(flyengine->cur_time-firetime)/firedelay>=curfire)
{
curfire++;
firecount--;
ret=1;
}
if (flyengine->cur_time-firetime>delay)
curfire=0;
}
return ret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -