/*----------------------------------------------------------------------------- * There is a bug here that needs to be fully resolved where a game object is destroyed whilst the radar_draw is attempting to get the object position *-----------------------------------------------------------------------------*/ void radar_draw(sfRenderWindow *main_window,jnx_list *draw_queue) { sfRenderWindow_drawRectangleShape(main_window,radar_background,NULL); jnx_node *draw_queue_head = draw_queue->head; while(draw_queue_head) { game_object *current_obj = draw_queue_head->_data; if(current_obj) { sfSprite *obj_blip = radar_blip_from_object(current_obj); if(obj_blip != NULL){ sfRenderWindow_drawSprite(main_window,obj_blip,NULL); sfSprite_destroy(obj_blip); } } draw_queue_head = draw_queue_head->next_node; } }
void cartographer_update() { /*----------------------------------------------------------------------------- * Warning, may slow down game loop if there are alot of objects here *-----------------------------------------------------------------------------*/ jnx_node *head = object_list->head; jnx_list *new_draw = jnx_list_create(); while(head) { game_object *current = head->_data; if(current->health > 0) { //still an active object jnx_list_add(new_draw,current); } else { if(strcmp(current->object_type,"player") == 0) { /*----------------------------------------------------------------------------- * If the player has been killed we'll call a clean up function to end the game *-----------------------------------------------------------------------------*/ game_end(); } JNX_LOG(NULL,"Object %s at %g %g has been removed as health was %d\n", current->object_type,current->position.x, current->position.y, current->health); //remove the object play_sound(sound_lexplosion); /*----------------------------------------------------------------------------- * Add our soon to be lost object to the score board *-----------------------------------------------------------------------------*/ printf("adding object for destruction %s with health %d\n",current->object_type,current->health); //Possible bug here if the player starts in reach of enemy ships and they start blowing up before game time score_add_destroyed_obj(current); sfSprite_destroy(current->sprite); free(current); } head = head->next_node; } object_list = new_draw; }
CAMLprim value caml_sfSprite_destroy(value sprite) { sfSprite_destroy(SfSprite_val(sprite)); return Val_unit; }