예제 #1
0
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);
  }
}
예제 #2
0
파일: gui.c 프로젝트: pasoev/innfin
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);
}
예제 #3
0
파일: bsp_c.c 프로젝트: Gustorn/tcod-rs
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;
}