diff options
| author | JosJuice <josjuice@gmail.com> | 2022-07-23 17:14:26 +0200 |
|---|---|---|
| committer | JosJuice <josjuice@gmail.com> | 2022-07-23 21:58:45 +0200 |
| commit | 8f410bff15e1549a3f54e33ec0f4cf511ebea7df (patch) | |
| tree | 295e6373580fce23d1d93a403c17e6b5de87d292 /Source/Android/jni/Cheats/GraphicsModGroup.cpp | |
| parent | 45f6d36c4581b37d6b3eff0a8004301d685adf55 (diff) | |
Android: Add graphics mods support to CheatsActivity
Diffstat (limited to 'Source/Android/jni/Cheats/GraphicsModGroup.cpp')
| -rw-r--r-- | Source/Android/jni/Cheats/GraphicsModGroup.cpp | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/Source/Android/jni/Cheats/GraphicsModGroup.cpp b/Source/Android/jni/Cheats/GraphicsModGroup.cpp new file mode 100644 index 0000000000..e7a9329b53 --- /dev/null +++ b/Source/Android/jni/Cheats/GraphicsModGroup.cpp @@ -0,0 +1,92 @@ +// Copyright 2022 Dolphin Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include <jni.h> + +#include <set> +#include <vector> + +#include "VideoCommon/GraphicsModSystem/Config/GraphicsMod.h" +#include "VideoCommon/GraphicsModSystem/Config/GraphicsModGroup.h" +#include "jni/AndroidCommon/AndroidCommon.h" +#include "jni/AndroidCommon/IDCache.h" + +static GraphicsModGroupConfig* GetPointer(JNIEnv* env, jobject obj) +{ + return reinterpret_cast<GraphicsModGroupConfig*>( + env->GetLongField(obj, IDCache::GetGraphicsModGroupPointer())); +} + +jobject GraphicsModToJava(JNIEnv* env, GraphicsModConfig* mod, jobject jGraphicsModGroup) +{ + return env->NewObject(IDCache::GetGraphicsModClass(), IDCache::GetGraphicsModConstructor(), + reinterpret_cast<jlong>(mod), jGraphicsModGroup); +} + +extern "C" { + +JNIEXPORT void JNICALL +Java_org_dolphinemu_dolphinemu_features_cheats_model_GraphicsModGroup_finalize(JNIEnv* env, + jobject obj) +{ + delete GetPointer(env, obj); +} + +JNIEXPORT jobjectArray JNICALL +Java_org_dolphinemu_dolphinemu_features_cheats_model_GraphicsModGroup_getMods(JNIEnv* env, + jobject obj) +{ + GraphicsModGroupConfig* mod_group = GetPointer(env, obj); + + std::set<std::string> groups; + + for (const GraphicsModConfig& mod : mod_group->GetMods()) + { + for (const GraphicsTargetGroupConfig& group : mod.m_groups) + groups.insert(group.m_name); + } + + std::vector<GraphicsModConfig*> mods; + + for (GraphicsModConfig& mod : mod_group->GetMods()) + { + // If no group matches the mod's features, or if the mod has no features, skip it + if (std::none_of(mod.m_features.begin(), mod.m_features.end(), + [&groups](const GraphicsModFeatureConfig& feature) { + return groups.count(feature.m_group) == 1; + })) + { + continue; + } + + mods.push_back(&mod); + } + + const jobjectArray array = + env->NewObjectArray(static_cast<jsize>(mods.size()), IDCache::GetGraphicsModClass(), nullptr); + + jsize i = 0; + for (GraphicsModConfig* mod : mods) + env->SetObjectArrayElement(array, i++, GraphicsModToJava(env, mod, obj)); + + return array; +} + +JNIEXPORT void JNICALL +Java_org_dolphinemu_dolphinemu_features_cheats_model_GraphicsModGroup_save(JNIEnv* env, jobject obj) +{ + GetPointer(env, obj)->Save(); +} + +JNIEXPORT jobject JNICALL +Java_org_dolphinemu_dolphinemu_features_cheats_model_GraphicsModGroup_load(JNIEnv* env, jclass, + jstring jGameId) +{ + auto* mod_group = new GraphicsModGroupConfig(GetJString(env, jGameId)); + + mod_group->Load(); + + return env->NewObject(IDCache::GetGraphicsModGroupClass(), + IDCache::GetGraphicsModGroupConstructor(), mod_group); +} +} |
