animation struct documentation

This commit is contained in:
Banjo Kazooie
2023-03-12 23:11:39 -05:00
parent 7dd7a0b60c
commit af75d8b32d
293 changed files with 2031 additions and 1986 deletions

133
src/core2/animcache.c Normal file
View File

@@ -0,0 +1,133 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#include "core2/bonetransform.h"
typedef struct {
BoneTransformList *bone_xform;
s16 life;
u8 alive;
// u8 pad7[1];
}struct10E0s;
/* .bss */
struct10E0s D_80379E20[340];
/* .code */
void animCache_init(void){
int i;
for(i = 0; i<340; i++){
D_80379E20[i].alive = FALSE;
D_80379E20[i].bone_xform = NULL;
D_80379E20[i].life = 0;
}
}
void animCache_free(void){
int i;
for(i = 0; i<340; i++){
if(D_80379E20[i].alive){
if(D_80379E20[i].bone_xform){
boneTransformList_free(D_80379E20[i].bone_xform);
}
}
}
}
void animCache_flushStale(void){
int i;
for(i = 0; i<340; i++){
if(D_80379E20[i].alive == TRUE && D_80379E20[i].bone_xform != NULL){
if(D_80379E20[i].life < 0x3b){
boneTransformList_free(D_80379E20[i].bone_xform);
D_80379E20[i].bone_xform = 0;
if(func_80254BC4(1)){
break;
}
}
}
}
}
void animCache_flushAll(void){
int i;
for(i = 0; i<340; i++){
if(D_80379E20[i].alive){
func_803203FC(0);
D_80379E20[i].life = 0;
boneTransformList_free(D_80379E20[i].bone_xform);
D_80379E20[i].bone_xform = NULL;
}
}
}
void animCache_update(void){
int i;
for(i = 0; i<340; i++){
if(D_80379E20[i].alive == TRUE && D_80379E20[i].bone_xform){
if(--D_80379E20[i].life <= 0){
boneTransformList_free(D_80379E20[i].bone_xform);
D_80379E20[i].bone_xform = 0;
}
}
}
}
s16 animCache_getNextFree(void){
int i;
for(i = 0; i<340; i++){
if(!D_80379E20[i].alive){
return i;
}
}
return -1;
}
s16 animCache_getNew(void){
int indx = animCache_getNextFree();
D_80379E20[indx].alive = TRUE;
D_80379E20[indx].life = 0;
D_80379E20[indx].bone_xform = 0;
return indx;
}
bool animCache_inUse(s16 index){
return (D_80379E20[index].bone_xform) ? 1 : 0;
}
void animCache_release(s16 index){
if(D_80379E20[index].bone_xform){
boneTransformList_free(D_80379E20[index].bone_xform);
}
D_80379E20[index].alive = 0;
D_80379E20[index].bone_xform = 0;
D_80379E20[index].life = 0;
}
int animCache_getBoneTransformList(s16 index, BoneTransformList **arg1){
D_80379E20[index].life = 0x3C;
if(D_80379E20[index].bone_xform){
*arg1 = D_80379E20[index].bone_xform;
return FALSE;
}else{
D_80379E20[index].bone_xform = boneTransformList_new();
*arg1 = D_80379E20[index].bone_xform;
return TRUE;
}
}
void animCache_defrag(void){
int i;
for(i = 0; i < 340; i++){
if(D_80379E20[i].alive == TRUE && D_80379E20[i].bone_xform){
D_80379E20[i].bone_xform = boneTransformList_defrag(D_80379E20[i].bone_xform);
}
}
}