about summary refs log tree commit diff
path: root/src/game/client/gc_effects.cpp
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2008-01-29 21:39:41 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2008-01-29 21:39:41 +0000
commit7bc733dc10f3d01985021b7b5d6ae140dd5af6f1 (patch)
treec9b0fcd8d128ec9abd40c10dfe4fcf245650a870 /src/game/client/gc_effects.cpp
parent0dab7db963e2706182ea120c98f746f5e265c14c (diff)
downloadzcatch-7bc733dc10f3d01985021b7b5d6ae140dd5af6f1.tar.gz
zcatch-7bc733dc10f3d01985021b7b5d6ae140dd5af6f1.zip
large update. cleaned up some code. added new effects for almost everything
Diffstat (limited to 'src/game/client/gc_effects.cpp')
-rw-r--r--src/game/client/gc_effects.cpp162
1 files changed, 162 insertions, 0 deletions
diff --git a/src/game/client/gc_effects.cpp b/src/game/client/gc_effects.cpp
new file mode 100644
index 00000000..6394075e
--- /dev/null
+++ b/src/game/client/gc_effects.cpp
@@ -0,0 +1,162 @@
+#include <engine/e_client_interface.h>
+#include "gc_client.h"
+#include "../generated/gc_data.h"
+
+static bool add_trail = false;
+
+void effect_air_jump(vec2 pos)
+{
+	particle p;
+	p.set_default();
+	p.spr = SPRITE_PART_AIRJUMP;
+	p.pos = pos + vec2(-6.0f, 16.0f);
+	p.vel = vec2(0, -200);
+	p.life_span = 0.5f;
+	p.start_size = 48.0f;
+	p.end_size = 0;
+	p.rot = frandom()*pi*2;
+	p.rotspeed = pi*2;
+	p.gravity = 500;
+	p.friction = 0.7f;
+	p.flow_affected = 0.0f;
+	particle_add(PARTGROUP_GENERAL, &p);
+
+	p.pos = pos + vec2(6.0f, 16.0f);
+	particle_add(PARTGROUP_GENERAL, &p);
+}
+
+void effect_smoketrail(vec2 pos, vec2 vel)
+{
+	if(!add_trail)
+		return;
+		
+	particle p;
+	p.set_default();
+	p.spr = SPRITE_PART_SMOKE;
+	p.pos = pos;
+	p.vel = vel + random_dir()*50.0f;
+	p.life_span = 0.5f + frandom()*0.5f;
+	p.start_size = 12.0f + frandom()*8;
+	p.end_size = 0;
+	p.friction = 0.7;
+	p.gravity = frandom()*-500.0f;
+	particle_add(PARTGROUP_PROJECTILE_TRAIL, &p);
+}
+
+
+void effect_bullettrail(vec2 pos)
+{
+	if(!add_trail)
+		return;
+		
+	particle p;
+	p.set_default();
+	p.spr = SPRITE_PART_BALL;
+	p.pos = pos;
+	p.life_span = 0.25f + frandom()*0.25f;
+	p.start_size = 8.0f;
+	p.end_size = 0;
+	p.friction = 0.7;
+	particle_add(PARTGROUP_PROJECTILE_TRAIL, &p);
+}
+
+void effect_playerspawn(vec2 pos)
+{
+	for(int i = 0; i < 32; i++)
+	{
+		particle p;
+		p.set_default();
+		p.spr = SPRITE_PART_SHELL;
+		p.pos = pos;
+		p.vel = random_dir() * (pow(frandom(), 3)*600.0f);
+		p.life_span = 0.3f + frandom()*0.3f;
+		p.start_size = 64.0f + frandom()*32;
+		p.end_size = 0;
+		p.rot = frandom()*pi*2;
+		p.rotspeed = frandom();
+		p.gravity = frandom()*-400.0f;
+		p.friction = 0.7f;
+		p.color = vec4(0xb5/255.0f, 0x50/255.0f, 0xcb/255.0f, 1.0f);
+		particle_add(PARTGROUP_GENERAL, &p);
+		
+	}
+}
+
+void effect_playerdeath(vec2 pos)
+{
+	for(int i = 0; i < 64; i++)
+	{
+		particle p;
+		p.set_default();
+		p.spr = SPRITE_PART_SPLAT01 + (rand()%3);
+		p.pos = pos;
+		p.vel = random_dir() * ((frandom()+0.1f)*900.0f);
+		p.life_span = 0.3f + frandom()*0.3f;
+		p.start_size = 24.0f + frandom()*16;
+		p.end_size = 0;
+		p.rot = frandom()*pi*2;
+		p.rotspeed = (frandom()-0.5f) * pi;
+		p.gravity = 800.0f;
+		p.friction = 0.8f;
+		p.color = mix(vec4(0.75f,0.2f,0.2f,0.75f), vec4(0.5f,0.1f,0.1f,0.75f), frandom());
+		particle_add(PARTGROUP_GENERAL, &p);
+		
+	}
+}
+
+
+void effect_explosion(vec2 pos)
+{
+	// add to flow
+	for(int y = -8; y <= 8; y++)
+		for(int x = -8; x <= 8; x++)
+		{
+			if(x == 0 && y == 0)
+				continue;
+			
+			float a = 1 - (length(vec2(x,y)) / length(vec2(8,8)));
+			flow_add(pos+vec2(x,y)*16, normalize(vec2(x,y))*5000.0f*a, 10.0f);
+		}
+		
+	// add the explosion
+	particle p;
+	p.set_default();
+	p.spr = SPRITE_PART_EXPL01;
+	p.pos = pos;
+	p.life_span = 0.4f;
+	p.start_size = 150.0f;
+	p.end_size = 0;
+	p.rot = frandom()*pi*2;
+	particle_add(PARTGROUP_EXPLOSIONS, &p);
+	
+	// add the smoke
+	for(int i = 0; i < 24; i++)
+	{
+		particle p;
+		p.set_default();
+		p.spr = SPRITE_PART_SMOKE;
+		p.pos = pos;
+		p.vel = random_dir() * ((1.0f + frandom()*0.2f) * 1000.0f);
+		p.life_span = 0.5f + frandom()*0.4f;
+		p.start_size = 32.0f + frandom()*8;
+		p.end_size = 0;
+		p.gravity = frandom()*-800.0f;
+		p.friction = 0.4f;
+		p.color = mix(vec4(0.75f,0.75f,0.75f,1.0f), vec4(0.5f,0.5f,0.5f,1.0f), frandom());
+		particle_add(PARTGROUP_GENERAL, &p);
+	}
+}
+
+void effects_update()
+{
+	static float last_update = 0;
+	if(client_localtime()-last_update > 0.02f)
+	{
+		add_trail = true;
+		last_update = client_localtime();
+		flow_update();
+	}
+	else
+		add_trail = false;
+		
+}