Files
banjo-kazooie/src/core2/baeyes.c
2024-10-30 23:47:11 -05:00

123 lines
2.7 KiB
C

#include <ultra64.h>
#include "functions.h"
#include "variables.h"
typedef struct{
f32 duration;
u8 state;
} BaEyes;
BaEyes baEyes[4];
/* .code */
f32 baeyes_getEyePosition(s32 id){
switch (id) {
case 0:
return func_8029DFC8();
case 1:
return func_8029DFD4();
case 2:
return 0.0f;
case 3:
return 0.0f;
default:
return 0.0f;
}
}
void baeyes_setEyePosition(s32 id, f32 position){
switch(id){
case 0:
func_8029E0C4(position);
break;
case 1:
func_8029E0D0(position);
break;
case 2:
break;
case 3:
default:
break;
}
}
void baeyes_reset(void){
int i;
for(i = 0; i < 4; i++){
baEyes[i].duration = 1.0f;
baEyes[i].state = 0;
baeyes_setEyePosition(i, 0.0f);
}
}
void baeyes_blinkSingleEye(s32 id, f32 arg1){
baEyes[id].state = 1;
baEyes[id].duration = arg1;
}
void baeyes_closeSingleEye(s32 id, f32 arg1){
baEyes[id].state = 5;
baEyes[id].duration = arg1;
}
void baeyes_close(void){
baeyes_closeSingleEye(0, 0.09f);
baeyes_closeSingleEye(1, 0.09f);
}
void baeyes_openSingleEye(s32 id, f32 arg1){
baEyes[id].state = 4;
baEyes[id].duration = arg1;
}
void baeyes_open(void){
baeyes_openSingleEye(0, 0.034f);
baeyes_openSingleEye(1, 0.034f);
}
void baeyes_update(void){
f32 dt;
f32 eye_position;
int i;
dt = time_getDelta();
for(i = 0; i < 4; i++){
eye_position = baeyes_getEyePosition(i);
switch(baEyes[i].state){
case 1://L80292F78
eye_position += dt/baEyes[i].duration;
if(1.0 < eye_position){
eye_position = 1.0f;
baEyes[i].state = 2;
}
baeyes_setEyePosition(i, eye_position);
break;
case 2://L80292FB4
baEyes[i].state = 3;
break;
case 3://L80292FBC
case 4://L80292FBC
eye_position -= dt/baEyes[i].duration;
if(eye_position < 0.0){
eye_position = 0.0f;
baEyes[i].state = 0;
}
baeyes_setEyePosition(i, eye_position);
break;
case 5://L80292FF8
eye_position += dt/baEyes[i].duration;
if(1.0 < eye_position){
eye_position = 1.0f;
baEyes[i].state = 0;
}
baeyes_setEyePosition(i, eye_position);
break;
case 0://L8029302C
default://L8029302C
break;
}
}
}