251 lines
6.5 KiB
C++
251 lines
6.5 KiB
C++
#include "CSettingsJson.hpp"
|
|
#include "DllLauncher.hpp"
|
|
|
|
#include <filesystem>
|
|
#include <fstream>
|
|
|
|
#include <GameClient/CL_ItemDefinition.hpp>
|
|
|
|
static CSettingsJson g_CSettingsJson{};
|
|
|
|
auto CSettingsJson::LoadConfig( const std::string& JsonFile ) -> void
|
|
{
|
|
auto ConfigLoadedIndex = 0u;
|
|
const auto ConfigFilePath = GetDllDir() + JsonFile;
|
|
|
|
for ( const auto& Config : m_vecConfigList )
|
|
{
|
|
if ( Config == JsonFile )
|
|
{
|
|
m_nConfigLoadedIndex = ConfigLoadedIndex;
|
|
break;
|
|
}
|
|
|
|
ConfigLoadedIndex++;
|
|
}
|
|
|
|
std::ifstream ConfigFile( ConfigFilePath );
|
|
|
|
rapidjson::IStreamWrapper StreamWrapper( ConfigFile );
|
|
rapidjson::Document DocumentConfig;
|
|
|
|
DocumentConfig.ParseStream( StreamWrapper );
|
|
|
|
if ( !DocumentConfig.HasParseError() )
|
|
{
|
|
|
|
}
|
|
else
|
|
{
|
|
DEV_LOG( "[error] LoadConfig: %s -> %s , %i\n" , ConfigFilePath.c_str() , rapidjson::GetParseError_En( DocumentConfig.GetParseError() ), DocumentConfig.GetErrorOffset() );
|
|
}
|
|
|
|
DocumentConfig.Clear();
|
|
ConfigFile.close();
|
|
}
|
|
|
|
auto CSettingsJson::SaveConfig( const std::string& JsonFile ) -> void
|
|
{
|
|
const auto ConfigFilePath = GetDllDir() + JsonFile;
|
|
|
|
std::ofstream ConfigFile( ConfigFilePath );
|
|
|
|
rapidjson::OStreamWrapper StreamWrapper( ConfigFile );
|
|
rapidjson::PrettyWriter<rapidjson::OStreamWrapper> ConfigWriter( StreamWrapper );
|
|
|
|
ConfigWriter.SetIndent( '\t' , 1 );
|
|
ConfigWriter.SetFormatOptions( rapidjson::PrettyFormatOptions::kFormatSingleLineArray );
|
|
ConfigWriter.SetMaxDecimalPlaces( 2 );
|
|
|
|
ConfigWriter.StartObject();
|
|
{
|
|
ConfigWriter.String( XorStr( "Settings" ) );
|
|
{
|
|
ConfigWriter.StartObject();
|
|
{
|
|
|
|
}
|
|
ConfigWriter.EndObject();
|
|
}
|
|
}
|
|
ConfigWriter.EndObject();
|
|
|
|
ConfigFile.close();
|
|
}
|
|
|
|
auto CSettingsJson::DeleteConfig( const std::string& JsonFile ) -> void
|
|
{
|
|
const auto ConfigFilePath = GetDllDir() + JsonFile;
|
|
|
|
DeleteFileA( ConfigFilePath.c_str() );
|
|
}
|
|
|
|
auto CSettingsJson::UpdateConfigList() -> void
|
|
{
|
|
m_vecConfigList.clear();
|
|
|
|
for ( const auto& Entry : std::filesystem::directory_iterator( GetDllDir().c_str() ) )
|
|
{
|
|
if ( Entry.is_regular_file() )
|
|
{
|
|
if ( Entry.path().extension().string() == XorStr( ".json" ) )
|
|
m_vecConfigList.emplace_back( Entry.path().filename().string() );
|
|
}
|
|
}
|
|
}
|
|
|
|
auto CSettingsJson::GetIntJson( const rapidjson::Value& JsonValue , const char* Name , int& Output , const int Min , const int Max ) -> void
|
|
{
|
|
if ( !JsonValue.IsNull() && JsonValue.HasMember( Name ) )
|
|
{
|
|
auto& Value = JsonValue[Name];
|
|
|
|
if ( !Value.IsNull() && Value.IsInt() )
|
|
{
|
|
const auto IntValue = Value.GetInt();
|
|
|
|
if ( IntValue < Min )
|
|
Output = Min;
|
|
else if ( IntValue > Max )
|
|
Output = Max;
|
|
else
|
|
Output = IntValue;
|
|
}
|
|
}
|
|
}
|
|
|
|
auto CSettingsJson::GetBoolJson( const rapidjson::Value& JsonValue , const char* Name , bool& Output ) -> void
|
|
{
|
|
if ( !JsonValue.IsNull() && JsonValue.HasMember( Name ) )
|
|
{
|
|
auto& Value = JsonValue[Name];
|
|
|
|
if ( !Value.IsNull() && Value.IsBool() )
|
|
Output = Value.GetBool();
|
|
}
|
|
}
|
|
|
|
auto CSettingsJson::GetFloatJson( const rapidjson::Value& JsonValue , const char* Name , float& Output , const float Min , const float Max ) -> void
|
|
{
|
|
if ( !JsonValue.IsNull() && JsonValue.HasMember( Name ) )
|
|
{
|
|
auto& Value = JsonValue[Name];
|
|
|
|
if ( !Value.IsNull() && Value.IsFloat() )
|
|
{
|
|
Output = std::clamp( Value.GetFloat() , Min , Max );
|
|
}
|
|
}
|
|
}
|
|
|
|
auto CSettingsJson::GetColorJson( const rapidjson::Value& JsonValue , const char* Name , float* Output ) -> void
|
|
{
|
|
if ( !JsonValue.IsNull() && JsonValue.HasMember( Name ) )
|
|
{
|
|
auto& Value = JsonValue[Name];
|
|
|
|
if ( !Value.IsNull() && Value.IsArray() && Value.GetArray().Size() == 4 )
|
|
{
|
|
Output[0] = Value.GetArray()[0].GetFloat();
|
|
Output[1] = Value.GetArray()[1].GetFloat();
|
|
Output[2] = Value.GetArray()[2].GetFloat();
|
|
Output[3] = Value.GetArray()[3].GetFloat();
|
|
|
|
Output[0] = std::clamp( Output[0] , 0.f , 1.f );
|
|
Output[1] = std::clamp( Output[1] , 0.f , 1.f );
|
|
Output[2] = std::clamp( Output[2] , 0.f , 1.f );
|
|
Output[3] = std::clamp( Output[3] , 0.f , 1.f );
|
|
}
|
|
}
|
|
}
|
|
|
|
auto CSettingsJson::GetStringJson( const rapidjson::Value& JsonValue , const char* Name , std::string& Output ) -> void
|
|
{
|
|
if ( !JsonValue.IsNull() && JsonValue.HasMember( Name ) )
|
|
{
|
|
auto& Value = JsonValue[Name];
|
|
|
|
if ( Value.IsString() )
|
|
{
|
|
Output = Value.GetString();
|
|
}
|
|
}
|
|
}
|
|
|
|
auto CSettingsJson::GetBoneSelectedJson( const rapidjson::Value& JsonValue , const char* Name , bool* Output ) -> void
|
|
{
|
|
if ( !JsonValue.IsNull() && JsonValue.HasMember( Name ) )
|
|
{
|
|
auto& Value = JsonValue[Name];
|
|
|
|
if ( !Value.IsNull() && Value.IsArray() && Value.GetArray().Size() == 4 )
|
|
{
|
|
Output[0] = Value.GetArray()[0].GetBool();
|
|
Output[1] = Value.GetArray()[1].GetBool();
|
|
Output[2] = Value.GetArray()[2].GetBool();
|
|
Output[3] = Value.GetArray()[3].GetBool();
|
|
}
|
|
}
|
|
}
|
|
|
|
auto CSettingsJson::AddIntJson( rapidjson::PrettyWriter<rapidjson::OStreamWrapper>& Writer , const char* Name , const int& Output ) -> void
|
|
{
|
|
Writer.String( Name );
|
|
Writer.Int( Output );
|
|
}
|
|
|
|
auto CSettingsJson::AddUInt64Json( rapidjson::PrettyWriter<rapidjson::OStreamWrapper>& Writer , const char* Name , const uint64_t& Output ) -> void
|
|
{
|
|
Writer.String( Name );
|
|
Writer.Uint64( Output );
|
|
}
|
|
|
|
auto CSettingsJson::AddBoolJson( rapidjson::PrettyWriter<rapidjson::OStreamWrapper>& Writer , const char* Name , const bool& Output ) -> void
|
|
{
|
|
Writer.String( Name );
|
|
Writer.Bool( Output );
|
|
}
|
|
|
|
auto CSettingsJson::AddStringJson( rapidjson::PrettyWriter<rapidjson::OStreamWrapper>& Writer , const char* Name , const std::string& Output ) -> void
|
|
{
|
|
Writer.String( Name );
|
|
Writer.String( Output.c_str() );
|
|
}
|
|
|
|
auto CSettingsJson::AddFloatJson( rapidjson::PrettyWriter<rapidjson::OStreamWrapper>& Writer , const char* Name , const float& Output ) -> void
|
|
{
|
|
Writer.String( Name );
|
|
Writer.Double( static_cast<double>( Output ) );
|
|
}
|
|
|
|
auto CSettingsJson::AddColorJson( rapidjson::PrettyWriter<rapidjson::OStreamWrapper>& Writer , const char* Name , const float* Output ) -> void
|
|
{
|
|
Writer.String( Name );
|
|
Writer.StartArray();
|
|
|
|
Writer.Double( static_cast<double>( Output[0] ) );
|
|
Writer.Double( static_cast<double>( Output[1] ) );
|
|
Writer.Double( static_cast<double>( Output[2] ) );
|
|
Writer.Double( static_cast<double>( Output[3] ) );
|
|
|
|
Writer.EndArray();
|
|
}
|
|
|
|
auto CSettingsJson::AddBoneSelectedJson( rapidjson::PrettyWriter<rapidjson::OStreamWrapper>& Writer , const char* Name , const bool* Output ) -> void
|
|
{
|
|
Writer.String( Name );
|
|
Writer.StartArray();
|
|
|
|
Writer.Bool( Output[0] );
|
|
Writer.Bool( Output[1] );
|
|
Writer.Bool( Output[2] );
|
|
Writer.Bool( Output[3] );
|
|
|
|
Writer.EndArray();
|
|
}
|
|
|
|
auto GetSettingsJson() -> CSettingsJson*
|
|
{
|
|
return &g_CSettingsJson;
|
|
}
|