documentation: core2/ba/physics
This commit is contained in:
@@ -4,46 +4,66 @@
|
||||
|
||||
#include "animation.h"
|
||||
|
||||
typedef struct animation_file_cache_s{
|
||||
AnimationFile *ptr;
|
||||
u16 exp_timer:15;
|
||||
u16 persist:1;
|
||||
u8 pad6[2];
|
||||
}AnimationFileCache;
|
||||
|
||||
AnimationFile *animBinCache_get(enum asset_e assest_id);
|
||||
|
||||
/* .data */
|
||||
s16 D_803635C0[] = {0x1, 0x3, 0x5, 0xC, 0xE, 0x17, 0x18, 0x19, 0x1A, 0x1C, 0x1D, 0};
|
||||
s16 animBinCache_persistantList[] = {
|
||||
ASSET_1_ANIM_BSCROUCH_ENTER,
|
||||
ASSET_3_ANIM_BSWALK,
|
||||
ASSET_5_ANIM_BSPUNCH,
|
||||
ASSET_C_ANIM_BSWALK_RUN,
|
||||
ASSET_E_ANIM_BSTURN,
|
||||
ASSET_17_ANIM_BSBFLAP,
|
||||
ASSET_18_ANIM_BSBFLAP_ENTER,
|
||||
ASSET_19_ANIM_BSBPECK_ENTER,
|
||||
ASSET_1A_ANIM_BSBPECK,
|
||||
ASSET_1C_ANIM_BSBBARGE,
|
||||
ASSET_1D_ANIM_BSBBUSTER,
|
||||
0
|
||||
};
|
||||
|
||||
/* .bss */
|
||||
AnimationFileCache D_8037A8C0[0x2CA];
|
||||
AnimationFileCache animBinCache[0x2CA];
|
||||
|
||||
/* .code */
|
||||
void func_802884E0(void){
|
||||
static void __animBinCache_initPersistent(void){
|
||||
s16 *phi_v0;
|
||||
|
||||
for( phi_v0 = D_803635C0; *phi_v0 != 0; phi_v0++){
|
||||
D_8037A8C0[*phi_v0].unk4_0 = 1;
|
||||
for( phi_v0 = animBinCache_persistantList; *phi_v0 != 0; phi_v0++){
|
||||
animBinCache[*phi_v0].persist = 1;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void animBinCache_loadAll(void){
|
||||
static void __animBinCache_loadAll(void){
|
||||
s32 i;
|
||||
for(i = 0; i < 0x2CA; i++){
|
||||
if(D_8037A8C0[i].unk4_0){
|
||||
if(animBinCache[i].persist){
|
||||
animBinCache_get(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AnimationFile *animBinCache_get(enum asset_e asset_id){
|
||||
if(!D_8037A8C0[asset_id].unk0){
|
||||
D_8037A8C0[asset_id].unk0 = (AnimationFile *) assetcache_get(asset_id);
|
||||
if(animBinCache[asset_id].ptr == NULL){
|
||||
animBinCache[asset_id].ptr = (AnimationFile *) assetcache_get(asset_id);
|
||||
}
|
||||
D_8037A8C0[asset_id].unk4_15 = 30;
|
||||
return D_8037A8C0[asset_id].unk0;
|
||||
animBinCache[asset_id].exp_timer = 30;
|
||||
return animBinCache[asset_id].ptr;
|
||||
}
|
||||
|
||||
void animBinCache_free(void){
|
||||
s32 i;
|
||||
for(i = 0; i < 0x2CA; i++){
|
||||
if(D_8037A8C0[i].unk0){
|
||||
assetcache_release(D_8037A8C0[i].unk0);
|
||||
if(animBinCache[i].ptr){
|
||||
assetcache_release(animBinCache[i].ptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -51,30 +71,35 @@ void animBinCache_free(void){
|
||||
void animBinCache_init(void){
|
||||
s32 i = 0;
|
||||
for(i = 0; i < 0x2CA; i++){
|
||||
D_8037A8C0[i].unk0 = NULL;
|
||||
D_8037A8C0[i].unk4_15 = 0;
|
||||
D_8037A8C0[i].unk4_0 = 0;
|
||||
animBinCache[i].ptr = NULL;
|
||||
animBinCache[i].exp_timer = 0;
|
||||
animBinCache[i].persist = 0;
|
||||
}
|
||||
func_802884E0();
|
||||
animBinCache_loadAll();
|
||||
__animBinCache_initPersistent();
|
||||
__animBinCache_loadAll();
|
||||
}
|
||||
|
||||
void func_8028873C(s32 arg0){
|
||||
void animBinCache_flushStale(s32 persistant){
|
||||
s32 i;
|
||||
if(arg0){
|
||||
if(persistant){
|
||||
for(i = 0; i < 0x2CA; i++){
|
||||
if(D_8037A8C0[i].unk0 && D_8037A8C0[i].unk4_0 && (D_8037A8C0[i].unk4_15 < 30)){
|
||||
assetcache_release(D_8037A8C0[i].unk0);
|
||||
D_8037A8C0[i].unk0 = NULL;
|
||||
D_8037A8C0[i].unk4_0 = 0;
|
||||
if( (animBinCache[i].ptr != NULL)
|
||||
&& (animBinCache[i].persist)
|
||||
&& (animBinCache[i].exp_timer < 30)
|
||||
){
|
||||
assetcache_release(animBinCache[i].ptr);
|
||||
animBinCache[i].ptr = NULL;
|
||||
animBinCache[i].persist = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
for(i = 0; i < 0x2CA; i++){
|
||||
if(D_8037A8C0[i].unk0 && !D_8037A8C0[i].unk4_0 && (D_8037A8C0[i].unk4_15 < 30)){
|
||||
assetcache_release(D_8037A8C0[i].unk0);
|
||||
D_8037A8C0[i].unk0 = NULL;
|
||||
if( (animBinCache[i].ptr != NULL)
|
||||
&& !animBinCache[i].persist
|
||||
&& (animBinCache[i].exp_timer < 30)
|
||||
){
|
||||
assetcache_release(animBinCache[i].ptr);
|
||||
animBinCache[i].ptr = NULL;
|
||||
if(func_80254BC4(1))
|
||||
break;
|
||||
}
|
||||
@@ -82,13 +107,13 @@ void func_8028873C(s32 arg0){
|
||||
}
|
||||
}
|
||||
|
||||
void func_80288834(void){
|
||||
void animBinCache_update(void){
|
||||
s32 i;
|
||||
for(i = 0; i < 0x2CA; i++){
|
||||
if(D_8037A8C0[i].unk0 && !D_8037A8C0[i].unk4_0){
|
||||
if(--D_8037A8C0[i].unk4_15 == 0){
|
||||
assetcache_release(D_8037A8C0[i].unk0);
|
||||
D_8037A8C0[i].unk0 = NULL;
|
||||
if((animBinCache[i].ptr != NULL) && !animBinCache[i].persist){
|
||||
if(--animBinCache[i].exp_timer == 0){
|
||||
assetcache_release(animBinCache[i].ptr);
|
||||
animBinCache[i].ptr = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user