Beispiel #1
0
void scene_tick(scene *scene) {
    // Remove finished players
    scene_clean_ani_players(scene);

    // Tick all players
    iterator it;
    animationplayer *tmp = 0;
    list_iter_begin(&scene->child_players, &it);
    while((tmp = iter_next(&it)) != NULL) {
        animationplayer_run(tmp);
    }
    list_iter_begin(&scene->root_players, &it);
    while((tmp = iter_next(&it)) != NULL) {
        animationplayer_run(tmp);
    }

    // Run custom tick function, if defined
    if(scene->tick != NULL) {
        scene->tick(scene);
    }
        
    // If no animations to play, jump to next scene (if any)
    // TODO: Hackish, make this nicer.
    if(list_size(&scene->root_players) <= 0 && scene->this_id != SCENE_MELEE && scene->this_id != SCENE_VS && scene->this_id != SCENE_MECHLAB) {
        if (scene->this_id == SCENE_CREDITS) {
            scene->next_id = SCENE_NONE;
        } else {
            scene->next_id = SCENE_MENU;
        }
        DEBUG("NEXT ID!");
    }
}
Beispiel #2
0
void scene_clean_ani_players(void *userdata) {
    scene *sc = (scene*)userdata;
    iterator it;
    animationplayer *tmp = 0;

    list_iter_begin(&sc->child_players, &it);
    while((tmp = iter_next(&it)) != NULL) {
        if(tmp->finished) {
            animationplayer_free(tmp);
            list_delete(&sc->child_players, &it); 
        }
    }
    
    list_iter_begin(&sc->root_players, &it);
    while((tmp = iter_next(&it)) != NULL) {
        if(tmp->finished) {
            // if their probability is 1, go around again
            if (sc->loop && sc->bk->anims[tmp->id]->probability == 1) {
                animationplayer_reset(tmp);
            } else {
                animationplayer_free(tmp);
                list_delete(&sc->root_players, &it);
            }
        }
    }
}
Beispiel #3
0
void scene_render(scene *scene) {
    // Render background
    video_render_background(&scene->background);

    // Render objects
    iterator it;
    animationplayer *tmp = 0;
    list_iter_begin(&scene->child_players, &it);
    while((tmp = iter_next(&it)) != NULL) {
        animationplayer_render(tmp);
    }
    list_iter_begin(&scene->root_players, &it);
    while((tmp = iter_next(&it)) != NULL) {
        animationplayer_render(tmp);
    }
 
    // Run custom render function, if defined
    if(scene->render != NULL) {
        scene->render(scene);
    }
}
Beispiel #4
0
void scene_set_ani_finished(void *userdata, int id) {
    scene *sc = userdata;
    iterator it;
    animationplayer *tmp = 0;
    
    list_iter_begin(&sc->child_players, &it);
    while((tmp = iter_next(&it)) != NULL) {
        if(tmp->id == id) {
            tmp->finished = 1;
            return;
        }
    }
    
    list_iter_begin(&sc->root_players, &it);
    while((tmp = iter_next(&it)) != NULL) {
        if(tmp->id == id) {
            tmp->finished = 1;
            return;
        }
    }
}
Beispiel #5
0
void scene_free(scene *scene) {
    if(!scene) return;
    
    // Deinit scene
    if(scene->deinit != NULL) {
        scene->deinit(scene);
    }
    
    // Release background
    texture_free(&scene->background);
    
    // Free players
    iterator it;
    animationplayer *tmp = 0;
    list_iter_begin(&scene->child_players, &it);
    while((tmp = iter_next(&it)) != NULL) {
        animationplayer_free(tmp);
    }
    list_iter_begin(&scene->root_players, &it);
    while((tmp = iter_next(&it)) != NULL) {
        animationplayer_free(tmp);
    }
    list_free(&scene->child_players);
    list_free(&scene->root_players);
    
    // Free animations
    animation *ani = 0;
    array_iter_begin(&scene->animations, &it);
    while((ani = iter_next(&it)) != 0) {
        animation_free(ani);
        free(ani);
    }
    array_free(&scene->animations);

    // XXX do NOT free hars/controllers here!

    // Free BK
    sd_bk_delete(scene->bk);
}
Beispiel #6
0
int console_cmd_history(game_state *gs, int argc, char **argv) {
    iterator it;
    char *input;
    char buf[sizeof(con->input)];
    int i = 1;

    list_iter_begin(&con->history, &it);
    while((input = iter_next(&it)) != NULL) {
        sprintf(buf, "%d. %s", i, input);
        console_output_addline(buf);
        i++;
    }
    return 0;
}
Beispiel #7
0
int db_scan(struct state *s)
{
	struct scan_state ss;

	/* init scan_state */
	ss.state = s;
	ss.year = s->rc.data_begin.year;
	ss.begin_week = WEEK_ID_BEGIN;
	ss.end_week = WEEK_ID_END;
	ss.last_week = INT_MIN;
	memset(ss.filenames, 0, DB_MAX_WEEKS_PER_YEAR);

	/* build path to sport in database file layout */
	snprintf(ss.pathbuf, DB_MAX_PATH, "%s/%s", s->rc.data_dir, s->rc.sport);
	ss.pathbuf[DB_MAX_PATH-1] = '\0';

	/* make sure the expected dir exists */
	if (access(ss.pathbuf, R_OK)) {
		fprintf(stderr, "%s: error reading dir '%s': %s\n",
			progname, ss.pathbuf, strerror(errno));
		return -1;
	}

	/* if begin year is unset, find the earliest */
	if (s->rc.data_begin.year == WEEK_ID_BEGIN) {
		ss.year = find_earliest_year(ss.pathbuf);
		if (ss.year == INT_MAX)
			return -2;
	}

	/* for each year given in the rc,
	 * build scan_state and call scan_year()
	 */
	for (; ss.year <= s->rc.data_end.year; ss.year++) {
		/* set begin week */
		if (ss.year == s->rc.data_begin.year)
			ss.begin_week = s->rc.data_begin.week;
		else
			ss.begin_week = 1;

		/* set end week */
		if (ss.year == s->rc.data_end.year)
			ss.end_week = s->rc.data_end.week;
		else
			ss.end_week = WEEK_ID_END;

		ss.last_week = INT_MIN;

		/* scan files for year */
		if (scan_year(&ss) < 0)
			return -3;
	}

	/* print scanned files */
	if (verbose) {
		struct list_iter iter;
		list_iter_begin(&s->db->game_files, &iter);
		while (!list_iter_end(&iter)) {
			fprintf(stderr, "db: %s\n",
				(char *)list_iter_data(&iter));
			list_iter_next(&iter);
		}
		fprintf(stderr, "db: %d game files\n",
			s->db->game_files.length);
	}

	return 0;
}
Beispiel #8
0
static void print_rc(const struct rc *rc)
{
	const char *action = "unknown";

	/*
	 * map action to string
	 * if not analyze, predict, or rank, then exit
	 */
	switch (rc->action) {
	case ACTION_ANALYZE:
		action = "analyze";
		break;
	case ACTION_PREDICT:
		action = "predict";
		break;
	case ACTION_RANK:
		action = "rank";
		break;
	default:
		return;
	}

	/* heading */
	fputs("***** run control *****\n", stderr);

	/* print action */
	fprintf(stderr, "action:       %s\n", action);

	/* print sport */
	fprintf(stderr, "sport:        %s\n", rc->sport);

	/* print data-begin week */
	fputs("data-begin:   ", stderr);
	print_week(stderr, &rc->data_begin);
	fputc('\n', stderr);

	/* print end week */
	fputs("data-end:     ", stderr);
	print_week(stderr, &rc->data_end);
	fputc('\n', stderr);

	/* print target week/range */
	fputs("target-begin: ", stderr);
	print_week(stderr, &rc->target_begin);
	fputc('\n', stderr);

	fputs("target-end:   ", stderr);
	print_week(stderr, &rc->target_end);
	fputc('\n', stderr);

	/* print algos */
	fputs("algos:        [ ", stderr);
	struct list_iter iter;
	char *algo;
	list_iter_begin(&rc->user_algorithms, &iter);
	while (!list_iter_end(&iter)) {
		algo = list_iter_data(&iter);
		fprintf(stderr, "%s ", algo);
		list_iter_next(&iter);
	}
	fputs("]\n", stderr);

	/* footer */
	fputs("***********************\n", stderr);
}