← index
Old.Learning.Projects/pscgame/PSCParticleEmiter.cpp
Source: Old.Learning.Projects/pscgame/PSCParticleEmiter.cpp
// PSCParticleEmiter written by Jared Bruni

// www.lostsidedead.com


#include "thehead.h"




int PSCParticleEmiter::getoffparticle()
{
	for(int i = 0; i <= MAX_PARTICLE;i++)
	{
		if(particles[i].on == false)
		{
			return i;
		}
	}

	return -1;
}

void PSCParticleEmiter::releaseparticle(int x, int y, int speed, psctype ptype)
{
	int off;
	off = getoffparticle();
	if(off == -1)
	{
		return;
	}
	particles[off].on = true;
	particles[off].x = x;
	particles[off].y = y;
	particles[off].speed = speed;
	particles[off].ptype = ptype;
}

void PSCParticleEmiter::killparticle(int index)
{
	particles[index].on = false;
	particles[index].speed = 0;
	particles[index].x = 0;
	particles[index].y = 0;
}

void PSCParticleEmiter::ondraw()
{
	for(int i = 0; i <= MAX_PARTICLE;i++)
	{
		if(particles[i].on == true)
		{
			switch(particles[i].ptype)
			{
			case BALL:
				{
			
					mxhwnd.paint.mxdrawellipse( particles[i].x,particles[i].y,particles[i].x + 25,particles[i].y + 25,RGB(rand()%255,rand()%255,rand()%255),RGB(rand()%255,rand()%255,rand()%255));
				}
				break;
			case CD:
				{
					psc_cd.DisplayGraphic(particles[i].x,particles[i].y);

				}
				break;
			}
		}
	}
}

void PSCParticleEmiter::onlogic()
{
	for(int i = 0; i <= MAX_PARTICLE;i++)
	{
		if(particles[i].on == true)
		{
			switch(particles[i].ptype)
			{
			case BALL:
				{
					particles[i].y -= particles[i].speed;
				
					if(particles[i].y <= 0)
					{
						killparticle(i);
					}

					DetectProc(i);

					}
				break;
			case CD:
				{
					particles[i].y += particles[i].speed;

					if(particles[i].y >= 480-psc_cd.h - 5)
					{
						// they loose a life here

						player.lives -= 1;
						killparticle(i);
					}
				}
				break;
			}
		}
	}
}


void PSCParticleEmiter::DetectProc(int i)
{
		int x1;
		int x2;
		int y1;
		int y2;
		x1 = particles[i].x;
		y1 = particles[i].y;
		
						
	for(int p = 0; p <= MAX_PARTICLE; p++)
	{
		if(p != i && particles[p].on == true && particles[p].ptype == CD)
		{
			// ok its a CD

			// lets see if im clipping it

			x2 = particles[p].x;
			y2 = particles[p].y;
			
			if(x1 >= x2 && x1 <= x2 + 106 && y1 >= y2 && y1 <= y2 + 82)
			{
				player.hit();
				killparticle( i );
				killparticle( p );
				return;
			}

		}
	}
}