Target player follows player and fix

This commit is contained in:
MegaMech
2025-01-07 16:43:36 -07:00
parent 157702bbd1
commit 73b4d949bc
4 changed files with 29 additions and 2 deletions
+2
View File
@@ -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) {
+1
View File
@@ -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;
+16
View File
@@ -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;
}
}
}
+10 -2
View File
@@ -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;
}
}