Finish naming option REL

This commit is contained in:
gamemasterplc 2024-06-18 08:11:20 -05:00
parent 997cd0bf4c
commit 0687fd8abb
11 changed files with 1493 additions and 1462 deletions

View file

@ -9,116 +9,115 @@
#include "ext_math.h"
typedef struct {
/* 0x00 */ Vec eyePos;
/* 0x0C */ Vec lookingAt;
/* 0x18 */ Vec tilt;
/* 0x00 */ Vec pos;
/* 0x0C */ Vec target;
/* 0x18 */ Vec up;
/* 0x24 */ float zoom;
/* 0x28 */ float rot;
/* 0x2C */ Vec prevEyePos;
/* 0x38 */ Vec prevLookingAt;
/* 0x2C */ Vec posPrev;
/* 0x38 */ Vec targetPrev;
/* 0x44 */ char unk44[0xC];
/* 0x50 */ float prevZoom;
/* 0x54 */ float prevRot;
/* 0x58 */ Vec eyePosTarget;
/* 0x64 */ Vec lookingAtTarget;
/* 0x58 */ Vec posTarget;
/* 0x64 */ Vec posFocus;
/* 0x70 */ char unk70[0xC];
/* 0x7C */ float zoomTarget;
/* 0x80 */ float rotTarget;
/* 0x84 */ float eyeVelocity;
/* 0x84 */ float timeEye;
/* 0x88 */ float eyeSpeed;
/* 0x8C */ float lookingAtVelocity;
/* 0x90 */ float lookingAtSpeed;
/* 0x94 */ float rotVelocity;
/* 0x8C */ float timeTarget;
/* 0x90 */ float targetSpeed;
/* 0x94 */ float timeRot;
/* 0x98 */ float rotSpeed;
} CameraWork; // Size 0x9C
static void fn_1_C58(omObjData *object, float *arg1, float *arg2, float *arg3);
static void HandlerWrapper(omObjData *object);
static void HandleCamera(omObjData *object);
static void ExecCameraObj(omObjData *object);
static void ExecCamera(omObjData *object);
static void fn_1_12E4(omObjData *object);
static void PrintDebugInfo(omObjData *object);
omObjData *lbl_1_bss_10;
omObjData *optionCamera;
static float pad_04_00000000_data[] = { 0.0f, 500.0f, 0.0f, 0.0f, -1.0f, 0.0f };
static s32 pad_04_00000018_data = -1;
omObjData *fn_1_7F8(void)
omObjData *OptionCameraCreate(void)
{
omObjData *object;
CameraWork *work;
object = omAddObjEx(lbl_1_bss_8, 1001, 0, 0, 3, HandlerWrapper);
object = omAddObjEx(optionObjMan, 1001, 0, 0, 3, ExecCameraObj);
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(CameraWork), MEMORY_DEFAULT_NUM);
object->data = work;
work->eyePos.x = 0.0f;
work->eyePos.y = 0.0f;
work->eyePos.z = 0.0f;
work->lookingAt.x = 0.0f;
work->lookingAt.y = 0.0f;
work->lookingAt.z = 0.0f;
work->tilt.x = 0.0f;
work->tilt.y = 1.0f;
work->tilt.z = 0.0f;
work->pos.x = 0.0f;
work->pos.y = 0.0f;
work->pos.z = 0.0f;
work->target.x = 0.0f;
work->target.y = 0.0f;
work->target.z = 0.0f;
work->up.x = 0.0f;
work->up.y = 1.0f;
work->up.z = 0.0f;
work->zoom = 0.0f;
work->rot = 0.0f;
work->lookingAtVelocity = 1.0f;
work->eyeVelocity = 1.0f;
work->rotVelocity = 1.0f;
work->timeTarget = 1.0f;
work->timeEye = 1.0f;
work->timeRot = 1.0f;
Hu3DCameraCreate(1);
Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f);
Hu3DCameraPerspectiveSet(1, 42.0f, 10.0f, 8000.0f, 1.2f);
fn_1_B74(object, 600.0f, 60.0f, 120.0f, 1);
fn_1_A6C(object, 180.0f, 120.0f, 0.0f, 1);
OptionCameraViewSet(object, 600.0f, 60.0f, 120.0f, 1);
OptionCameraTargetSet(object, 180.0f, 120.0f, 0.0f, 1);
return object;
}
void fn_1_A3C(omObjData *object)
void OptionCameraKill(omObjData *object)
{
HuMemDirectFree(object->data);
}
void fn_1_A6C(omObjData *object, float x, float y, float z, s32 duration)
void OptionCameraTargetSet(omObjData *object, float x, float y, float z, s32 duration)
{
CameraWork *work = object->data;
work->eyePosTarget.x = x;
work->eyePosTarget.y = y;
work->eyePosTarget.z = z;
work->prevEyePos = work->eyePos;
work->eyeVelocity = 0.0f;
work->posTarget.x = x;
work->posTarget.y = y;
work->posTarget.z = z;
work->posPrev = work->pos;
work->timeEye = 0.0f;
work->eyeSpeed = 1.0f / duration;
}
void fn_1_AF0(omObjData *object, float x, float y, float z, s32 duration)
void OptionCameraFocusSet(omObjData *object, float x, float y, float z, s32 duration)
{
CameraWork *work = object->data;
work->lookingAtTarget.x = x;
work->lookingAtTarget.y = y;
work->lookingAtTarget.z = z;
work->prevLookingAt = work->lookingAt;
work->lookingAtVelocity = 0.0f;
work->lookingAtSpeed = 1.0f / duration;
work->posFocus.x = x;
work->posFocus.y = y;
work->posFocus.z = z;
work->targetPrev = work->target;
work->timeTarget = 0.0f;
work->targetSpeed = 1.0f / duration;
}
void fn_1_B74(omObjData *object, float zoom, float rot, float y, s32 duration)
void OptionCameraViewSet(omObjData *object, float zoom, float rot, float y, s32 duration)
{
CameraWork *work = object->data;
work->lookingAtTarget.y = y;
work->posFocus.y = y;
work->zoomTarget = zoom;
work->rotTarget = rot;
work->prevLookingAt.y = work->lookingAt.y;
work->targetPrev.y = work->target.y;
work->prevZoom = work->zoom;
work->prevRot = work->rot;
work->rotVelocity = 0.0f;
work->timeRot = 0.0f;
work->rotSpeed = 1.0f / duration;
}
// GetZoom
float fn_1_BF8(omObjData *object)
float OptionCameraZoomGet(omObjData *object)
{
CameraWork *work = object->data;
float zoom;
@ -128,7 +127,7 @@ float fn_1_BF8(omObjData *object)
}
// GetRot
float fn_1_C28(omObjData *object)
float OptionCameraRotGet(omObjData *object)
{
CameraWork *work = object->data;
float rot;
@ -137,117 +136,117 @@ float fn_1_C28(omObjData *object)
return rot;
}
// GetEyePos
static void fn_1_C58(omObjData *object, float *eyePosX, float *eyePosY, float *eyePosZ)
// Getpos
void OptionCameraPosGet(omObjData *object, float *x, float *y, float *z)
{
CameraWork *temp_r31 = object->data;
*eyePosX = temp_r31->eyePos.x;
*eyePosY = temp_r31->eyePos.y;
*eyePosZ = temp_r31->eyePos.z;
*x = temp_r31->pos.x;
*y = temp_r31->pos.y;
*z = temp_r31->pos.z;
}
// GetLookingAt
void fn_1_C88(omObjData *object, float *lookingAtX, float *lookingAtY, float *lookingAtZ)
// Gettarget
void OptionCameraTargetGet(omObjData *object, float *x, float *y, float *z)
{
CameraWork *work = object->data;
*lookingAtX = work->lookingAt.x;
*lookingAtY = work->lookingAt.y;
*lookingAtZ = work->lookingAt.z;
*x = work->target.x;
*y = work->target.y;
*z = work->target.z;
}
// CameraDone
s32 fn_1_CB8(omObjData *object)
s32 OptionCameraDoneCheck(omObjData *object)
{
CameraWork *work = object->data;
s32 var_r30 = 1;
s32 var_r29 = 1;
if (!(work->lookingAtVelocity < 1.0f) && !(work->rotVelocity < 1.0f)) {
if (!(work->timeTarget < 1.0f) && !(work->timeRot < 1.0f)) {
var_r29 = 0;
}
if (var_r29 == 0 && !(work->eyeVelocity < 1.0f)) {
if (var_r29 == 0 && !(work->timeEye < 1.0f)) {
var_r30 = 0;
}
return var_r30;
}
static void HandlerWrapper(omObjData *object)
static void ExecCameraObj(omObjData *object)
{
HandleCamera(object);
ExecCamera(object);
}
static void HandleCamera(omObjData *object)
static void ExecCamera(omObjData *object)
{
CameraWork *work = object->data;
float temp_f28;
float xDiff;
float zDiff;
float weight;
float dx;
float dz;
if (work->eyeVelocity < 1.0f) {
temp_f28 = sind(90.0f * work->eyeVelocity);
work->eyePos.x = work->prevEyePos.x + temp_f28 * (work->eyePosTarget.x - work->prevEyePos.x);
work->eyePos.y = work->prevEyePos.y + temp_f28 * (work->eyePosTarget.y - work->prevEyePos.y);
work->eyePos.z = work->prevEyePos.z + temp_f28 * (work->eyePosTarget.z - work->prevEyePos.z);
if ((work->eyeVelocity += work->eyeSpeed) >= 1.0f) {
work->eyePos = work->eyePosTarget;
if (work->timeEye < 1.0f) {
weight = sind(90.0f * work->timeEye);
work->pos.x = work->posPrev.x + weight * (work->posTarget.x - work->posPrev.x);
work->pos.y = work->posPrev.y + weight * (work->posTarget.y - work->posPrev.y);
work->pos.z = work->posPrev.z + weight * (work->posTarget.z - work->posPrev.z);
if ((work->timeEye += work->eyeSpeed) >= 1.0f) {
work->pos = work->posTarget;
}
}
if (work->lookingAtVelocity < 1.0f) {
temp_f28 = sind(90.0f * work->lookingAtVelocity);
work->lookingAt.x = work->prevLookingAt.x + temp_f28 * (work->lookingAtTarget.x - work->prevLookingAt.x);
work->lookingAt.y = work->prevLookingAt.y + temp_f28 * (work->lookingAtTarget.y - work->prevLookingAt.y);
work->lookingAt.z = work->prevLookingAt.z + temp_f28 * (work->lookingAtTarget.z - work->prevLookingAt.z);
if ((work->lookingAtVelocity += work->lookingAtSpeed) >= 1.0f) {
work->lookingAt = work->lookingAtTarget;
if (work->timeTarget < 1.0f) {
weight = sind(90.0f * work->timeTarget);
work->target.x = work->targetPrev.x + weight * (work->posFocus.x - work->targetPrev.x);
work->target.y = work->targetPrev.y + weight * (work->posFocus.y - work->targetPrev.y);
work->target.z = work->targetPrev.z + weight * (work->posFocus.z - work->targetPrev.z);
if ((work->timeTarget += work->targetSpeed) >= 1.0f) {
work->target = work->posFocus;
}
}
if (work->rotVelocity < 1.0f) {
temp_f28 = sind(90.0f * work->rotVelocity);
work->lookingAt.y = work->prevLookingAt.y + temp_f28 * (work->lookingAtTarget.y - work->prevLookingAt.y);
work->zoom = work->prevZoom + temp_f28 * (work->zoomTarget - work->prevZoom);
work->rot = work->prevRot + temp_f28 * (work->rotTarget - work->prevRot);
if ((work->rotVelocity += work->rotSpeed) >= 1.0f) {
work->lookingAt.y = work->lookingAtTarget.y;
if (work->timeRot < 1.0f) {
weight = sind(90.0f * work->timeRot);
work->target.y = work->targetPrev.y + weight * (work->posFocus.y - work->targetPrev.y);
work->zoom = work->prevZoom + weight * (work->zoomTarget - work->prevZoom);
work->rot = work->prevRot + weight * (work->rotTarget - work->prevRot);
if ((work->timeRot += work->rotSpeed) >= 1.0f) {
work->target.y = work->posFocus.y;
work->zoom = work->zoomTarget;
work->rot = work->rotTarget;
}
work->lookingAt.x = work->zoom * -sind(work->rot);
work->lookingAt.z = work->zoom * cosd(work->rot);
work->target.x = work->zoom * -sind(work->rot);
work->target.z = work->zoom * cosd(work->rot);
}
xDiff = work->lookingAt.x - work->eyePos.x;
zDiff = work->lookingAt.z - work->eyePos.z;
work->zoom = sqrtf(xDiff * xDiff + zDiff * zDiff);
work->rot = fmod(-atan2d(xDiff, zDiff), 360.0);
dx = work->target.x - work->pos.x;
dz = work->target.z - work->pos.z;
work->zoom = sqrtf(dx * dx + dz * dz);
work->rot = fmod(-atan2d(dx, dz), 360.0);
if (work->rot < 0.0f) {
work->rot += 360.0f;
}
Hu3DCameraPosSet(1, work->eyePos.x, work->eyePos.y, work->eyePos.z, work->tilt.x, work->tilt.y, work->tilt.z, work->lookingAt.x,
work->lookingAt.y, work->lookingAt.z);
Hu3DCameraPosSet(1, work->pos.x, work->pos.y, work->pos.z, work->up.x, work->up.y, work->up.z, work->target.x,
work->target.y, work->target.z);
}
static void fn_1_12E4(omObjData *object)
static void CameraExecDebug(omObjData *object)
{
CameraWork *work;
if (HuPadBtn[0] & 0xF) {
work = object->data;
work->lookingAt.x += 0.5f * HuPadStkX[0];
work->lookingAt.y += 0.5f * HuPadStkY[0];
work->eyePos.z += 0.5f * HuPadTrigL[0];
work->eyePos.z -= 0.5f * HuPadTrigR[0];
work->eyePos.x += 0.5f * HuPadSubStkY[0];
work->eyePos.y += 0.5f * HuPadSubStkX[0];
work->target.x += 0.5f * HuPadStkX[0];
work->target.y += 0.5f * HuPadStkY[0];
work->pos.z += 0.5f * HuPadTrigL[0];
work->pos.z -= 0.5f * HuPadTrigR[0];
work->pos.x += 0.5f * HuPadSubStkY[0];
work->pos.y += 0.5f * HuPadSubStkX[0];
}
}
static void PrintDebugInfo(omObjData *object)
static void CameraPrintDebug(omObjData *object)
{
CameraWork *work = object->data;
print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", work->lookingAt.x, work->lookingAt.y, work->lookingAt.z);
print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", work->eyePos.x, work->eyePos.y, work->eyePos.z);
print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", work->target.x, work->target.y, work->target.z);
print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", work->pos.x, work->pos.y, work->pos.z);
print8(32, 96, 1.5f, "R : %.2f DEG: %.2f", work->zoom, work->rot);
}