summaryrefslogtreecommitdiff
path: root/Source/Android/jni/Cheats/GraphicsModGroup.cpp
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2022-07-23 17:14:26 +0200
committerJosJuice <josjuice@gmail.com>2022-07-23 21:58:45 +0200
commit8f410bff15e1549a3f54e33ec0f4cf511ebea7df (patch)
tree295e6373580fce23d1d93a403c17e6b5de87d292 /Source/Android/jni/Cheats/GraphicsModGroup.cpp
parent45f6d36c4581b37d6b3eff0a8004301d685adf55 (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.cpp92
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);
+}
+}