diff --git a/src/code_80005FD0.h b/src/code_80005FD0.h index 8fcf443b9..f675556a8 100644 --- a/src/code_80005FD0.h +++ b/src/code_80005FD0.h @@ -154,7 +154,8 @@ void func_80011EC0(s32, Player*, s32, u16); void generate_train_waypoints(void); void generate_ferry_waypoints(void); -void spawn_vehicle_on_road(Vec3f position, Vec3s rotation, Vec3f velocity, s32 waypointIndex, s32 someMultiplierTheSequel, f32 speed); +void spawn_vehicle_on_road(Vec3f position, Vec3s rotation, Vec3f velocity, s32 waypointIndex, + s32 someMultiplierTheSequel, f32 speed); void spawn_course_vehicles(void); void set_vehicle_pos_waypoint(TrainCarStuff*, Path2D*, u16); void init_vehicles_trains(size_t, size_t, f32); @@ -271,7 +272,6 @@ extern s16 D_80162FF8[]; extern s16 D_80163010[]; extern f32 D_80163028[]; extern s16 D_80163050[]; -extern f32 D_80163068[]; extern f32 D_80163090[]; extern s32 D_801630B8[]; extern u16 D_801630E0; @@ -285,9 +285,6 @@ extern f32 D_80163178[]; extern f32 D_801631A0[]; extern s16 D_801631C8; extern s32 D_801631CC; -extern TrackWaypoint* D_801631D0; -extern TrackWaypoint* D_801631D4; -extern s16* D_801631D8; extern u16 D_801631E0[]; extern u16 D_801631F8[]; extern f32 D_8016320C; @@ -305,7 +302,6 @@ extern u16 gKartAIBehaviourState[]; enum { KART_AI_BEHAVIOUR_STATE_NONE, KART_AI_BEHAVIOUR_STATE_START, KART_AI_BEHAVIOUR_STATE_RUNNING }; extern s16 D_80163300[]; -extern u16 D_80163318[]; extern u16 D_80163330[]; extern u16 D_80163344[]; extern u16 D_80163348[]; @@ -319,7 +315,6 @@ enum { SPEED_KART_AI_BEHAVIOUR_MAX }; -extern s32 D_80163368[]; extern s32 D_80163378; extern s32 D_8016337C; extern s16 D_80163380[]; @@ -332,8 +327,6 @@ extern s16 D_80163410[]; extern f32 D_80163418[]; extern f32 D_80163428[]; extern f32 D_80163438[]; -extern s32 D_80163448; -extern f32 D_8016344C; extern f32 D_80163450[]; extern s16 D_80163478; // 0 or 1, only 1 when when in extra (mirror) mode @@ -344,8 +337,6 @@ extern s32 D_80163480; extern s32 D_80163484; extern s32 D_80163488; extern s16 D_8016348C; -extern s16 D_80163490[]; -extern s16 D_801634A8[]; extern s16 D_801634C0[]; extern s16 bStopAICrossing[]; extern s16 D_801634EC; @@ -368,15 +359,11 @@ extern s32 gLapCountByPlayerId[]; // D_80164390 extern s32 gGPCurrentRaceRankByPlayerId[]; // D_801643B8 extern s32 D_801643E0[]; extern s32 D_80164408[]; -extern u16 D_80164430; -extern u16 gNearestWaypointByPlayerId[]; -extern s32 D_80164450[]; extern s16 D_80164478[]; extern s32 D_8016448C; extern f32 D_80164498[]; extern f32 gLapCompletionPercentByPlayerId[]; // D_801644A8 extern f32 gCourseCompletionPercentByPlayerId[]; // D_801644D0 -extern s16 D_801644F8[]; extern f32 D_80164510[]; extern s16 D_80164538[]; extern s32 D_801645D0[]; diff --git a/src/enhancements/freecam/freecam.cpp b/src/enhancements/freecam/freecam.cpp index 0602f9d27..5e0930419 100644 --- a/src/enhancements/freecam/freecam.cpp +++ b/src/enhancements/freecam/freecam.cpp @@ -90,7 +90,7 @@ void freecam(Camera* camera, Player* player, s8 index) { // Calculate forward direction freecam_calculate_forward_vector_allow_rotation(camera, freeCam.forwardVector); - + // Adjust camera rotation if (fTargetPlayer) { freecam_target_player(camera, freeCam.forwardVector); @@ -103,7 +103,6 @@ void freecam(Camera* camera, Player* player, s8 index) { // Apply final position, velocity, and lookAt freecam_tick(camera, freeCam.forwardVector); - } f32 gFreecamRotateSmoothingFactor = 0.85f; @@ -113,9 +112,9 @@ void freecam_mouse_manager(Camera* camera, Vec3f forwardVector) { auto wnd = GameEngine::Instance->context->GetWindow(); Ship::Coords mouse = wnd->GetMouseDelta(); - //Uint32 mouseState = SDL_GetRelativeMouseState(&mouse.x, &mouse.y); + // Uint32 mouseState = SDL_GetRelativeMouseState(&mouse.x, &mouse.y); - //printf("MOUSE %d %d\n", mouse.x, mouse.y); + // printf("MOUSE %d %d\n", mouse.x, mouse.y); mouse.x = (mouse.x + prevMouseX) / 2; mouse.y = (mouse.y + prevMouseY) / 2; @@ -167,11 +166,14 @@ bool FreecamKeyDown(int virtualKey) { // Use SDL to check key states const uint8_t* keystate = SDL_GetKeyboardState(NULL); isDownNow = keystate[virtualKey] != 0; - } else if (wnd->GetWindowBackend() == Ship::WindowBackend::FAST3D_DXGI_DX11) { + } +#ifdef _WIN32 + else if (wnd->GetWindowBackend() == Ship::WindowBackend::FAST3D_DXGI_DX11) { // Use Windows GetKeyState for DirectX SHORT keyState = GetKeyState(virtualKey); isDownNow = (keyState & 0x8000) != 0; } +#endif // Determine if this is a new key press bool isKeyDownEvent = isDownNow && !prevKeyState[virtualKey]; @@ -182,7 +184,6 @@ bool FreecamKeyDown(int virtualKey) { return isKeyDownEvent; } - void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector) { auto wnd = GameEngine::Instance->context->GetWindow(); float moveSpeed = gFreecamSpeed; @@ -199,7 +200,8 @@ void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector) { // if (keystate[SDL_SCANCODE_G]) { // fTargetPlayer = false; // } - bool TargetNextPlayer = false, TargetPreviousPlayer = false; bool prevNext; + bool TargetNextPlayer = false, TargetPreviousPlayer = false; + bool prevNext; bool Forward = false, PanLeft = false, Backward = false, PanRight = false; bool Up = false, Down = false; bool FastMove = false; @@ -213,7 +215,7 @@ void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector) { // } // Target a player if (controller->buttonPressed & R_TRIG) { - fTargetPlayer = !fTargetPlayer; + fTargetPlayer = !fTargetPlayer; } if (controller->buttonPressed & L_CBUTTONS) { TargetPreviousPlayer = true; @@ -242,10 +244,12 @@ void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector) { // if (controller->button ??) { // FastMove = true; // } - // Keyboard and mouse DX - } else if (wnd->GetWindowBackend() == Ship::WindowBackend::FAST3D_DXGI_DX11) { + // Keyboard and mouse DX + } +#ifdef _WIN32 + else if (wnd->GetWindowBackend() == Ship::WindowBackend::FAST3D_DXGI_DX11) { if (FreecamKeyDown('F')) { - fTargetPlayer = !fTargetPlayer; + fTargetPlayer = !fTargetPlayer; } if (FreecamKeyDown('N')) { TargetPreviousPlayer = true; @@ -273,10 +277,12 @@ void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector) { } // Fast movement with Ctrl if (GetKeyState(VK_LCONTROL) || GetKeyState(VK_RCONTROL)) { - FastMove = true; + FastMove = true; } - // Keyboard/mouse OpenGL/SDL - } else if (wnd->GetWindowBackend() == Ship::WindowBackend::FAST3D_SDL_OPENGL) { + // Keyboard/mouse OpenGL/SDL + } +#endif + else if (wnd->GetWindowBackend() == Ship::WindowBackend::FAST3D_SDL_OPENGL) { const uint8_t* keystate = SDL_GetKeyboardState(NULL); if (FreecamKeyDown(SDL_SCANCODE_F)) { fTargetPlayer = !fTargetPlayer; @@ -306,26 +312,26 @@ void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector) { Down = true; } if (keystate[SDL_SCANCODE_LCTRL] || keystate[SDL_SCANCODE_RCTRL]) { - FastMove = true; + FastMove = true; } } // Target previous player if (TargetPreviousPlayer) { - if (fRankIndex > 0) { - fRankIndex--; - camera->playerId = fRankIndex; - D_800DC5EC->player = &gPlayers[fRankIndex]; - } + if (fRankIndex > 0) { + fRankIndex--; + camera->playerId = fRankIndex; + D_800DC5EC->player = &gPlayers[fRankIndex]; + } } // Target next player if (TargetNextPlayer) { - if (fRankIndex < 7) { - fRankIndex++; - camera->playerId = fRankIndex; - D_800DC5EC->player = &gPlayers[fRankIndex]; - } + if (fRankIndex < 7) { + fRankIndex++; + camera->playerId = fRankIndex; + D_800DC5EC->player = &gPlayers[fRankIndex]; + } } if (FastMove) { @@ -333,26 +339,26 @@ void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector) { } if (Forward) { - totalMove[0] += forwardVector[0] * moveSpeed; - totalMove[2] += forwardVector[2] * moveSpeed; + totalMove[0] += forwardVector[0] * moveSpeed; + totalMove[2] += forwardVector[2] * moveSpeed; } if (Backward) { - totalMove[0] -= forwardVector[0] * moveSpeed; - totalMove[2] -= forwardVector[2] * moveSpeed; + totalMove[0] -= forwardVector[0] * moveSpeed; + totalMove[2] -= forwardVector[2] * moveSpeed; } if (PanRight) { - totalMove[0] -= forwardVector[2] * moveSpeed; // Pan right - totalMove[2] += forwardVector[0] * moveSpeed; + totalMove[0] -= forwardVector[2] * moveSpeed; // Pan right + totalMove[2] += forwardVector[0] * moveSpeed; } if (PanLeft) { - totalMove[0] += forwardVector[2] * moveSpeed; // Pan left - totalMove[2] -= forwardVector[0] * moveSpeed; + totalMove[0] += forwardVector[2] * moveSpeed; // Pan left + totalMove[2] -= forwardVector[0] * moveSpeed; } if (Up) { - totalMove[1] += moveSpeed; // Move up + totalMove[1] += moveSpeed; // Move up } if (Down) { - totalMove[1] -= moveSpeed; // Move down + totalMove[1] -= moveSpeed; // Move down } freeCam.velocity[0] += totalMove[0]; freeCam.velocity[1] += totalMove[1]; @@ -368,7 +374,8 @@ void freecam_render_setup(void) { 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, CourseManager_GetProps()->NearPersp, CourseManager_GetProps()->FarPersp, 1.0f); + guPerspective(&gGfxPool->mtxPersp[0], &perspNorm, gCameraZoom[0], gScreenAspect, + CourseManager_GetProps()->NearPersp, CourseManager_GetProps()->FarPersp, 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], diff --git a/src/enhancements/freecam/freecam_engine.c b/src/enhancements/freecam/freecam_engine.c index 1116de60f..398d0f566 100644 --- a/src/enhancements/freecam/freecam_engine.c +++ b/src/enhancements/freecam/freecam_engine.c @@ -78,8 +78,7 @@ void freecam_target_player(Camera* camera, Vec3f forwardVector) { forwardVector[2] = camera->lookAt[2] - camera->pos[2]; // Normalize the forward vector - f32 forwardLength = sqrtf(forwardVector[0] * forwardVector[0] + - forwardVector[1] * forwardVector[1] + + f32 forwardLength = sqrtf(forwardVector[0] * forwardVector[0] + forwardVector[1] * forwardVector[1] + forwardVector[2] * forwardVector[2]); if (forwardLength > 0.0f) { forwardVector[0] /= forwardLength;