summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMegaMech <inkstudios1@hotmail.com>2025-01-07 16:43:36 -0700
committerMegaMech <inkstudios1@hotmail.com>2025-01-07 16:43:36 -0700
commit73b4d949bc042b180a19e513f9d76d6c2d87f0d9 (patch)
tree78bd3e461078d1933038c2f4ef533ea5f692b45a /src
parent157702bbd1632df00aab595fff6125a0d2b265af (diff)
Target player follows player and fix
Diffstat (limited to 'src')
-rw-r--r--src/engine/World.cpp2
-rw-r--r--src/enhancements/freecam/freecam.h1
-rw-r--r--src/enhancements/freecam/freecam_engine.c16
-rw-r--r--src/port/ui/FreecamWindow.cpp12
4 files changed, 29 insertions, 2 deletions
diff --git a/src/engine/World.cpp b/src/engine/World.cpp
index 1e68a4b26..7b6e053ff 100644
--- a/src/engine/World.cpp
+++ b/src/engine/World.cpp
@@ -71,6 +71,7 @@ u32 World::NextCup() {
CurrentCup->CursorPosition = 0;
return CupIndex;
}
+ return Cups.size() - hack;
}
u32 World::PreviousCup() {
@@ -80,6 +81,7 @@ u32 World::PreviousCup() {
CurrentCup->CursorPosition = 0;
return CupIndex;
}
+ return 0;
}
void World::SetCup(Cup* cup) {
diff --git a/src/enhancements/freecam/freecam.h b/src/enhancements/freecam/freecam.h
index 4eaa45a89..e7a1a1ece 100644
--- a/src/enhancements/freecam/freecam.h
+++ b/src/enhancements/freecam/freecam.h
@@ -16,6 +16,7 @@ void freecam_keyboard_manager(Camera*, Vec3f);
extern f32 gFreecamSpeed;
extern f32 gFreecamSpeedMultiplier;
extern f32 gFreecamRotateSmoothingFactor;
+extern f32 gFreecamRotateFollowFactor;
extern u32 fRankIndex;
extern u32 gFreecamControllerType;
diff --git a/src/enhancements/freecam/freecam_engine.c b/src/enhancements/freecam/freecam_engine.c
index 398d0f566..444c714d0 100644
--- a/src/enhancements/freecam/freecam_engine.c
+++ b/src/enhancements/freecam/freecam_engine.c
@@ -48,6 +48,8 @@ void freecam_calculate_forward_vector_allow_rotation(Camera* camera, Vec3f forwa
forwardVector[2] = cosf(yaw);
}
+f32 gFreecamFollowFactor = 0.7;
+
void freecam_target_player(Camera* camera, Vec3f forwardVector) {
// Apply damping to velocity
freeCam.velocity[0] *= gDampValue;
@@ -90,4 +92,18 @@ void freecam_target_player(Camera* camera, Vec3f forwardVector) {
freeCam.forwardVector[0] = forwardVector[0];
freeCam.forwardVector[1] = forwardVector[1];
freeCam.forwardVector[2] = forwardVector[2];
+
+
+ // Movement
+ freeCam.velocity[0] += gPlayers[fRankIndex].velocity[0] * gFreecamFollowFactor;
+ freeCam.velocity[1] += gPlayers[fRankIndex].velocity[1] * gFreecamFollowFactor;
+ freeCam.velocity[2] += gPlayers[fRankIndex].velocity[2] * gFreecamFollowFactor;
}
+
+void freecam_get_player_from_character(s32 characterId) {
+ for (size_t i = 0; i < NUM_PLAYERS; i++) {
+ if (gPlayers[i].characterId == characterId) {
+ fRankIndex = i;
+ }
+ }
+} \ No newline at end of file
diff --git a/src/port/ui/FreecamWindow.cpp b/src/port/ui/FreecamWindow.cpp
index fcf532747..f06397c54 100644
--- a/src/port/ui/FreecamWindow.cpp
+++ b/src/port/ui/FreecamWindow.cpp
@@ -22,9 +22,12 @@ extern f32 gDampValue;
extern f32 gFreecamSpeed;
extern f32 gFreecamSpeedMultiplier;
extern f32 gFreecamRotateSmoothingFactor;
+extern f32 gFreecamFollowFactor;
extern char* D_800E76A8[];
extern u32 fRankIndex;
+extern u32 fTargetPlayer;
extern u32 gFreecamControllerType;
+void freecam_get_player_from_character(s32 characterId);
}
namespace Freecam {
@@ -45,6 +48,8 @@ float minSpeedMultiplier = 1.5f;
float maxSpeedMultiplier = 15.0f;
float minFreecamRotateFactor = 0.0f;
float maxFreecamRotateFactor = 1.0f;
+float minFreecamFollowFactor = 0.0f;
+float maxFreecamFollowFactor = 1.0f;
uint32_t focusPlayer;
@@ -73,13 +78,15 @@ void FreecamWindow::DrawElement() {
&minSpeedMultiplier, &maxSpeedMultiplier, "%f")) {};
if (ImGui::SliderScalar("Camera Rotation Smoothing", ImGuiDataType_Float, &gFreecamRotateSmoothingFactor,
&minFreecamRotateFactor, &maxFreecamRotateFactor, "%f")) {};
+ if (ImGui::SliderScalar("Follow Factor", ImGuiDataType_Float, &gFreecamFollowFactor,
+ &minFreecamFollowFactor, &maxFreecamFollowFactor, "%f")) {};
ImGui::Spacing();
ImGui::Text("Target Player");
if (ImGui::Button("None")) {
- fRankIndex = -1;
+ fTargetPlayer = false;
}
for (size_t i = 0; i < NUM_PLAYERS; i++) {
@@ -88,7 +95,8 @@ void FreecamWindow::DrawElement() {
}
ImGui::SameLine();
if (ImGui::Button(D_800E76A8[i])) {
- fRankIndex = i;
+ freecam_get_player_from_character(i);
+ fTargetPlayer = true;
}
}