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

📄 cl_fx.java

📁 Jake2是一个Java 3D游戏引擎.
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
			p.alpha = 1.0f;			p.alphavel = -1.0f / (0.5f + Globals.rnd.nextFloat() * 0.3f);		}	}	/*	 * =============== CL_TeleporterParticles ===============	 */	static void TeleporterParticles(entity_state_t ent) {		int j;		cparticle_t p;		for (int i = 0; i < 8; i++) {			if (free_particles == null)				return;			p = free_particles;			free_particles = p.next;			p.next = active_particles;			active_particles = p;			p.time = Globals.cl.time;			p.color = 0xdb;			for (j = 0; j < 2; j++) {				p.org[j] = ent.origin[j] - 16 + (Lib.rand() & 31);				p.vel[j] = Lib.crand() * 14;			}			p.org[2] = ent.origin[2] - 8 + (Lib.rand() & 7);			p.vel[2] = 80 + (Lib.rand() & 7);			p.accel[0] = p.accel[1] = 0;			p.accel[2] = -PARTICLE_GRAVITY;			p.alpha = 1.0f;			p.alphavel = -0.5f;		}	}	/*	 * =============== CL_LogoutEffect	 * 	 * ===============	 */	static void LogoutEffect(float[] org, int type) {		int j;		cparticle_t p;		for (int i = 0; i < 500; i++) {			if (free_particles == null)				return;			p = free_particles;			free_particles = p.next;			p.next = active_particles;			active_particles = p;			p.time = Globals.cl.time;			if (type == Defines.MZ_LOGIN)				p.color = 0xd0 + (Lib.rand() & 7); // green			else if (type == Defines.MZ_LOGOUT)				p.color = 0x40 + (Lib.rand() & 7); // red			else				p.color = 0xe0 + (Lib.rand() & 7); // yellow			p.org[0] = org[0] - 16 + Globals.rnd.nextFloat() * 32;			p.org[1] = org[1] - 16 + Globals.rnd.nextFloat() * 32;			p.org[2] = org[2] - 24 + Globals.rnd.nextFloat() * 56;			for (j = 0; j < 3; j++)				p.vel[j] = Lib.crand() * 20;			p.accel[0] = p.accel[1] = 0;			p.accel[2] = -PARTICLE_GRAVITY;			p.alpha = 1.0f;			p.alphavel = -1.0f / (1.0f + Globals.rnd.nextFloat() * 0.3f);		}	}	/*	 * =============== CL_ItemRespawnParticles	 * 	 * ===============	 */	static void ItemRespawnParticles(float[] org) {		int j;		cparticle_t p;		for (int i = 0; i < 64; i++) {			if (free_particles == null)				return;			p = free_particles;			free_particles = p.next;			p.next = active_particles;			active_particles = p;			p.time = Globals.cl.time;			p.color = 0xd4 + (Lib.rand() & 3); // green			p.org[0] = org[0] + Lib.crand() * 8;			p.org[1] = org[1] + Lib.crand() * 8;			p.org[2] = org[2] + Lib.crand() * 8;			for (j = 0; j < 3; j++)				p.vel[j] = Lib.crand() * 8;			p.accel[0] = p.accel[1] = 0;			p.accel[2] = -PARTICLE_GRAVITY * 0.2f;			p.alpha = 1.0f;			p.alphavel = -1.0f / (1.0f + Globals.rnd.nextFloat() * 0.3f);		}	}	/*	 * =============== CL_ExplosionParticles ===============	 */	static void ExplosionParticles(float[] org) {		int j;		cparticle_t p;		for (int i = 0; i < 256; i++) {			if (free_particles == null)				return;			p = free_particles;			free_particles = p.next;			p.next = active_particles;			active_particles = p;			p.time = Globals.cl.time;			p.color = 0xe0 + (Lib.rand() & 7);			for (j = 0; j < 3; j++) {				p.org[j] = org[j] + ((Lib.rand() % 32) - 16);				p.vel[j] = (Lib.rand() % 384) - 192;			}			p.accel[0] = p.accel[1] = 0.0f;			p.accel[2] = -PARTICLE_GRAVITY;			p.alpha = 1.0f;			p.alphavel = -0.8f / (0.5f + Globals.rnd.nextFloat() * 0.3f);		}	}	static void BigTeleportParticles(float[] org) {		cparticle_t p;		float angle, dist;		for (int i = 0; i < 4096; i++) {			if (free_particles == null)				return;			p = free_particles;			free_particles = p.next;			p.next = active_particles;			active_particles = p;			p.time = Globals.cl.time;			p.color = colortable[Lib.rand() & 3];			angle = (float) (Math.PI * 2 * (Lib.rand() & 1023) / 1023.0);			dist = Lib.rand() & 31;			p.org[0] = (float) (org[0] + Math.cos(angle) * dist);			p.vel[0] = (float) (Math.cos(angle) * (70 + (Lib.rand() & 63)));			p.accel[0] = (float) (-Math.cos(angle) * 100);			p.org[1] = (float) (org[1] + Math.sin(angle) * dist);			p.vel[1] = (float) (Math.sin(angle) * (70 + (Lib.rand() & 63)));			p.accel[1] = (float) (-Math.sin(angle) * 100);			p.org[2] = org[2] + 8 + (Lib.rand() % 90);			p.vel[2] = -100 + (Lib.rand() & 31);			p.accel[2] = PARTICLE_GRAVITY * 4;			p.alpha = 1.0f;			p.alphavel = -0.3f / (0.5f + Globals.rnd.nextFloat() * 0.3f);		}	}	/*	 * =============== CL_BlasterParticles	 * 	 * Wall impact puffs ===============	 */	static void BlasterParticles(float[] org, float[] dir) {		int j;		cparticle_t p;		float d;		int count = 40;		for (int i = 0; i < count; i++) {			if (free_particles == null)				return;			p = free_particles;			free_particles = p.next;			p.next = active_particles;			active_particles = p;			p.time = Globals.cl.time;			p.color = 0xe0 + (Lib.rand() & 7);			d = Lib.rand() & 15;			for (j = 0; j < 3; j++) {				p.org[j] = org[j] + ((Lib.rand() & 7) - 4) + d * dir[j];				p.vel[j] = dir[j] * 30 + Lib.crand() * 40;			}			p.accel[0] = p.accel[1] = 0;			p.accel[2] = -PARTICLE_GRAVITY;			p.alpha = 1.0f;			p.alphavel = -1.0f / (0.5f + Globals.rnd.nextFloat() * 0.3f);		}	}	// stack variable	private static final float[] move = {0, 0, 0};	private static final float[] vec = {0, 0, 0};	/*	 * =============== CL_BlasterTrail	 * 	 * ===============	 */	static void BlasterTrail(float[] start, float[] end) {		float len;		int j;		cparticle_t p;		int dec;		Math3D.VectorCopy(start, move);		Math3D.VectorSubtract(end, start, vec);		len = Math3D.VectorNormalize(vec);		dec = 5;		Math3D.VectorScale(vec, 5, vec);		// FIXME: this is a really silly way to have a loop		while (len > 0) {			len -= dec;			if (free_particles == null)				return;			p = free_particles;			free_particles = p.next;			p.next = active_particles;			active_particles = p;			Math3D.VectorClear(p.accel);			p.time = Globals.cl.time;			p.alpha = 1.0f;			p.alphavel = -1.0f / (0.3f + Globals.rnd.nextFloat() * 0.2f);			p.color = 0xe0;			for (j = 0; j < 3; j++) {				p.org[j] = move[j] + Lib.crand();				p.vel[j] = Lib.crand() * 5;				p.accel[j] = 0;			}			Math3D.VectorAdd(move, vec, move);		}	}	// stack variable	// move, vec	/*	 * ===============	 *  CL_FlagTrail	 * ===============	 */	static void FlagTrail(float[] start, float[] end, float color) {		float len;		int j;		cparticle_t p;		int dec;		Math3D.VectorCopy(start, move);		Math3D.VectorSubtract(end, start, vec);		len = Math3D.VectorNormalize(vec);		dec = 5;		Math3D.VectorScale(vec, 5, vec);		while (len > 0) {			len -= dec;			if (free_particles == null)				return;			p = free_particles;			free_particles = p.next;			p.next = active_particles;			active_particles = p;			Math3D.VectorClear(p.accel);			p.time = Globals.cl.time;			p.alpha = 1.0f;			p.alphavel = -1.0f / (0.8f + Globals.rnd.nextFloat() * 0.2f);			p.color = color;			for (j = 0; j < 3; j++) {				p.org[j] = move[j] + Lib.crand() * 16;				p.vel[j] = Lib.crand() * 5;				p.accel[j] = 0;			}			Math3D.VectorAdd(move, vec, move);		}	}	// stack variable	// move, vec	/*	 * =============== CL_DiminishingTrail	 * 	 * ===============	 */	static void DiminishingTrail(float[] start, float[] end, centity_t old, int flags) {		cparticle_t p;		float orgscale;		float velscale;		Math3D.VectorCopy(start, move);		Math3D.VectorSubtract(end, start, vec);		float len = Math3D.VectorNormalize(vec);		float dec = 0.5f;		Math3D.VectorScale(vec, dec, vec);		if (old.trailcount > 900) {			orgscale = 4;			velscale = 15;		} else if (old.trailcount > 800) {			orgscale = 2;			velscale = 10;		} else {			orgscale = 1;			velscale = 5;		}		while (len > 0) {			len -= dec;			if (free_particles == null)				return;			// drop less particles as it flies			if ((Lib.rand() & 1023) < old.trailcount) {				p = free_particles;				free_particles = p.next;				p.next = active_particles;				active_particles = p;				Math3D.VectorClear(p.accel);				p.time = Globals.cl.time;				if ((flags & Defines.EF_GIB) != 0) {					p.alpha = 1.0f;					p.alphavel = -1.0f / (1.0f + Globals.rnd.nextFloat() * 0.4f);					p.color = 0xe8 + (Lib.rand() & 7);					for (int j = 0; j < 3; j++) {						p.org[j] = move[j] + Lib.crand() * orgscale;						p.vel[j] = Lib.crand() * velscale;						p.accel[j] = 0;					}					p.vel[2] -= PARTICLE_GRAVITY;				} else if ((flags & Defines.EF_GREENGIB) != 0) {					p.alpha = 1.0f;					p.alphavel = -1.0f / (1.0f + Globals.rnd.nextFloat() * 0.4f);					p.color = 0xdb + (Lib.rand() & 7);					for (int j = 0; j < 3; j++) {						p.org[j] = move[j] + Lib.crand() * orgscale;						p.vel[j] = Lib.crand() * velscale;						p.accel[j] = 0;					}					p.vel[2] -= PARTICLE_GRAVITY;				} else {					p.alpha = 1.0f;					p.alphavel = -1.0f / (1.0f + Globals.rnd.nextFloat() * 0.2f);					p.color = 4 + (Lib.rand() & 7);					for (int j = 0; j < 3; j++) {						p.org[j] = move[j] + Lib.crand() * orgscale;						p.vel[j] = Lib.crand() * velscale;					}					p.accel[2] = 20;				}			}			old.trailcount -= 5;			if (old.trailcount < 100)				old.trailcount = 100;			Math3D.VectorAdd(move, vec, move);		}	}	// stack variable	// move, vec	/*	 * =============== CL_RocketTrail	 * 	 * ===============	 */	static void RocketTrail(float[] start, float[] end, centity_t old) {		float len;		int j;		cparticle_t p;		float dec;		// smoke		DiminishingTrail(start, end, old, Defines.EF_ROCKET);		// fire		Math3D.VectorCopy(start, move);		Math3D.VectorSubtract(end, start, vec);		len = Math3D.VectorNormalize(vec);		dec = 1;		Math3D.VectorScale(vec, dec, vec);		while (len > 0) {			len -= dec;			if (free_particles == null)				return;			if ((Lib.rand() & 7) == 0) {				p = free_particles;				free_particles = p.next;				p.next = active_particles;				active_particles = p;				Math3D.VectorClear(p.accel);				p.time = Globals.cl.time;				p.alpha = 1.0f;				p.alphavel = -1.0f / (1.0f + Globals.rnd.nextFloat() * 0.2f);				p.color = 0xdc + (Lib.rand() & 3);				for (j = 0; j < 3; j++) {					p.org[j] = move[j] + Lib.crand() * 5;					p.vel[j] = Lib.crand() * 20;				}				p.accel[2] = -PARTICLE_GRAVITY;			}			Math3D.VectorAdd(move, vec, move);		}	}	// stack variable	// move, vec	/*	 * =============== CL_RailTrail	 * 	 * ===============	 */	static void RailTrail(float[] start, float[] end) {		float len;		int j;		cparticle_t p;		float dec;		float[] right = new float[3];		float[] up = new float[3];		int i;		float d, c, s;		float[] dir = new float[3];		byte clr = 0x74;		Math3D.VectorCopy(start, move);		Math3D.VectorSubtract(end, start, vec);		len = Math3D.VectorNormalize(vec);		Math3D.MakeNormalVectors(vec, right, up);		for (i = 0; i < len; i++) {			if (free_particles == null)				return;			p = free_particles;			free_particles = p.next;			p.next = active_particles;			active_particles = p;			p.time = Globals.cl.time;			Math3D.VectorClear(p.accel);			d = i * 0.1f;			c = (float) Math.cos(d);			s = (float) Math.sin(d);			Math3D.VectorScale(right, c, dir);			Math3D.VectorMA(dir, s, up, dir);			p.alpha = 1.0f;			p.alphavel = -1.0f / (1.0f + Globals.rnd.nextFloat() * 0.2f);			p.color = clr + (Lib.rand() & 7);			for (j = 0; j < 3; j++) {				p.org[j] = move[j] + dir[j] * 3;				p.vel[j] = dir[j] * 6;			}			Math3D.VectorAdd(move, vec, move);		}		dec = 0.75f;		Math3D.VectorScale(vec, dec, vec);		Math3D.VectorCopy(start, move);		while (len > 0) {			len -= dec;			if (free_particles == null)				return;			p = free_particles;			free_particles = p.next;			p.next = active_particles;			active_particles = p;			p.time = Globals.cl.time;			Math3D.VectorClear(p.accel);			p.alpha = 1.0f;			p.alphavel = -1.0f / (0.6f + Globals.rnd.nextFloat() * 0.2f);			p.color = 0x0 + Lib.rand() & 15;			for (j = 0; j < 3; j++) {				p.org[j] = move[j] + Lib.crand() * 3;				p.vel[j] = Lib.crand() * 3;				p.accel[j] = 0;			}			Math3D.VectorAdd(move, vec, move);		}	}	// stack variable	// move, vec	/*	 * =============== CL_IonripperTrail ===============	 */	static void IonripperTrail(float[] start, float[] ent) {		float len;		int j;

⌨️ 快捷键说明

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