void sensor_visobjs_remove(TCOD_list_t l, Object o) { //remove if present Object o2 = sensor_visobjs_member(l, o); if(o2) { TCOD_list_remove(l, o2); } }
static void message(struct engine *engine, const TCOD_color_t col, const char *text, ...) { TCOD_list_t log = engine->gui->log; /* Build the text */ va_list ap; char buf[128]; va_start(ap, text); vsprintf(buf, text, ap); va_end(ap); char *line_begin = buf; char *line_end; do { /* make room for the new message */ if (TCOD_list_size(log) == MSG_HEIGHT) { struct message *to_remove = TCOD_list_get(log, 0); TCOD_list_remove(log, to_remove); free(to_remove); } // detect end of the line line_end = strchr(line_begin, '\n'); if (line_end) *line_end = '\0'; // add a new message to the log struct message *msg; mkmessage(&msg, line_begin, col); TCOD_list_push(log, msg); /* go to next line */ line_begin = line_end + 1; } while (line_end); }
bool TCOD_bsp_traverse_level_order(TCOD_bsp_t *node, TCOD_bsp_callback_t listener, void *userData) { TCOD_list_t stack=TCOD_list_new(); TCOD_list_push(stack,node); while ( ! TCOD_list_is_empty(stack) ) { TCOD_bsp_t *node=(TCOD_bsp_t *)TCOD_list_get(stack,0); TCOD_list_remove(stack,node); if ( TCOD_bsp_left(node) ) TCOD_list_push(stack,TCOD_bsp_left(node)); if ( TCOD_bsp_right(node) ) TCOD_list_push(stack,TCOD_bsp_right(node)); if (!listener(node,userData)) { TCOD_list_delete(stack); return false; } } TCOD_list_delete(stack); return true; }