mirror of
https://github.com/izzy2lost/Starship.git
synced 2026-07-05 15:19:42 -07:00
Saves?
This commit is contained in:
@@ -1,4 +1,23 @@
|
||||
#include "libultraship/libultraship.h"
|
||||
#include <string>
|
||||
|
||||
#ifdef __ANDROID__
|
||||
#include <jni.h>
|
||||
extern "C" {
|
||||
// Forward declare the JNI function to get save directory
|
||||
const char* Android_GetSaveDir();
|
||||
}
|
||||
#endif
|
||||
|
||||
static std::string GetSaveFilePath() {
|
||||
#ifdef __ANDROID__
|
||||
const char* saveDir = Android_GetSaveDir();
|
||||
if (saveDir != nullptr) {
|
||||
return std::string(saveDir) + "/default.sav";
|
||||
}
|
||||
#endif
|
||||
return "default.sav";
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
@@ -10,7 +29,8 @@ int32_t osEepromLongRead(OSMesgQueue* mq, uint8_t address, uint8_t* buffer, int3
|
||||
u8 content[512];
|
||||
s32 ret = -1;
|
||||
|
||||
FILE* fp = fopen("default.sav", "rb");
|
||||
std::string savePath = GetSaveFilePath();
|
||||
FILE* fp = fopen(savePath.c_str(), "rb");
|
||||
if (fp == NULL) {
|
||||
return -1;
|
||||
}
|
||||
@@ -34,7 +54,8 @@ int32_t osEepromLongWrite(OSMesgQueue* mq, uint8_t address, uint8_t* buffer, int
|
||||
}
|
||||
memcpy(content + address * 8, buffer, length);
|
||||
|
||||
FILE* fp = fopen("default.sav", "wb");
|
||||
std::string savePath = GetSaveFilePath();
|
||||
FILE* fp = fopen(savePath.c_str(), "wb");
|
||||
if (fp == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -913,6 +913,51 @@ extern "C" void GameEngine_Free(void* ptr) {
|
||||
|
||||
|
||||
#ifdef __ANDROID__
|
||||
#include <jni.h>
|
||||
|
||||
static const char* sCachedSaveDir = nullptr;
|
||||
|
||||
extern "C" const char* Android_GetSaveDir() {
|
||||
if (sCachedSaveDir != nullptr) {
|
||||
return sCachedSaveDir;
|
||||
}
|
||||
|
||||
JNIEnv* env = (JNIEnv*)SDL_AndroidGetJNIEnv();
|
||||
if (env == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
jclass mainActivityClass = env->FindClass("com/starship/android/MainActivity");
|
||||
if (mainActivityClass == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
jmethodID getSaveDirMethod = env->GetStaticMethodID(mainActivityClass, "getSaveDir", "()Ljava/lang/String;");
|
||||
if (getSaveDirMethod == nullptr) {
|
||||
env->DeleteLocalRef(mainActivityClass);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
jstring jSaveDir = (jstring)env->CallStaticObjectMethod(mainActivityClass, getSaveDirMethod);
|
||||
if (jSaveDir == nullptr) {
|
||||
env->DeleteLocalRef(mainActivityClass);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const char* saveDirCStr = env->GetStringUTFChars(jSaveDir, nullptr);
|
||||
if (saveDirCStr != nullptr) {
|
||||
// Cache the save directory path
|
||||
static std::string cachedPath = saveDirCStr;
|
||||
sCachedSaveDir = cachedPath.c_str();
|
||||
env->ReleaseStringUTFChars(jSaveDir, saveDirCStr);
|
||||
}
|
||||
|
||||
env->DeleteLocalRef(jSaveDir);
|
||||
env->DeleteLocalRef(mainActivityClass);
|
||||
|
||||
return sCachedSaveDir;
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT void JNICALL
|
||||
Java_com_starship_android_MainActivity_nativeSetAppDirs(JNIEnv* env, jclass, jstring jpath) {
|
||||
// No-op: paths resolved via SDL_AndroidGetInternalStoragePath in GameEngine::GameEngine()
|
||||
|
||||
Reference in New Issue
Block a user