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

📄 walk.h

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

#define FLYMP_MSG_POS 9180
#define FLYMP_MSG_KILL 9181
#define FLYMP_MSG_DAMAGE 9182

class person;
class jump_pad;
class birth_pad;
class gib;

struct mp_data
{
	DWORD type,dpid,flag;
	vector pos,vel,walkvel,X,Y,Z;
	float rot;
};

struct mp_data_damage
{
	DWORD type,dpid,from;
	vector pushvec;
	float value;
};

struct mp_data_kill
{
	DWORD type,dpid,dpidpoints;
	vector pos,hitpos;
	int birthpad;
};

enum 
{
	TYPE_PERSON=0x300,
	TYPE_JUMP_PAD,
	TYPE_BIRTH_PAD,
	TYPE_GIB,
};

class person : public bsp_object
{
public:
	float height,gravity,rotvel,updownrot,mousespeed;
	spot_light *spot;
	int flag,points,player;
	int jumpflag,jumpforcetime;
	float jumpforce,walkvel;
	vector jumpvec,walkvec;
	local_system ls;
	mesh *contactobj;
	int contactfacenum;
	shadow *personshadow;
	int zoomtime;
	float zoomangle1,zoomangle2;
	float shield,curshield;
	light_vertex dynlights;
	vector dynlight;
	
	anim_mesh *p_anim[3];
	anim_mesh *w_anim[3];
	int skin,cur_anim,cur_anim_time,loop_anim;
	gun *g;
	gib *gb;
	int ngib;
	float gibforce;
	birth_pad *bp;
	int zoompos;

	person()
	{
		type=TYPE_PERSON;
		contactobj=0;
		flag=0;
		player=0;
		points=0;
		cur_anim=0;
		cur_anim_time=0;
		loop_anim=1;
		bp=0;
		updownrot=0; 
		jumpflag=0;
		jumpvec.null();
		walkvec.null();
		zoompos=0;
		dynlight.null();
	}

	// virtual from bsp_object
	void init();
	int step(int dt);
	void draw();
	mesh *get_mesh() { return p_anim[cur_anim]; };
	mesh *ray_intersect(vector& ro,vector& rd,vector& ip,float& dist,int &facenum,float rad);
	int get_custom_param_desc(int i,param_desc *pd);
	int message(vector& p,float rad,int msg,int param,void *data);

	// check keys and mouse
	void do_input(int dt);
	// send mp message pos
	void mp_send_pos(int msgtype,int msgflag);
	// send mp message kill
	void mp_send_kill(int killer,int pad,vector& hitpoint);
	// send mp message damage
	void mp_send_damage(int from,vector& pushvec,float value);
	// show gibs, give points and select birth pad
	void die(int killer,vector& hitpos,int padindx);

	inline bsp_object *clone()
	{ 
		person *p=new person;
		*p=*this;
		p->source=this;
		return p;
	}
};

class jump_pad : public bsp_object
{
public:
	mesh *objmesh;
	float jumpforce;
	int forcetime,invert;

	jump_pad()
	{ type=TYPE_JUMP_PAD; };

	int get_custom_param_desc(int i,param_desc *pd);
	mesh *get_mesh() { return objmesh; };
	void init();
	int step(int dt) { return 0; };
	inline bsp_object *clone()
	{ 
		jump_pad *j=new jump_pad;
		*j=*this;
		j->source=this;
		return j;
	}
};

class birth_pad : public bsp_object
{
public:
	mesh *objmesh;
	mesh *animobj;
	int animtime;
	
	int animtime0;
	vector dynlight;

	birth_pad()
	{ type=TYPE_BIRTH_PAD; dynlight.null(); };

	void init();
	void draw();
	int message(vector& p,float rad,int msg,int param,void *data);
	int get_custom_param_desc(int i,param_desc *pd);
	int step(int dt) { return 0; };
	mesh *get_mesh() { return objmesh; };
	inline bsp_object *clone()
	{ 
		birth_pad *x=new birth_pad;
		*x=*this;
		x->source=this;
		return x;
	}
};

class gib : public bsp_object
{
public:
	mesh *objmesh;
	hitmark *hm;
	float gravity;
	int fadetime;
	int numbounces;
	int traildelay;

	vector dynlight;
	int lasttrail;


	gib()
	{ type=TYPE_GIB; dynlight.null(); lasttrail=0; };

	void draw();
	int step(int dt);
	int message(vector& p,float rad,int msg,int param,void *data);
	int get_custom_param_desc(int i,param_desc *pd);
	
	inline bsp_object *clone()
	{ 
		gib *x=new gib;
		*x=*this;
		x->source=this;
		return x;
	}
};

class person_desc : public class_desc
{
public:
	void *create() { return new person; };
	char *get_name() { return "person"; };
	int get_type() { return TYPE_PERSON; };
};

class jump_pad_desc : public class_desc
{
public:
	void *create() { return new jump_pad; };
	char *get_name() { return "jumppad"; };
	int get_type() { return TYPE_JUMP_PAD; };
};

class birth_pad_desc : public class_desc
{
public:
	void *create() { return new birth_pad; };
	char *get_name() { return "birthpad"; };
	int get_type() { return TYPE_BIRTH_PAD; };
};

class gib_desc : public class_desc
{
public:
	void *create() { return new gib; };
	char *get_name() { return "gib"; };
	int get_type() { return TYPE_GIB; };
};

⌨️ 快捷键说明

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