mirror of
https://github.com/HarbourMasters/SpaghettiKart
synced 2026-06-17 07:27:39 -04:00
Target player follows player and fix
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user