/* * 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; }
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); } }