summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2024-09-10 16:19:19 -0600
committerGitHub <noreply@github.com>2024-09-10 16:19:19 -0600
commit47e95c0e182ed21486648d88e2ce52aa05d2fe7c (patch)
treeb9025bed5e0393286914d6a76112ce1d79c33d48 /src/main.c
parentcf05266bf93e23072aa890c753d328bedf2a5cb0 (diff)
[enhancement] Freecam (#56)
* Create noclip.c * Create noclip.h * Update camera.c * Update render_courses.c * Update ImguiUI.cpp * Freecam Done * Add smoothing to window * Update freecam * focus player * fix * Update freecam.c * Update freecam.h * Update render_courses.c * Update FreecamWindow.cpp * Update Engine.cpp * Move vars --------- Co-authored-by: MegaMech <7255464+MegaMech@users.noreply.github.com>
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c
index 414568181..de999c9f6 100644
--- a/src/main.c
+++ b/src/main.c
@@ -43,6 +43,7 @@
#include "crash_screen.h"
#include "buffers/gfx_output_buffer.h"
#include <bridge/gfxdebuggerbridge.h>
+#include "enhancements/freecam/freecam.h"
// Declarations (not in this file)
void func_80091B78(void);
@@ -317,6 +318,29 @@ void create_gfx_task_structure(void) {
#endif
}
+f32 gDeltaTime = 0.0f;
+f32 calculate_delta_time(void) {
+ static u32 prevtime = 0;
+ u32 now = osGetCount();
+ f32 deltaTime;
+
+ if (now > prevtime) {
+ deltaTime = (f32)(now - prevtime) / OS_CPU_COUNTER;
+ } else {
+ // Handle counter reset
+ deltaTime = (f32)((0xffffffff - prevtime) + 1 + now) / OS_CPU_COUNTER;
+ }
+
+ prevtime = now;
+
+ // Cap deltaTime to avoid large jumps (e.g., on pause/resume)
+ if (deltaTime > 1.0f / 15.0f) { // Assume 15 FPS is the lowest acceptable rate
+ deltaTime = 1.0f / 15.0f;
+ }
+
+ gDeltaTime = deltaTime;
+}
+
void init_controllers(void) {
osCreateMesgQueue(&gSIEventMesgQueue, &gSIEventMesgBuf[0], ARRAY_COUNT(gSIEventMesgBuf));
osSetEventMesg(OS_EVENT_SI, &gSIEventMesgQueue, OS_MESG_32(0x33333333));
@@ -336,6 +360,11 @@ void update_controller(s32 index) {
return;
}
+ // Prevents pause menu intereference while controlling flycam
+ if ((CVarGetInteger("gFreecam", 0) == 1) && (gFreecamControllerType == 0) && (gGamestate == RACING)) {
+ return;
+ }
+
controller->rawStickX = gControllerPads[index].stick_x;
controller->rawStickY = gControllerPads[index].stick_y;
@@ -1226,6 +1255,8 @@ void thread5_game_loop(void) {
}
void thread5_iteration(void) {
+ // func_800CB2C4();
+ calculate_delta_time();
#ifdef TARGET_N64
while (true) {
func_800CB2C4();