emitter add_particle(emitter emit) {
particle* temp;
temp = new particle[emit.partNum+1];
for(int i=0;i<emit.partNum;i++)
temp = emit.particles;
delete [] emit.particles;
emit.particles = temp;
emit.particles[emit.partNum].x=emit.x+int(emit.width * float(rand())/float(RAND_MAX))-emit.width/2;
emit.particles[emit.partNum].y=emit.y+int(emit.height * float(rand())/float(RAND_MAX))-emit.height/2;
emit.particles[emit.partNum].speed= emit.speed_min + (emit.speed_max-emit.speed_min) * float(rand())/float(RAND_MAX);
emit.particles[emit.partNum].fade = emit.fade_min + (emit.fade_max-emit.fade_min) * float(rand())/float(RAND_MAX);
emit.particles[emit.partNum].size = emit.size_min + (emit.size_max-emit.size_min) * float(rand())/float(RAND_MAX);
emit.particles[emit.partNum].direction = emit.angle_min + (emit.angle_max-emit.angle_min) * float(rand())/float(RAND_MAX);
emit.particles[emit.partNum].life = 0;
emit.particles[emit.partNum].r=float(rand())/float(RAND_MAX);
emit.particles[emit.partNum].g=float(rand())/float(RAND_MAX);
emit.particles[emit.partNum].b=float(rand())/float(RAND_MAX);
emit.partNum++;
return emit;
}
emitter destroy_particle(emitter emit,GLint partNum) {
particle* temp;
temp = new particle[emit.partNum-1];
for(int i=0;i<partNum;i++) {
temp = emit.particles;
}
for(i=partNum+1;i<emit.partNum;i++) {
temp[i-1] = emit.particles;
}
delete [] emit.particles;
emit.particles = temp;
emit.partNum--;
return emit;
}
i have a feeling it might have something to do with those 2 functions and the way i'm handling the memory in them