This commit is contained in:
Paul 2000-11-16 17:33:37 +00:00
parent e00a8747fc
commit 44e4594a1f

View file

@ -71,6 +71,8 @@ CBubicleEmitter *CBubicleFactory::s_emitters;
CBubicle *CBubicleFactory::s_bubicles; CBubicle *CBubicleFactory::s_bubicles;
SpriteBank *CBubicleFactory::s_sprites; SpriteBank *CBubicleFactory::s_sprites;
int s_numLiveBubicleEmitters=0;
int s_numLiveBubicles=0;
@ -122,7 +124,11 @@ void CBubicleEmitter::think(int _frames)
} }
if(m_data.m_life!=-1&&m_frameCount>m_data.m_life) if(m_data.m_life!=-1&&m_frameCount>m_data.m_life)
{
m_active=false; m_active=false;
s_numLiveBubicleEmitters--;
ASSERT(s_numLiveBubicleEmitters>=0); // Woah, something bad has happened!
}
} }
@ -306,7 +312,11 @@ void CBubicle::think(int _frames)
m_frameCount+=_frames; m_frameCount+=_frames;
if(m_frameCount>m_data.m_life) if(m_frameCount>m_data.m_life)
{
m_active=false; m_active=false;
s_numLiveBubicles--;
ASSERT(s_numLiveBubicles>=0); // Woah, something bad has happened!
}
} }
@ -398,22 +408,32 @@ void CBubicleFactory::think(int _frames)
ASSERT(s_initialised); ASSERT(s_initialised);
int frames; int frames;
int i; int i,count;
CBubicleEmitter *emt; CBubicleEmitter *emt;
CBubicle *bub; CBubicle *bub;
emt=s_emitters; emt=s_emitters;
for(i=0;i<NUM_EMITTERS;i++,emt++) count=s_numLiveBubicleEmitters;
for(i=0;i<count;i++)
{ {
if(emt->isActive()) while(!emt->isActive())
{
emt++;
}
emt->think(_frames); emt->think(_frames);
emt++;
} }
bub=s_bubicles; bub=s_bubicles;
for(i=0;i<NUM_BUBICLES;i++,bub++) count=s_numLiveBubicles;
for(i=0;i<count;i++)
{ {
if(bub->isActive()) while(!bub->isActive())
{
bub++;
}
bub->think(_frames); bub->think(_frames);
bub++;
} }
} }
@ -468,6 +488,7 @@ CBubicleEmitter *CBubicleFactory::spawnEmitter(BubicleEmitterData *_init)
if(!emt->isActive()) if(!emt->isActive())
{ {
emt->init(_init); emt->init(_init);
s_numLiveBubicleEmitters++;
return emt; return emt;
} }
} }
@ -523,7 +544,7 @@ CBubicle *CBubicleFactory::spawnParticle(BubicleEmitterData *_init)
newBubData.m_colour.m_b=_init->m_bubicleBase.m_colour.m_r+getRndRange(_init->m_bubicleRange.m_colour.m_b); newBubData.m_colour.m_b=_init->m_bubicleBase.m_colour.m_r+getRndRange(_init->m_bubicleRange.m_colour.m_b);
bub->init(&newBubData,x,y); bub->init(&newBubData,x,y);
s_numLiveBubicles++;
return bub; return bub;
} }
} }