LOCAL_C void SeekToCluster(RFile& aFile,TInt aCluster) // // Seek to aCluster and check it is found correctly // { TBuf8<508> seekBuf(508); TInt r=aFile.Read(aCluster*testBuf.MaxSize(),seekBuf); test_KErrNone(r); test(seekBuf[0]==(TUint8)aCluster && seekBuf[507]==(TUint8)aCluster); }
/** * アニメーションを読み込む */ void loadAnimation(ANIME_SET* graphic,ARCHIVE* archive,const char* file_name){ BUF* gfx_file = getFile(archive,file_name); //ヘッダを飛ばす。 seekBuf(gfx_file,(long)strlen(ANIME_HEADER),SEEK_SET); //ファイル名取得 int filename_size; readBuf(gfx_file,&filename_size,sizeof(filename_size)); graphic->filename_size = filename_size; graphic->filename = malloc(filename_size+1); readBuf(gfx_file,graphic->filename,filename_size); graphic->filename[filename_size] = '\0'; //スプライト取得 SDL_RWops* frame_ops = getGraphixFile(archive,graphic->filename); getSpriteFromOPS(&graphic->sprite,frame_ops); frame_ops->close(frame_ops); //メモリ開放は忘れずに //スプライトエリア用スプライト SPRITE* anime_sprite = &graphic->sprite; //モード、フラグ、アニメ数。 readBuf(gfx_file,&graphic->mode,sizeof(graphic->mode)); readBuf(gfx_file,&graphic->flag,sizeof(graphic->flag)); readBuf(gfx_file,&graphic->anime_num,sizeof(graphic->anime_num)); int anime_num = graphic->anime_num; graphic->anime = malloc( sizeof(ANIMATION*) * anime_num ); int i=0; for(;i<anime_num;i++){ //アニメ番号 int num = 0; readBuf(gfx_file,&num,sizeof(num)); if(anime_num < num) raiseError("invalid animation file:",file_name); //メモリ確保。 graphic->anime[num] = malloc(sizeof(ANIMATION)); ANIMATION* anime = graphic->anime[num]; anime->num = num; //フレーム番号取得 int frame_num; readBuf(gfx_file,&frame_num,sizeof(frame_num)); anime->frame_num = frame_num; anime->frame = malloc(sizeof(ANIMATION_FRAME)*frame_num); int j; for(j=0;i<frame_num;j++){ //フレームへのポインタの設定 ANIMATION_FRAME* frame = &anime->frame[j]; //持続時間 readBuf(gfx_file,&frame->frame_time,sizeof(frame->frame_time)); //スプライトの設定 frame->sprite_area.sprite = anime_sprite; readBuf(gfx_file,&frame->sprite_area.x,sizeof(frame->sprite_area.x)); readBuf(gfx_file,&frame->sprite_area.y,sizeof(frame->sprite_area.y)); readBuf(gfx_file,&frame->sprite_area.width,sizeof(frame->sprite_area.width)); readBuf(gfx_file,&frame->sprite_area.height,sizeof(frame->sprite_area.height)); } } deleteBuf(gfx_file); }