У меня есть следующие две функции класса, которые я пытаюсь объединить в одну, потому что они очень похожи:
void Camera::UpdateCameraPosition(void) {
if(cameraMode == CAMERA_MODE_THIRD_PERSON) {
float alpha = Math::DegreesToRadians(Rotation.y);
float beta = Math::DegreesToRadians(Rotation.x);
Position.SetValue(
Player.x + CAMERA_ORBIT_OFFSET * cos(beta) * sin(alpha),
Player.y + CAMERA_ORBIT_OFFSET * sin(-beta),
Player.z + CAMERA_ORBIT_OFFSET * cos(beta) * cos(alpha)
);
} else {
Position = Player;
}
}
void Camera::UpdatePlayerPosition(void) {
if(cameraMode == CAMERA_MODE_THIRD_PERSON) {
float alpha = Math::DegreesToRadians(Rotation.y);
float beta = Math::DegreesToRadians(Rotation.x);
Player.SetValue(
Position.x - CAMERA_ORBIT_OFFSET * cos(beta) * sin(alpha),
Position.y - CAMERA_ORBIT_OFFSET * sin(-beta),
Position.z - CAMERA_ORBIT_OFFSET * cos(beta) * cos(alpha)
);
} else {
Player = Position;
}
}
Как видите, Player
и Position
- две частные переменныекласса.Они имеют тип данных Vector3D
, другой класс.
Я пытаюсь объединить их следующим образом:
void Camera::UpdateCameraOrPlayerPosition(Vector3D &target, Vector3D reference) {
if(cameraMode == CAMERA_MODE_THIRD_PERSON) {
float alpha = Math::DegreesToRadians(Rotation.y);
float beta = Math::DegreesToRadians(Rotation.x);
target.SetValue(
reference.x - CAMERA_ORBIT_OFFSET * cos(beta) * sin(alpha),
reference.y - CAMERA_ORBIT_OFFSET * sin(-beta),
reference.z - CAMERA_ORBIT_OFFSET * cos(beta) * cos(alpha)
);
} else {
target = reference;
}
}
Это компилируется и тому подобное, но не ведет себя так же,В то время как другие две функции работают, когда я заменяю эти вызовы функций на эту, она не работает должным образом.
Я сделал следующие замены:
UpdatePlayerPosition() -> UpdateCameraOrPlayerPosition(Player, Position)
UpdateCameraPosition() -> UpdateCameraOrPlayerPosition(Position, Player)
Я также попробовал с указателем вместо ссылки, результат был тот же.Я что-то здесь упускаю?