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

📄 weapon.h

📁 是3D游戏一书中所讲的游戏引擎fly3D 包括fly3D引擎的源码及应用此引擎开发出来的游戏实例 有fly3D引擎的教程,易于step by step跟学
💻 H
字号:
#include "..\gamelib\gamelib.h"

enum classes_types
{
	TYPE_GUN=0x170,
	TYPE_HITMARK,
	TYPE_LASER,
	TYPE_MISSILE,
	TYPE_MINE,
};

#define TYPE_GUN_PROJECTILE (TYPE_LASER|(TYPE_MINE<<16))

class hitmark : public bsp_object
{
public:
	hitmark() { type=TYPE_HITMARK; dynlight.null(); };

	int texture;
	float size;
	int fadetime;
	int mode;

	vector dynlight;

	int step(int dt);
	void draw();
	int get_custom_param_desc(int i,param_desc *pd);
	bsp_object *clone();
	int message(vector& p,float rad,int msg,int param,void *data);
};

class gun_projectile : public bsp_object
{
public:
	int player;
	float damage;

	virtual void fire(vector& p,vector& dir,float v,int playerid)=0;
};

class gun : public bsp_object
{
public:
	gun() { type=TYPE_GUN; firetime=0; curfire=0; };

	dyn_sound *sndfire;
	gun_projectile *p;
	int firecount,nfirepos,firetime,
		delay,nfire,curfire,firedelay;
	float firevel,randomangle;
	vector firepos[4];

	virtual void fire(bsp_object *obj,int player);
	virtual int fire_status();
	int get_custom_param_desc(int i,param_desc *pd);
	bsp_object *clone();
};

class mine : public gun_projectile
{
public:
	mine() { type=TYPE_MINE; mine_find=0; dynlight.null(); };

	mesh *objmesh;
	explode *exp; 
	light *l;
	dyn_sound *snd;
	exp_sphere *s;
	int delay;
	float shield;
	float factor;
	vector dynlight;

	bsp_object *enemy;
	float enemydist,lookrange;
	void (* mine_find)(void *data, bsp_object *e);

	virtual void fire(vector& p,vector& dir,float v,int playerid);
	mesh *ray_intersect(vector& ro,vector& rd,vector& ip,float& dist,int &facenum,float rad=0.0f);
	int message(vector& p,float rad,int msg,int param,void *data);

	int step(int dt);
	void draw();
	int get_custom_param_desc(int i,param_desc *pd);
	bsp_object *clone();
};

class laser : public gun_projectile
{
public:
	laser() { type=TYPE_LASER; slast=0; };

	float sizetexture;
	int sidetexture,fronttexture;
	vector startpos;
	hitmark *hm;

	light *l;
	explode *exp; 
	sprite_light *s;
	float sfact,slast;

	virtual void fire(vector& p,vector& dir,float v,int playerid);

	int step(int dt);
	void draw();
	int get_custom_param_desc(int i,param_desc *pd);
	bsp_object *clone();
};

class missile : public gun_projectile
{
public:
	missile() { type=TYPE_MISSILE; missile_find=0; dynlight.null(); };

	mesh *objmesh;
	explode *exp; 
	dyn_sound *snd;
	viewport *viewport;
	float lightzpos;
	light *l;
	hitmark *hm;
	vector dynlight;
	bsp_object *enemy;
	float enemydist,rotvel,lookrange,lookangle;

	virtual void fire(vector& p,vector& dir,float v,int playerid);
	void (* missile_find)(void *data, bsp_object *e);

	int step(int dt);
	void draw();
	int get_custom_param_desc(int i,param_desc *pd);
	int message(vector& p,float rad,int msg,int param,void *data);
	bsp_object *clone();
};

class gun_desc : public class_desc
{
public:
	void *create() { return new gun; };
	char *get_name() { return "gun"; };
	int get_type() { return TYPE_GUN; };
};
class hitmark_desc : public class_desc
{
public:
	void *create() { return new hitmark; };
	char *get_name() { return "hitmark"; };
	int get_type() { return TYPE_HITMARK; };
};
class mine_desc : public class_desc
{
public:
	void *create() { return new mine; };
	char *get_name() { return "mine"; };
	int get_type() { return TYPE_MINE; };
};
class laser_desc : public class_desc
{
public:
	void *create() { return new laser; };
	char *get_name() { return "laser"; };
	int get_type() { return TYPE_LASER; };
};
class missile_desc : public class_desc
{
public:
	void *create() { return new missile; };
	char *get_name() { return "missile"; };
	int get_type() { return TYPE_MISSILE; };
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -