⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gun.cpp

📁 是3D游戏一书中所讲的游戏引擎fly3D 包括fly3D引擎的源码及应用此引擎开发出来的游戏实例 有fly3D引擎的教程,易于step by step跟学
💻 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 + -