/** Allocates and initializes a new dynamic Thing. */ Thing * thing_new_dynamic(Area * area, int id, int kind, int x, int y, int z, int w, int h) { Thing * self = thing_alloc(); if(!thing_init_dynamic(self, area, id, kind, x, y, z, w, h)) { return thing_free(self); } return self; }
void scene_free(scene_t *scene) { int i; glDisable(GL_LIGHT0); glDisable(GL_LIGHT1); glDisable(GL_LIGHT2); glDisable(GL_LIGHT3); glDisable(GL_LIGHT4); glDisable(GL_LIGHT5); glDisable(GL_LIGHT6); glDisable(GL_LIGHT7); if(scene->land) land_free(scene->land); if(scene->camera) camera_free(scene->camera); if(scene->pathpos) spline_free(scene->pathpos); if(scene->pathdir) spline_free(scene->pathdir); if(scene->sky) sky_free(scene->sky); if(scene->sun) sky_sun_free(scene->sun); if(scene->pathsun) spline_free(scene->pathsun); for(i = 0; i < scene->num_mesh; i++) thing_mesh_free(scene->mesh[i]); if(scene->mesh) free(scene->mesh); for(i = 0; i < scene->num_thing; i++) thing_free(scene->thing[i]); if(scene->thing) free(scene->thing); for(i = 0; i < scene->num_animation; i++) { thing_free(scene->animation[i]->thing); if(scene->animation[i]->path) spline_free(scene->animation[i]->path); free(scene->animation[i]); } if(scene->animation) free(scene->animation); for(i = 0; i < scene->num_particle; i++) { particle_free(scene->particle[i]->particle); if(scene->particle[i]->path) spline_free(scene->particle[i]->path); free(scene->particle[i]); } if(scene->particle) free(scene->particle); for(i = 0; i < scene->num_dynamiclight; i++) { dynamiclight_free(scene->dynamiclight[i]->light); if(scene->dynamiclight[i]->path) spline_free(scene->dynamiclight[i]->path); free(scene->dynamiclight[i]); } if(scene->dynamiclight) free(scene->dynamiclight); free(scene); }