Ejemplo n.º 1
0
void read_BigFloatAnimBlock(FILE *lk_m2_file, LKAnimationBlock *ptrBlock,
		AnimRefs *ptrAnimRefs, BigFloat_LKSubBlock **ptrDataBlock,
		LKModelAnimation *AnimList, FILE **anim_files) {
	if (ptrBlock->Times.n > 0) {
		//Layer 1
		read_layer1(lk_m2_file, ptrBlock, ptrAnimRefs);
		//Layer 2
		(*ptrDataBlock) = malloc(
				ptrBlock->Times.n * sizeof(BigFloat_LKSubBlock)); //Each Array_Ref leads to an array of elements (and there are Times.n of them, as seen previously)
		int j;
		for (j = 0; j < ptrBlock->Times.n; j++) {
			int real_pos = get_RealPos(j, AnimList);
			if ((AnimList[j].flags & 0x130) == 0) {		//Open .anim file
				FILE *anim_file = anim_files[real_pos];
				read_times(anim_file, ptrAnimRefs, &(*ptrDataBlock)[j].times, j,
						real_pos);
				if (ptrAnimRefs->keys[real_pos].n > 0) {
					(*ptrDataBlock)[j].keys = malloc(
							ptrAnimRefs->keys[real_pos].n * sizeof(BigFloat));
					fseek(anim_file, ptrAnimRefs->keys[real_pos].ofs,
					SEEK_SET);
					fread((*ptrDataBlock)[j].keys, sizeof(BigFloat),
							ptrAnimRefs->keys[real_pos].n, anim_file);
				}
			} else {
				read_times(lk_m2_file, ptrAnimRefs, &(*ptrDataBlock)[j].times,
						j, real_pos);
				if (ptrAnimRefs->keys[real_pos].n > 0) {
					(*ptrDataBlock)[j].keys = malloc(
							ptrAnimRefs->keys[real_pos].n * sizeof(BigFloat));
					fseek(lk_m2_file, ptrAnimRefs->keys[real_pos].ofs,
					SEEK_SET);
					fread((*ptrDataBlock)[j].keys, sizeof(BigFloat),
							ptrAnimRefs->keys[real_pos].n, lk_m2_file);
				}
			}
		}
	}
}
Ejemplo n.º 2
0
int get_RealPos(int pos, LKModelAnimation *animations) {
	if((animations[pos].flags & 0x40) == 0){
		return pos;
	}
	return get_RealPos(animations[pos].Index, animations);
}