diff --git a/Source/Core/Core/CMakeLists.txt b/Source/Core/Core/CMakeLists.txt index c898c8f693..366700536f 100644 --- a/Source/Core/Core/CMakeLists.txt +++ b/Source/Core/Core/CMakeLists.txt @@ -123,8 +123,6 @@ add_library(core FifoPlayer/FifoPlayer.h FifoPlayer/FifoRecorder.cpp FifoPlayer/FifoRecorder.h - FreeLookConfig.cpp - FreeLookConfig.h FreeLookManager.cpp FreeLookManager.h GeckoCode.cpp diff --git a/Source/Core/Core/Config/FreeLookSettings.cpp b/Source/Core/Core/Config/FreeLookSettings.cpp index d66400bbe7..405a602949 100644 --- a/Source/Core/Core/Config/FreeLookSettings.cpp +++ b/Source/Core/Core/Config/FreeLookSettings.cpp @@ -3,11 +3,6 @@ #include "Core/Config/FreeLookSettings.h" -#include - -#include "Common/Config/Config.h" -#include "Core/FreeLookConfig.h" - namespace Config { // Configuration Information diff --git a/Source/Core/Core/Config/FreeLookSettings.h b/Source/Core/Core/Config/FreeLookSettings.h index 367173a0a4..3d1375940b 100644 --- a/Source/Core/Core/Config/FreeLookSettings.h +++ b/Source/Core/Core/Config/FreeLookSettings.h @@ -3,11 +3,16 @@ #pragma once -#include "Common/Config/Config.h" +#include "Common/Config/ConfigInfo.h" namespace FreeLook { -enum class ControlType : int; +enum class ControlType : int +{ + SixAxis, + FPS, + Orbital +}; } namespace Config diff --git a/Source/Core/Core/FreeLookConfig.cpp b/Source/Core/Core/FreeLookConfig.cpp deleted file mode 100644 index 56aadb9af2..0000000000 --- a/Source/Core/Core/FreeLookConfig.cpp +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2020 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "Core/FreeLookConfig.h" - -#include - -#include "Core/AchievementManager.h" -#include "Core/CPUThreadConfigCallback.h" -#include "Core/Config/AchievementSettings.h" -#include "Core/Config/FreeLookSettings.h" -#include "Core/ConfigManager.h" -#include "Core/Core.h" - -namespace FreeLook -{ -static Config s_config; -static Config s_active_config; -static std::optional - s_config_changed_callback_id = std::nullopt; - -Config& GetConfig() -{ - return s_config; -} - -const Config& GetActiveConfig() -{ - return s_active_config; -} - -void UpdateActiveConfig() -{ - s_active_config = s_config; -} - -Config::Config() -{ - camera_config.control_type = ControlType::SixAxis; - enabled = false; -} - -void Config::Refresh() -{ - if (!s_config_changed_callback_id.has_value()) - { - s_config_changed_callback_id = - CPUThreadConfigCallback::AddConfigChangedCallback([] { s_config.Refresh(); }); - } - - camera_config.control_type = ::Config::Get(::Config::FL1_CONTROL_TYPE); - enabled = ::Config::Get(::Config::FREE_LOOK_ENABLED) && - !AchievementManager::GetInstance().IsHardcoreModeActive(); -} - -void Config::Shutdown() -{ - if (!s_config_changed_callback_id.has_value()) - return; - - CPUThreadConfigCallback::RemoveConfigChangedCallback(*s_config_changed_callback_id); - s_config_changed_callback_id.reset(); -} -} // namespace FreeLook diff --git a/Source/Core/Core/FreeLookConfig.h b/Source/Core/Core/FreeLookConfig.h deleted file mode 100644 index 5819d81269..0000000000 --- a/Source/Core/Core/FreeLookConfig.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2020 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -// IMPORTANT: UI etc should modify the value returned by FreeLook::GetConfig(). -// Free Look code should read from the value returned by FreeLook::GetActiveConfig(). -// The reason for this is to get rid of race conditions etc when the -// configuration changes in the middle of a frame. - -#pragma once - -namespace FreeLook -{ -enum class ControlType : int -{ - SixAxis, - FPS, - Orbital -}; - -struct CameraConfig -{ - ControlType control_type; -}; - -// NEVER inherit from this class. -struct Config final -{ - Config(); - void Refresh(); - void Shutdown(); - - CameraConfig camera_config; - bool enabled; -}; - -Config& GetConfig(); -const Config& GetActiveConfig(); - -// Called every frame. -void UpdateActiveConfig(); -} // namespace FreeLook diff --git a/Source/Core/Core/FreeLookManager.cpp b/Source/Core/Core/FreeLookManager.cpp index 58b71b708f..9dc23e8934 100644 --- a/Source/Core/Core/FreeLookManager.cpp +++ b/Source/Core/Core/FreeLookManager.cpp @@ -7,14 +7,11 @@ #include #include "Common/Common.h" -#include "Common/CommonTypes.h" #include "Common/Config/Config.h" #include "Common/ScopeGuard.h" #include "Core/Config/FreeLookSettings.h" -#include "Core/ConfigManager.h" #include "Core/Core.h" -#include "Core/FreeLookConfig.h" #include "InputCommon/ControlReference/ControlReference.h" #include "InputCommon/ControllerEmu/ControlGroup/Buttons.h" @@ -22,7 +19,6 @@ #include "InputCommon/InputConfig.h" #include "VideoCommon/FreeLookCamera.h" -#include "VideoCommon/OnScreenDisplay.h" namespace { @@ -326,8 +322,6 @@ void Shutdown() { s_config.UnregisterHotplugCallback(); s_config.ClearControllers(); - - GetConfig().Shutdown(); } void Initialize() @@ -339,7 +333,7 @@ void Initialize() s_config.RegisterHotplugCallback(); - FreeLook::GetConfig().Refresh(); + g_freelook_camera.RefreshConfig(); s_config.LoadConfig(); } diff --git a/Source/Core/DolphinLib.props b/Source/Core/DolphinLib.props index 17e44675ac..f1bbf2b567 100644 --- a/Source/Core/DolphinLib.props +++ b/Source/Core/DolphinLib.props @@ -250,7 +250,6 @@ - @@ -933,7 +932,6 @@ - diff --git a/Source/Core/VideoCommon/FreeLookCamera.cpp b/Source/Core/VideoCommon/FreeLookCamera.cpp index 2bc7d11bb9..ba6be77d6c 100644 --- a/Source/Core/VideoCommon/FreeLookCamera.cpp +++ b/Source/Core/VideoCommon/FreeLookCamera.cpp @@ -4,18 +4,13 @@ #include "VideoCommon/FreeLookCamera.h" #include -#include #include -#include "Common/MathUtil.h" - #include "Common/ChunkFile.h" -#include "Core/ConfigManager.h" +#include "Common/Config/Config.h" #include "Core/Core.h" -#include "VideoCommon/VideoCommon.h" - FreeLookCamera g_freelook_camera; namespace @@ -260,21 +255,18 @@ float CameraControllerInput::GetSpeed() const FreeLookCamera::FreeLookCamera() { - SetControlType(FreeLook::ControlType::SixAxis); + RefreshConfig(); } -void FreeLookCamera::SetControlType(FreeLook::ControlType type) +void FreeLookCamera::RefreshConfig() { - if (m_current_type && *m_current_type == type) - { - return; - } + m_is_enabled = Config::Get(Config::FREE_LOOK_ENABLED); + const auto type = Config::Get(Config::FL1_CONTROL_TYPE); - if (type == FreeLook::ControlType::SixAxis) - { - m_camera_controller = std::make_unique(); - } - else if (type == FreeLook::ControlType::Orbital) + if (m_current_type == type) + return; + + if (type == FreeLook::ControlType::Orbital) { m_camera_controller = std::make_unique(); } @@ -282,6 +274,10 @@ void FreeLookCamera::SetControlType(FreeLook::ControlType type) { m_camera_controller = std::make_unique(); } + else + { + m_camera_controller = std::make_unique(); + } m_current_type = type; } @@ -330,7 +326,7 @@ void FreeLookCamera::DoState(PointerWrap& p) bool FreeLookCamera::IsActive() const { - return FreeLook::GetActiveConfig().enabled; + return m_is_enabled; } CameraController* FreeLookCamera::GetController() const diff --git a/Source/Core/VideoCommon/FreeLookCamera.h b/Source/Core/VideoCommon/FreeLookCamera.h index f1ae46ce4d..91c296ad16 100644 --- a/Source/Core/VideoCommon/FreeLookCamera.h +++ b/Source/Core/VideoCommon/FreeLookCamera.h @@ -7,7 +7,7 @@ #include #include "Common/Matrix.h" -#include "Core/FreeLookConfig.h" +#include "Core/Config/FreeLookSettings.h" class PointerWrap; @@ -79,7 +79,9 @@ class FreeLookCamera { public: FreeLookCamera(); - void SetControlType(FreeLook::ControlType type); + + void RefreshConfig(); + Common::Matrix44 GetView() const; Common::Vec2 GetFieldOfViewMultiplier() const; @@ -90,8 +92,10 @@ public: CameraController* GetController() const; private: - std::optional m_current_type; std::unique_ptr m_camera_controller; + + bool m_is_enabled{}; + std::optional m_current_type; }; extern FreeLookCamera g_freelook_camera; diff --git a/Source/Core/VideoCommon/VideoConfig.cpp b/Source/Core/VideoCommon/VideoConfig.cpp index a15331569d..d2cacd7276 100644 --- a/Source/Core/VideoCommon/VideoConfig.cpp +++ b/Source/Core/VideoCommon/VideoConfig.cpp @@ -305,10 +305,9 @@ void CheckForConfigChanges() const auto old_hdr = g_ActiveConfig.bHDR; UpdateActiveConfig(); - FreeLook::UpdateActiveConfig(); g_vertex_manager->OnConfigChange(); - g_freelook_camera.SetControlType(FreeLook::GetActiveConfig().camera_config.control_type); + g_freelook_camera.RefreshConfig(); if (g_ActiveConfig.bGraphicMods && !old_graphics_mods_enabled) {