Files
marohook/Andromeda-CS2-Base/Andromeda-CS2-Base/AndromedaClient/Settings/CSettingsJson.cpp
T
2025-10-20 14:00:35 +03:00

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;
}