TapestryEngine

A 2D Platformer Game Engine
Log | Files | Refs

ff8b3c01507bcc1f53e88b2ab0bbc65bac9e815c.svn-base (3601B)


      1 #include "Particle.h"
      2 #include "Emitter.h"
      3 
      4 //Manager Functions
      5 bool ParticleManager::SpawnParticle(char* type, char* name, int x, int y, ParticleTypeData ptdata)
      6 {
      7 	ParticleData* pd = GetParticleData(name);
      8 	
      9 	SDL_Rect pos;
     10 	pos.h = pd->Height;
     11 	pos.w = pd->Width;
     12 	pos.x = x;
     13 	pos.y = y;
     14 
     15 	if (!strcmp(type, "P_static"))
     16 	{
     17 		Particle* prt = new P_static(pd->AnimData, pos, int(mParticles.size()), NULL, (SpatialMonitor*)pd->spat);
     18 		mParticles.push_back(prt);
     19 		mParticles.back()->mFeed.Subscribe(this);
     20 	}
     21 	else if (!strcmp(type, "P_drift"))
     22 	{
     23 		Particle* prt = new P_drift(pd->AnimData, pos, int(mParticles.size()), NULL, (SpatialMonitor*)pd->spat, ptdata.drift);
     24 		mParticles.push_back(prt);
     25 		mParticles.back()->mFeed.Subscribe(this);
     26 	}
     27 	else
     28 	{
     29 		gCons->ConsPrintf("Unrecognized particle type\n");
     30 	}
     31 
     32 	return true;
     33 }
     34 
     35 bool ParticleManager::ClearParticle(Particle* prt)
     36 {
     37 	mParticles.erase(mParticles.begin() + prt->GetID());
     38 	for (int i = 0; i < (int)(mParticles.size()); i++)
     39 	{
     40 		mParticles.at(i)->setID(i);
     41 	}
     42 
     43 	return false;
     44 }
     45 
     46 bool ParticleManager::EventProcess(Event eve)
     47 {
     48 	switch (*eve.GetEventType())
     49 	{
     50 	case EMIT_PARTICLE:
     51 		{
     52 			Emitter* emit = (Emitter*)eve.GetEventData()->p;
     53 			SpawnParticle(emit->GetType(), emit->GetName(), emit->GetX(), emit->GetY(), emit->GetData());
     54 			return true;
     55 			break;
     56 		}
     57 	case CREATE_PARTICLE:
     58 		SpawnParticle(eve.GetEventData()->psd.type, eve.GetEventData()->psd.name, eve.GetEventData()->psd.x, eve.GetEventData()->psd.y);
     59 		return true;
     60 		break;
     61 	case DEATH:
     62 		ClearParticle((Particle*)eve.GetEventData()->p);
     63 		particlesKilled += 1;
     64 		//gCons->ConsPrintf("Particles killed: %i\n", particlesKilled);
     65 		return true;
     66 		break;
     67 	default:
     68 		gCons->ConsPrintf("Particle Manager Received Unrecognized Event\n");
     69 		return false;
     70 		break;
     71 	}
     72 }
     73 
     74 //Particle Functions
     75 Particle::Particle(AnimGraph* AnimData, SDL_Rect Pos, int ID, ActorHandleManager* AHM, SpatialMonitor* spat) : Mobile(AnimData, Pos, Pos, AHM, spat, NULL, NULL) //Could enable particles to play sounds by replacing second null; worth considering
     76 {
     77 	mAnimGraph->GetAnimPack()->GetAnimation(PARTICLE)->mFeed.Subscribe(this);
     78 	mDrawPos.x = 0;
     79 	mDrawPos.y = 0;
     80 	mState = ALIVE;
     81 	mDir = 0;
     82 	mID = ID;
     83 }
     84 
     85 //P_Static
     86 bool P_static::EventProcess(Event eve)
     87 {
     88 	switch (*eve.GetEventType())
     89 	{
     90 	case ANIM_COMPLETE:
     91 		mState = DEAD;
     92 		return true;
     93 		break;
     94 	default:
     95 		gCons->ConsPrintf("Particle Received Unrecognized Event\n");
     96 		return false;
     97 		break;
     98 	}
     99 }
    100 
    101 bool P_static::UpdateAnimation()
    102 {
    103 	return false;
    104 }
    105 
    106 bool P_static::ActorUpdate()
    107 {
    108 	switch (mState)
    109 	{
    110 	case ALIVE:
    111 		mFrame = mAnimGraph->PlayOnce(PARTICLE);
    112 		break;
    113 	case DEAD:
    114 		mFeed.EventProcess(Event(DEATH, this));
    115 		break;
    116 	default:
    117 		gCons->ConsPrintf("Particle in invalid state\n");
    118 		break;
    119 	}
    120 	return false;
    121 }
    122 //
    123 
    124 //P_drift
    125 P_drift::P_drift(AnimGraph* AnimData, SDL_Rect Pos, int ID, ActorHandleManager* AHM, SpatialMonitor* spat, drift_data data) : Particle(AnimData, Pos, ID, AHM, spat), mData(data)
    126 {
    127 }
    128 
    129 bool P_drift::Drift()
    130 {
    131 	return true;
    132 }
    133 
    134 bool P_drift::EventProcess(Event eve)
    135 {
    136 	switch (*eve.GetEventType())
    137 	{
    138 	case ANIM_COMPLETE:
    139 		mState = DEAD;
    140 		return true;
    141 		break;
    142 	default:
    143 		gCons->ConsPrintf("Particle Received Unrecognized Event\n");
    144 		return false;
    145 		break;
    146 	}
    147 }
    148 
    149 bool P_drift::UpdateAnimation()
    150 {
    151 	return false;
    152 }
    153 
    154 bool P_drift::ActorUpdate()
    155 {
    156 	switch (mState)
    157 	{
    158 	case ALIVE:
    159 		mFrame = mAnimGraph->PlayOnce(PARTICLE);
    160 		Drift();
    161 		break;
    162 	case DEAD:
    163 		mFeed.EventProcess(Event(DEATH, this));
    164 		break;
    165 	default:
    166 		gCons->ConsPrintf("Particle in invalid state\n");
    167 		break;
    168 	}
    169 	return false;
    170 }
    171 //