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 //