about summary refs log tree commit diff
path: root/src/game/client/gc_particles.cpp
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2008-08-27 15:48:50 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2008-08-27 15:48:50 +0000
commitdfe499248f1b1236487156b28e4a535d7963fe35 (patch)
treea750b0f28cfd3f3e252602681412ac1adc6d29c7 /src/game/client/gc_particles.cpp
parentd711dd190cac809a9bd278fba03ed974812bb863 (diff)
downloadzcatch-dfe499248f1b1236487156b28e4a535d7963fe35.tar.gz
zcatch-dfe499248f1b1236487156b28e4a535d7963fe35.zip
major commit. game client restructure. not complete, loads of stuff not working, but the structure is there
Diffstat (limited to 'src/game/client/gc_particles.cpp')
-rw-r--r--src/game/client/gc_particles.cpp147
1 files changed, 0 insertions, 147 deletions
diff --git a/src/game/client/gc_particles.cpp b/src/game/client/gc_particles.cpp
deleted file mode 100644
index 504ebbab..00000000
--- a/src/game/client/gc_particles.cpp
+++ /dev/null
@@ -1,147 +0,0 @@
-#include <engine/e_client_interface.h>
-#include "gc_client.hpp"
-#include "../generated/gc_data.hpp"
-
-// NOTE: the way the particle system works isn't very cache friendly
-
-enum
-{
-	MAX_PARTICLES=1024*8,
-};
-
-static PARTICLE particles[MAX_PARTICLES];
-static int first_free = -1;
-static int first_part[NUM_PARTGROUPS] = {-1};
-
-void particle_reset()
-{
-	// reset particles
-	for(int i = 0; i < MAX_PARTICLES; i++)
-	{
-		particles[i].prev_part = i-1;
-		particles[i].next_part = i+1;
-	}
-	
-	particles[0].prev_part = 0;
-	particles[MAX_PARTICLES-1].next_part = -1;
-	first_free = 0;
-
-	for(int i = 0; i < NUM_PARTGROUPS; i++)
-		first_part[i] = -1;
-}
-
-
-void particle_add(int group, PARTICLE *part)
-{
-	if (first_free == -1)
-		return;
-		
-	// remove from the free list
-	int id = first_free;
-	first_free = particles[id].next_part;
-	particles[first_free].prev_part = -1;
-	
-	// copy data
-	particles[id] = *part;
-	
-	// insert to the group list
-	particles[id].prev_part = -1;
-	particles[id].next_part = first_part[group];
-	if(first_part[group] != -1)
-		particles[first_part[group]].prev_part = id;
-	first_part[group] = id;
-	
-	// set some parameters
-	particles[id].life = 0;
-}
-
-void particle_update(float time_passed)
-{
-	static float friction_fraction = 0;
-	friction_fraction += time_passed;
-
-	if(friction_fraction > 2.0f) // safty messure
-		friction_fraction = 0;
-	
-	int friction_count = 0;
-	while(friction_fraction > 0.05f)
-	{
-		friction_count++;
-		friction_fraction -= 0.05f;
-	}
-	
-	for(int g = 0; g < NUM_PARTGROUPS; g++)
-	{
-		int i = first_part[g];
-		while(i != -1)
-		{
-			int next = particles[i].next_part;
-			particles[i].vel += flow_get(particles[i].pos)*time_passed * particles[i].flow_affected;
-			particles[i].vel.y += particles[i].gravity*time_passed;
-			
-			for(int f = 0; f < friction_count; f++) // apply friction
-				particles[i].vel *= particles[i].friction;
-			
-			// move the point
-			vec2 vel = particles[i].vel*time_passed;
-			move_point(&particles[i].pos, &vel, 0.1f+0.9f*frandom(), NULL);
-			particles[i].vel = vel* (1.0f/time_passed);
-			
-			particles[i].life += time_passed;
-			particles[i].rot += time_passed * particles[i].rotspeed;
-
-			// check particle death
-			if(particles[i].life > particles[i].life_span)
-			{
-				// remove it from the group list
-				if(particles[i].prev_part != -1)
-					particles[particles[i].prev_part].next_part = particles[i].next_part;
-				else
-					first_part[g] = particles[i].next_part;
-					
-				if(particles[i].next_part != -1)
-					particles[particles[i].next_part].prev_part = particles[i].prev_part;
-					
-				// insert to the free list
-				if(first_free != -1)
-					particles[first_free].prev_part = i;
-				particles[i].prev_part = -1;
-				particles[i].next_part = first_free;
-				first_free = i;
-			}
-			
-			i = next;
-		}
-	}
-}
-
-void particle_render(int group)
-{
-	gfx_blend_normal();
-	//gfx_blend_additive();
-	gfx_texture_set(data->images[IMAGE_PARTICLES].id);
-	gfx_quads_begin();
-
-	int i = first_part[group];
-	while(i != -1)
-	{
-		select_sprite(particles[i].spr);
-		float a = particles[i].life / particles[i].life_span;
-		vec2 p = particles[i].pos;
-		float size = mix(particles[i].start_size, particles[i].end_size, a);
-
-		gfx_quads_setrotation(particles[i].rot);
-
-		gfx_setcolor(
-			particles[i].color.r,
-			particles[i].color.g,
-			particles[i].color.b,
-			particles[i].color.a); // pow(a, 0.75f) * 
-
-		gfx_quads_draw(p.x, p.y, size, size);
-		
-		i = particles[i].next_part;
-	}
-	gfx_quads_end();
-	gfx_blend_normal();
-}