Автоматизированное редактирование частиц в компьютерной графике
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
UCCESS)
data.pMaxCount = EXPL_MAX;
//read all version parameters (obligatory)
QueryIntAttribute(START_COUNT_ATTR,&data.pCountOnStart)!=TIXML_SUCCESS||">if(next_element_ptr->QueryIntAttribute(START_COUNT_ATTR, &data.pCountOnStart) != TIXML_SUCCESS ||
QueryDoubleAttribute(LIFE_TIME_ATTR,&data.pLifeTime)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(LIFE_TIME_ATTR, &data.pLifeTime) != TIXML_SUCCESS ||
QueryDoubleAttribute(APPEAR_DELAY_ATTR,&data.pAppearDelay)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(APPEAR_DELAY_ATTR, &data.pAppearDelay) != TIXML_SUCCESS ||
QueryDoubleAttribute(PARTICLE_SPEED_X_ATTR,&data.pMoveSpeedX)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(PARTICLE_SPEED_X_ATTR, &data.pMoveSpeedX) != TIXML_SUCCESS ||
QueryDoubleAttribute(PARTICLE_SPEED_Y_ATTR,&data.pMoveSpeedY)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(PARTICLE_SPEED_Y_ATTR, &data.pMoveSpeedY) != TIXML_SUCCESS ||
QueryDoubleAttribute(GRAVITY_X_ATTR,&data.pGravityX)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(GRAVITY_X_ATTR, &data.pGravityX) != TIXML_SUCCESS ||
QueryDoubleAttribute(GRAVITY_Y_ATTR,&data.pGravityY)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(GRAVITY_Y_ATTR, &data.pGravityY) != TIXML_SUCCESS ||
QueryDoubleAttribute(APPEAR_BOX_W_ATTR,&data.pAppearBoxSize.width)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(APPEAR_BOX_W_ATTR, &data.pAppearBoxSize.width) != TIXML_SUCCESS ||
QueryDoubleAttribute(APPEAR_BOX_H_ATTR,&data.pAppearBoxSize.height)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(APPEAR_BOX_H_ATTR, &data.pAppearBoxSize.height) != TIXML_SUCCESS ||
QueryDoubleAttribute(RED_BEGIN_ATTR,&data.pRedBegin)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(RED_BEGIN_ATTR, &data.pRedBegin) != TIXML_SUCCESS ||
QueryDoubleAttribute(RED_END_ATTR,&data.pRedEnd)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(RED_END_ATTR, &data.pRedEnd) != TIXML_SUCCESS ||
QueryDoubleAttribute(GREEN_BEGIN_ATTR,&data.pGreenBegin)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(GREEN_BEGIN_ATTR, &data.pGreenBegin) != TIXML_SUCCESS ||
QueryDoubleAttribute(GREEN_END_ATTR,&data.pGreenEnd)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(GREEN_END_ATTR, &data.pGreenEnd) != TIXML_SUCCESS ||
QueryDoubleAttribute(BLUE_BEGIN_ATTR,&data.pBlueBegin)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(BLUE_BEGIN_ATTR, &data.pBlueBegin) != TIXML_SUCCESS ||
QueryDoubleAttribute(BLUE_END_ATTR,&data.pBlueEnd)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(BLUE_END_ATTR, &data.pBlueEnd) != TIXML_SUCCESS ||
QueryDoubleAttribute(ALPHA_BEGIN_ATTR,&data.pAlphaBegin)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(ALPHA_BEGIN_ATTR, &data.pAlphaBegin) != TIXML_SUCCESS ||
QueryDoubleAttribute(ALPHA_END_ATTR,&data.pAlphaEnd)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(ALPHA_END_ATTR, &data.pAlphaEnd) != TIXML_SUCCESS ||
QueryDoubleAttribute(SCALE_BEGIN_W_ATTR,&data.pKFScaleBeginW)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(SCALE_BEGIN_W_ATTR, &data.pKFScaleBeginW) != TIXML_SUCCESS ||
QueryDoubleAttribute(SCALE_BEGIN_H_ATTR,&data.pKFScaleBeginH)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(SCALE_BEGIN_H_ATTR, &data.pKFScaleBeginH) != TIXML_SUCCESS ||
QueryDoubleAttribute(SCALE_END_W_ATTR,&data.pKFScaleEndW)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(SCALE_END_W_ATTR, &data.pKFScaleEndW) != TIXML_SUCCESS ||
QueryDoubleAttribute(SCALE_END_H_ATTR,&data.pKFScaleEndH)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(SCALE_END_H_ATTR, &data.pKFScaleEndH) != TIXML_SUCCESS ||
QueryDoubleAttribute(DISPERSION_X_ATTR,&data.pKFDispersionX)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(DISPERSION_X_ATTR, &data.pKFDispersionX) != TIXML_SUCCESS ||
QueryDoubleAttribute(DISPERSION_Y_ATTR,&data.pKFDispersionY)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(DISPERSION_Y_ATTR, &data.pKFDispersionY) != TIXML_SUCCESS ||
QueryDoubleAttribute(PS_X_ATTR,&data.initialX)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(PS_X_ATTR, &data.initialX) != TIXML_SUCCESS ||
QueryDoubleAttribute(PS_Y_ATTR,&data.initialY)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(PS_Y_ATTR, &data.initialY) != TIXML_SUCCESS ||
QueryDoubleAttribute(PS_SPEED_X_ATTR,&data.speedChangeX)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(PS_SPEED_X_ATTR, &data.speedChangeX) != TIXML_SUCCESS ||
QueryDoubleAttribute(PS_SPEED_Y_ATTR,&data.speedChangeY)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(PS_SPEED_Y_ATTR, &data.speedChangeY) != TIXML_SUCCESS ||
QueryDoubleAttribute(START_DELAY_ATTR,&data.startDelay)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(START_DELAY_ATTR, &data.startDelay) != TIXML_SUCCESS ||
QueryDoubleAttribute(STOP_DELAY_ATTR,&data.stopDelay)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(STOP_DELAY_ATTR, &data.stopDelay) != TIXML_SUCCESS ||
QueryDoubleAttribute(ROTATE_ATTR,&data.pAngleRotate)!=TIXML_SUCCESS)"> next_element_ptr->QueryDoubleAttribute(ROTATE_ATTR, &data.pAngleRotate) != TIXML_SUCCESS)
return false;
currentX = data.initialX;
currentY = data.initialY;
setParticleTex(next_element_ptr->Attribute(TEXTURE_ATTR));
element_ptr = next_element_ptr;
return true;
}
void ParticleSystem::callback(double sec_interval)
{
if(isFinishedb)
return;
//check for startInTime
startInTime -= sec_interval;
//if (((int)startInTime*maj_kof) > 0)
if(startInTime > 0.0)
return;
else
startInTime = 0.0;
//change DX DY
currentX += data.speedChangeX* sec_interval;
currentY += data.speedChangeY* sec_interval;
//check for the next particle
timeForNextParticle -= sec_interval;
double addParticleTime = 1.0;
if (timeForNextParticle <= 0.0)
{
addParticleTime = timeForNextParticle;
timeForNextParticle = data.pAppearDelay;
}
bool need_to_finish = true;
if(isRunb)
{
need_to_finish = false;
stopInTime -= sec_interval;
//if (((int)stopInTime*maj_kof) <= 0)
if(stopInTime <= 0.0)
stop();
}
//calculate entire number of particles alive
int curr_numof_particles = 0;
for(int i=0; i<EXPL_MAX; i++)
if(pTM[i] > 0.0)
++curr_numof_particles;
//process particles
for (int i=0; i<EXPL_MAX; i++)
{
pTM[i] -= sec_interval;
if (pTM[i] <= 0.0)
{
if (addParticleTime <= 0.0 && curr_numof_particles < data.pMaxCount && isRunb)
{
//add new particle
addParticleTime += data.pAppearDelay;
++curr_numof_particles;
initParticleAtIndex(i);
}
}
else
{
need_to_finish = false;
pX[i] += sec_interval * pDx[i];
pY[i] += sec_interval * pDy[i];
pDx[i] += sec_interval * data.pGravityX;
pDy[i] += sec_interval * data.pGravityY;
}
}
if(need_to_finish)
finish();
}
void ParticleSystem::setBoundColor(wxColour color)
{
boundColor = color;
}
wxColour ParticleSystem::getBoundColor()
{
return boundColor;
}