Files
banjo-kazooie/src/core2/nc/firstpersoncamera.c
Shmoopi 1bf68887e6 Function and Enum Naming
Enum Changes:

BSGROUP_4_LOOK = 0x4

MISC_FLAG_17_FPV = 0x17

Moved nc_first_person_state to global enums.h

Function names:

func_8028EE84() -> player_getWaterState()

func_8028B2E8() -> player_isStable()

func_80294F78() -> should_look_first_person_camera()

func_80294F78() -> can_view_first_person()

func_8028B424() -> player_isFallTumbling()

func_8029C780() -> bs_getTypeOfJump()

func_8028DB14() -> hitbox_getHitboxForActor()
2024-09-02 08:40:25 -10:00

136 lines
5.0 KiB
C

#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern void func_802BD780(f32[3], f32[3], f32, f32, f32, f32);
extern f32 func_80257CF8(f32, f32, f32, f32, f32);
void ncFirstPersonCamera_setState(enum nc_first_person_state state);
/* .bss */
struct{
f32 position[3]; //first_person_position
f32 rotation[3];
f32 zoomed_in_position[3];
f32 zoomed_in_rotation[3];
f32 zoomed_out_position[3];
f32 zoomed_out_rotation[3];
f32 transistion_timer;
u8 state;
} D_8037DC60;
/* .code */
bool __ncFirstPersonCamera_fullyZoomedIn(void) {
return (ml_distance_vec3f(D_8037DC60.position, D_8037DC60.zoomed_in_position) < 40.0f);
}
void __ncFirstPersonCamera_getPositionAndRotation_entering(f32 arg0[3], f32 arg1[3]) {
s32 i;
func_80259430(&D_8037DC60.transistion_timer);
for( i = 0; i<3; i++){
D_8037DC60.position[i] = func_80257CF8(D_8037DC60.transistion_timer, 1.0f, 0.0f, D_8037DC60.zoomed_out_position[i], D_8037DC60.zoomed_in_position[i]);
D_8037DC60.rotation[i] = mlNormalizeAngle(D_8037DC60.zoomed_out_rotation[i] + func_80257CF8(D_8037DC60.transistion_timer, 0.5f, 0.0f, 0.0f, mlDiffDegF(D_8037DC60.zoomed_in_rotation[i], D_8037DC60.zoomed_out_rotation[i])));
}
if (D_8037DC60.transistion_timer == 0.0f) {
ncFirstPersonCamera_setState(FIRSTPERSON_STATE_2_IDLE);
}
if (__ncFirstPersonCamera_fullyZoomedIn() && func_8028F150()) {
func_8028FCC8(0);
}
ml_vec3f_copy(arg0, D_8037DC60.position);
ml_vec3f_copy(arg1, D_8037DC60.rotation);
}
void __ncFirstPersonCamera_getPositionAndRotation_exiting(f32 arg0[3], f32 arg1[3]) {
s32 i;
func_80259430(&D_8037DC60.transistion_timer);
for( i = 0; i<3; i++){
D_8037DC60.position[i] = func_80257CF8(D_8037DC60.transistion_timer, 1.0f, 0.0f, D_8037DC60.zoomed_in_position[i], arg0[i]);
D_8037DC60.rotation[i] = mlNormalizeAngle(D_8037DC60.zoomed_in_rotation[i] + func_80257CF8(D_8037DC60.transistion_timer, 1.0f, 0.5f, 0.0f, mlDiffDegF(arg1[i], D_8037DC60.zoomed_in_rotation[i])));
}
if (D_8037DC60.transistion_timer == 0.0f) {
ncFirstPersonCamera_setState(FIRSTPERSON_STATE_4_DONE);
}
if (!__ncFirstPersonCamera_fullyZoomedIn() && !func_8028F150()) {
func_8028FCC8(1);
}
ml_vec3f_copy(arg0, D_8037DC60.position);
ml_vec3f_copy(arg1, D_8037DC60.rotation);
}
void __ncFirstPersonCamera_getPositionAndRotation_idle(f32 arg0[3], f32 arg1[3]) {
ml_vec3f_copy(D_8037DC60.position, D_8037DC60.zoomed_in_position);
func_802BD780(D_8037DC60.zoomed_in_rotation, D_8037DC60.rotation, 10.0f, 20.0f, 120.0f, 200.0f);
D_8037DC60.rotation[2] = 0.0f;
ml_vec3f_copy(arg0, D_8037DC60.position);
ml_vec3f_copy(arg1, D_8037DC60.rotation);
}
void ncFirstPersonCamera_reset(void){
ml_vec3f_clear(D_8037DC60.position);
ml_vec3f_clear(D_8037DC60.rotation);
ml_vec3f_clear(D_8037DC60.zoomed_in_position);
ml_vec3f_clear(D_8037DC60.zoomed_in_rotation);
ml_vec3f_clear(D_8037DC60.zoomed_out_position);
ml_vec3f_clear(D_8037DC60.zoomed_out_rotation);
D_8037DC60.state = 0;
}
void ncFirstPersonCamera_getPositionAndRotation(f32 position[3], f32 rotation[3]) {
switch (D_8037DC60.state) {
case FIRSTPERSON_STATE_1_ENTER:
__ncFirstPersonCamera_getPositionAndRotation_entering(position, rotation);
break;
case FIRSTPERSON_STATE_2_IDLE:
__ncFirstPersonCamera_getPositionAndRotation_idle(position, rotation);
break;
case FIRSTPERSON_STATE_3_EXIT:
__ncFirstPersonCamera_getPositionAndRotation_exiting(position, rotation);
/* fallthrough */
case FIRSTPERSON_STATE_4_DONE:
break;
}
}
void ncFirstPersonCamera_setState(enum nc_first_person_state next_state) {
if (next_state == FIRSTPERSON_STATE_1_ENTER) {
if (D_8037DC60.state == FIRSTPERSON_STATE_3_EXIT) {
ml_vec3f_copy(D_8037DC60.zoomed_out_position, D_8037DC60.position);
ml_vec3f_copy(D_8037DC60.zoomed_out_rotation, D_8037DC60.rotation);
} else {
ncDynamicCamera_getPosition(D_8037DC60.position);
ncDynamicCamera_getRotation(D_8037DC60.rotation);
ncDynamicCamera_getPosition(D_8037DC60.zoomed_out_position);
ncDynamicCamera_getRotation(D_8037DC60.zoomed_out_rotation);
}
D_8037DC60.transistion_timer = 1.0f;
}
if (next_state == FIRSTPERSON_STATE_3_EXIT) {
D_8037DC60.transistion_timer = 1.0f;
}
D_8037DC60.state = next_state;
}
void ncFirstPersonCamera_setZoomedOutPosition(f32 src[3]){
ml_vec3f_copy(D_8037DC60.zoomed_in_position, src);
}
void ncFirstPersonCamera_setZoomedOutRotation(f32 src[3]){
D_8037DC60.zoomed_in_rotation[0] = mlNormalizeAngle(src[0]);
D_8037DC60.zoomed_in_rotation[1] = mlNormalizeAngle(src[1]);
D_8037DC60.zoomed_in_rotation[2] = mlNormalizeAngle(src[2]);
}
void ncFirstPersonCamera_getZoomedInRotation(f32 dst[3]){
ml_vec3f_copy(dst, D_8037DC60.zoomed_in_rotation);
}
s32 ncFirstPersonCamera_getState(void){
return D_8037DC60.state;
}