summaryrefslogtreecommitdiff
path: root/src/enhancements/freecam/freecam.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/enhancements/freecam/freecam.c')
-rw-r--r--src/enhancements/freecam/freecam.c93
1 files changed, 45 insertions, 48 deletions
diff --git a/src/enhancements/freecam/freecam.c b/src/enhancements/freecam/freecam.c
index b7b148425..bb9522185 100644
--- a/src/enhancements/freecam/freecam.c
+++ b/src/enhancements/freecam/freecam.c
@@ -13,6 +13,9 @@
#include <SDL2/SDL.h>
#include "freecam_engine.h"
#include "n64_freecam.h"
+#include "math_util.h"
+#include "skybox_and_splitscreen.h"
+#include "freecam.h"
typedef struct {
Vec3f pos;
@@ -40,10 +43,6 @@ u32 gFreecamControllerType = 0;
// void freecam_n64_controller_manager(Camera *camera, struct Controller *controller, Player *player);
// void freecam_target_player(Camera *camera, u32 playerIndex);
// void freecam_move_camera_up(Camera* camera, struct Controller *controller, f32 distance);
-void freecam_save_state(Camera *camera);
-void freecam_load_state(Camera *camera);
-void freecam_mouse_manager(Camera *camera);
-void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector);
/**
* Controls
@@ -67,10 +66,10 @@ void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector);
* Camera mode 1: Enter freecam at the player's position
* Camera mode 2: Enter freecam at previous freecam spot
*
-*/
+ */
-void freecam(Camera *camera, Player *player, s8 index) {
- struct Controller *controller = &gControllers[0];
+void freecam(Camera* camera, Player* player, s8 index) {
+ struct Controller* controller = &gControllers[0];
f32 dirX;
f32 dirY;
f32 dirZ;
@@ -101,7 +100,7 @@ void freecam(Camera *camera, Player *player, s8 index) {
return;
} else {
- if(fMode) {
+ if (fMode) {
freecam_save_state(camera);
}
}
@@ -114,14 +113,13 @@ void freecam(Camera *camera, Player *player, s8 index) {
return;
}
- //if (player == gPlayerOne) { return; }
+ // if (player == gPlayerOne) { return; }
- //player->type &= ~PLAYER_HUMAN;
- //player->type |= PLAYER_HUMAN;
+ // player->type &= ~PLAYER_HUMAN;
+ // player->type |= PLAYER_HUMAN;
// if ((player->type & PLAYER_START_SEQUENCE)) { return; }
-
// Mouse/Keyboard
if (gFreecamControllerType == 0) {
freecam_calculate_forward_vector_allow_rotation(camera, freeCam.forwardVector);
@@ -135,7 +133,7 @@ void freecam(Camera *camera, Player *player, s8 index) {
}
}
-void freecam_save_state(Camera *camera) {
+void freecam_save_state(Camera* camera) {
fState.pos[0] = camera->pos[0];
fState.pos[1] = camera->pos[1];
fState.pos[2] = camera->pos[2];
@@ -150,7 +148,7 @@ void freecam_save_state(Camera *camera) {
fModeInit = true;
}
-void freecam_load_state(Camera *camera) {
+void freecam_load_state(Camera* camera) {
camera->pos[0] = fState.pos[0];
camera->pos[1] = fState.pos[1];
camera->pos[2] = fState.pos[2];
@@ -182,22 +180,23 @@ void freecam_mouse_manager(Camera* camera, Vec3f forwardVector) {
f32 pitchChange = mouseY * MOUSE_SENSITIVITY_Y;
// Smoothly update yaw and pitch
- camera->rot[1] += (short)(yawChange * 65535.0f / (2 * M_PI)); // Yaw (left/right)
- camera->rot[2] += (short)(pitchChange * 65535.0f / (2 * M_PI)); // Pitch (up/down)
+ camera->rot[1] += (short) (yawChange * 65535.0f / (2 * M_PI)); // Yaw (left/right)
+ camera->rot[2] += (short) (pitchChange * 65535.0f / (2 * M_PI)); // Pitch (up/down)
// Clamp pitch to avoid extreme values
- if (camera->rot[2] > 15999) camera->rot[2] = 15999;
- if (camera->rot[2] < -15999) camera->rot[2] = -15999;
+ if (camera->rot[2] > 15999) {
+ camera->rot[2] = 15999;
+ }
+ if (camera->rot[2] < -15999) {
+ camera->rot[2] = -15999;
+ }
// Calculate the forward vector based on the new yaw and pitch
- //freecam_calculate_forward_vector_allow_rotation(camera, forwardVector);
+ // freecam_calculate_forward_vector_allow_rotation(camera, forwardVector);
// Smoothly interpolate the lookAt position
- Vec3f targetLookAt = {
- camera->pos[0] + forwardVector[0],
- camera->pos[1] + forwardVector[1],
- camera->pos[2] + forwardVector[2]
- };
+ Vec3f targetLookAt = { camera->pos[0] + forwardVector[0], camera->pos[1] + forwardVector[1],
+ camera->pos[2] + forwardVector[2] };
// Smoothing
camera->lookAt[0] += (targetLookAt[0] - camera->lookAt[0]) * gFreecamRotateSmoothingFactor;
@@ -206,7 +205,6 @@ void freecam_mouse_manager(Camera* camera, Vec3f forwardVector) {
}
}
-
f32 gFreecamSpeed = 3.0f;
f32 gFreecamSpeedMultiplier = 2.0f;
@@ -220,8 +218,7 @@ void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector) {
}
// Determine movement direction based on keys pressed
- Vec3f totalMove = {0.0f, 0.0f, 0.0f};
-
+ Vec3f totalMove = { 0.0f, 0.0f, 0.0f };
// if (keystate[SDL_SCANCODE_F]) {
// fMode = true;
@@ -257,7 +254,6 @@ void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector) {
return;
}
-
if (keystate[SDL_SCANCODE_W]) {
totalMove[0] += forwardVector[0] * moveSpeed;
totalMove[2] += forwardVector[2] * moveSpeed;
@@ -290,7 +286,7 @@ void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector) {
}
// Control the camera using the n64 controller
-void freecam_n64_controller_manager(Camera *camera, struct Controller *controller, Player *player) {
+void freecam_n64_controller_manager(Camera* camera, struct Controller* controller, Player* player) {
if (controller->buttonPressed & U_JPAD) {
fMode = !fMode;
@@ -334,12 +330,12 @@ void freecam_n64_controller_manager(Camera *camera, struct Controller *controlle
}
// Forward
- if (controller->button & A_BUTTON) {
+ if (controller->button & A_BUTTON) {
freecam_n64_move_camera_forward(camera, controller, 3.0f);
}
// Backward B button but not A button.
- if (controller->button & B_BUTTON && !(controller->button & A_BUTTON)) {
+ if (controller->button & B_BUTTON && !(controller->button & A_BUTTON)) {
freecam_n64_move_camera_forward(camera, controller, -3.0f);
}
@@ -354,21 +350,22 @@ void freecam_n64_controller_manager(Camera *camera, struct Controller *controlle
}
void freecam_render_setup(void) {
- u16 perspNorm;
- Mat4 matrix;
- init_rdp();
- func_802A53A4();
- init_rdp();
- func_80057FC4(0);
- gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH);
- gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK | G_CULL_BOTH | G_CULL_FRONT);
- guPerspective(&gGfxPool->mtxPersp[0], &perspNorm, gCameraZoom[0], gScreenAspect, D_80150150, D_8015014C, 1.0f);
- gSPPerspNormalize(gDisplayListHead++, perspNorm);
- gSPMatrix(gDisplayListHead++, (&gGfxPool->mtxPersp[0]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
- guLookAt(&gGfxPool->mtxLookAt[0], camera1->pos[0], camera1->pos[1], camera1->pos[2], camera1->lookAt[0], camera1->lookAt[1], camera1->lookAt[2], camera1->up[0], camera1->up[1], camera1->up[2]);
- gSPMatrix(gDisplayListHead++, (&gGfxPool->mtxLookAt[0]), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION);
- mtxf_identity(matrix);
- gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
- render_set_position(matrix, 0);
- init_rdp();
+ u16 perspNorm;
+ Mat4 matrix;
+ init_rdp();
+ func_802A53A4();
+ init_rdp();
+ func_80057FC4(0);
+ gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH);
+ gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK | G_CULL_BOTH | G_CULL_FRONT);
+ guPerspective(&gGfxPool->mtxPersp[0], &perspNorm, gCameraZoom[0], gScreenAspect, D_80150150, D_8015014C, 1.0f);
+ gSPPerspNormalize(gDisplayListHead++, perspNorm);
+ gSPMatrix(gDisplayListHead++, (&gGfxPool->mtxPersp[0]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
+ guLookAt(&gGfxPool->mtxLookAt[0], camera1->pos[0], camera1->pos[1], camera1->pos[2], camera1->lookAt[0],
+ camera1->lookAt[1], camera1->lookAt[2], camera1->up[0], camera1->up[1], camera1->up[2]);
+ gSPMatrix(gDisplayListHead++, (&gGfxPool->mtxLookAt[0]), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION);
+ mtxf_identity(matrix);
+ gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
+ render_set_position(matrix, 0);
+ init_rdp();
}