Esempio n. 1
0
/*
 * traverse()
 * Sprite list traversal
 */
int traverse(const parsetree_statement_t *stmt)
{
    const char *identifier;
    const parsetree_parameter_t *param_list;
    const parsetree_parameter_t *p1, *p2;
    const char *s;

    identifier = nanoparser_get_identifier(stmt);
    param_list = nanoparser_get_parameter_list(stmt);

    if(str_icmp(identifier, "sprite") == 0) {
        p1 = nanoparser_get_nth_parameter(param_list, 1); /* first parameter = sprite name */
        p2 = nanoparser_get_nth_parameter(param_list, 2); /* second parameter = block */

        nanoparser_expect_string(p1, "Must provide sprite name");
        nanoparser_expect_program(p2, "Must provide sprite attributes");

        s = nanoparser_get_string(p1);
        logfile_message("Loading sprite '%s'", s);

        if(NULL == hashtable_spriteinfo_t_find(sprites, s))
            register_sprite(s, spriteinfo_create(nanoparser_get_program(p2)));
        else
            fatal_error("Can't redefine sprite '%s'\nin\"%s\" near line %d", s, nanoparser_get_file(stmt), nanoparser_get_line_number(stmt));

        logfile_message("Loaded sprite '%s'", s);
    }
    else
        fatal_error("Can't load sprites. Unknown identifier '%s'\nin\"%s\" near line %d", identifier, nanoparser_get_file(stmt), nanoparser_get_line_number(stmt));

    return 0;
}
Esempio n. 2
0
	void Scene::register_sprite_pool(SpritePool* ptr_sprite_pool) {
		list<Sprite*>* sprite_list = ptr_sprite_pool->get_sprite_list();
		for (Sprite* sprite : *sprite_list) {
			register_sprite(sprite);
		}
	}