#pragma once #include #include "config/CemuConfig.h" struct gameProfileIntegerOption_t { bool isPresent = false; sint32 value; }; class GameProfile { friend class GameProfileWindow; public: static constexpr uint32 kThreadQuantumDefault = 45000; bool Load(uint64_t title_id); void Save(uint64_t title_id); void ResetOptional(); void Reset(); [[nodiscard]] uint64 GetTitleId() const { return m_title_id; } [[nodiscard]] bool IsLoaded() const { return m_is_loaded; } [[nodiscard]] bool IsDefaultProfile() const { return m_is_default; } [[nodiscard]] const std::optional& GetGameName() const { return m_gameName; } [[nodiscard]] const std::optional& ShouldLoadSharedLibraries() const { return m_loadSharedLibraries; } [[nodiscard]] bool StartWithGamepadView() const { return m_startWithPadView; } [[nodiscard]] const std::optional& GetGraphicsAPI() const { return m_graphics_api; } [[nodiscard]] const AccurateShaderMulOption& GetAccurateShaderMul() const { return m_accurateShaderMul; } [[nodiscard]] const std::optional& GetPrecompiledShadersState() const { return m_precompiledShaders; } [[nodiscard]] uint32 GetThreadQuantum() const { return m_threadQuantum; } [[nodiscard]] const std::optional& GetCPUMode() const { return m_cpuMode; } [[nodiscard]] bool IsAudioDisabled() const { return m_disableAudio; } [[nodiscard]] const std::array< std::optional, 8>& GetControllerProfile() const { return m_controllerProfile; } private: uint64_t m_title_id = 0; bool m_is_loaded = false; bool m_is_default = true; std::optional m_gameName{}; // general settings std::optional m_loadSharedLibraries{}; // = true; bool m_startWithPadView = false; // graphic settings std::optional m_graphics_api{}; AccurateShaderMulOption m_accurateShaderMul = AccurateShaderMulOption::True; std::optional m_precompiledShaders{}; // cpu settings uint32 m_threadQuantum = kThreadQuantumDefault; // values: 20000 45000 60000 80000 100000 std::optional m_cpuMode{}; // = CPUModeOption::kSingleCoreRecompiler; // audio bool m_disableAudio = false; // controller settings std::array< std::optional, 8> m_controllerProfile{}; }; extern std::unique_ptr g_current_game_profile; void gameProfile_load();