diff options
| author | MegaMech <MegaMech@users.noreply.github.com> | 2024-09-10 16:19:19 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-10 16:19:19 -0600 |
| commit | 47e95c0e182ed21486648d88e2ce52aa05d2fe7c (patch) | |
| tree | b9025bed5e0393286914d6a76112ce1d79c33d48 /src/main.c | |
| parent | cf05266bf93e23072aa890c753d328bedf2a5cb0 (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.c | 31 |
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(); |
