Exemple #1
0
static jobject
cuttherope_CallObjectMethodV(JNIEnv *env, jobject p1, jmethodID p2, va_list p3)
{
    MODULE_DEBUG_PRINTF("cuttherope_CallObjectMethodV %s (%s)\n",p2->name,p2->sig);
    struct dummy_array *array;

    if (strcmp(p2->name, "loadData") == 0) {
        struct dummy_jstring *arg;
        arg = va_arg(p3, struct dummy_jstring*);
        jboolean flag = va_arg(p3, jint);
        (void)flag;

        char *filename = malloc(strlen(arg->data) + strlen("assets/") + 1);
        sprintf(filename, "assets/%s", arg->data);

        MODULE_DEBUG_PRINTF("   data=%s\n",arg->data);

        if ((array = GLOBAL_J(env)->read_file_to_jni_array(filename))) {

            MODULE_DEBUG_PRINTF("   data=%s size=%d\n", arg->data, array->length);

	    // Poll for events here to avoid "not responding" messages
            SDL_Event e;
            while (SDL_PollEvent(&e));

            return array;
        } else {
            MODULE_DEBUG_PRINTF("   data=%s not found\n",arg->data);
            return GLOBAL_J(env);
        }
    }
    else if (strcmp(p2->name, "getBytesOfBitmap") == 0) {
Exemple #2
0
jobject
fruitninja_jnienv_CallStaticObjectMethodV(JNIEnv*env, jclass p1, jmethodID p2, va_list p3)
{
    struct dummy_jclass *jcl = p1;

    if( strcmp( p2->name, "SFXPlayInternal" ) == 0 )
    {
        char *soundname = NULL;

        soundname = dup_jstring(global, va_arg(p3, jstring*));

        int i;
        for(i = 0; soundname[i]; i++) {
            soundname[i] = tolower(soundname[i]); // LowerCase soundname
        }

        for(i=0; i <= MAX_SOUNDS; i++)
        {
            if ( SFX[i].sound == NULL ) break;
            if ( memcmp(SFX[i].name, soundname, strlen(soundname)) == 0 ) {
                /* Play some sweet sounds? */
                MODULE_DEBUG_PRINTF("module: Play sound: %s\n", SFX[i].name);
                apkenv_mixer_play_sound(SFX[i].sound, 0);
                free(soundname);
                return NULL;
            }
        }
        MODULE_DEBUG_PRINTF("module: Sound not found: %s\n", soundname);

        free(soundname);

    }
Exemple #3
0
/* NewObjectV override. Initialize audio output */
jobject
JNIEnv_NewObjectV(JNIEnv *env, jclass p1, jmethodID p2, va_list p3)
{
    struct dummy_jclass *clazz = p1;
    MODULE_DEBUG_PRINTF("module_JNIEnv_NewObjectV(%x, %s, %s)\n", p1, p2->name, clazz->name);
    if (strcmp(clazz->name, "com/rovio/ka3d/AudioOutput") == 0)
    {
        /* Open the audio device */
        desired = malloc(sizeof(SDL_AudioSpec));
        obtained = malloc(sizeof(SDL_AudioSpec));

        audioHandle = va_arg(p3, jlong);

        desired->freq = va_arg(p3, int);
        desired->channels = va_arg(p3, int);
        desired->format = AUDIO_S16SYS;
        jint bitrate = va_arg(p3, int);
        desired->samples = va_arg(p3, int) / 8;
        desired->callback=my_audio_callback;
        desired->userdata=NULL;
        MODULE_DEBUG_PRINTF("Module: Handle: %lld, freq: %i, channels: %i, bitrate: %i, samples: %i\n",
            audioHandle,desired->freq,desired->channels,bitrate,desired->samples);

        assert( SDL_OpenAudio(desired, obtained) == 0 );
        free(desired);
    }
Exemple #4
0
static void
unity_init(struct SupportModule *self, int width, int height, const char *home)
{
    global = GLOBAL_M;

    system("export MALLOC_CHECK_=0"); //<unit? or who? does something weird on the pandora ...

    MODULE_DEBUG_PRINTF("JNI_OnLoad\n");
    self->priv->JNI_OnLoad_libunity(VM_M,0);
    MODULE_DEBUG_PRINTF("JNI_OnLoad done.\n");


    MODULE_DEBUG_PRINTF("nativeInit\n");
    self->priv->nativeInit(ENV_M,GLOBAL_M,width,height);
    MODULE_DEBUG_PRINTF("nativeInit done\n");

    MODULE_DEBUG_PRINTF("unityAndroidInit\n");
    jstring bin = GLOBAL_M->env->NewStringUTF(ENV_M,"assets/bin/");
    jstring lib = GLOBAL_M->env->NewStringUTF(ENV_M,"./lib/");//strcat(home,"lib/"));
    self->priv->unityAndroidInit(ENV_M,GLOBAL_M,bin,lib);
    MODULE_DEBUG_PRINTF("unityAndroidInitDone\n");


    MODULE_DEBUG_PRINTF("nativeFile\n");
    jstring file = GLOBAL_M->env->NewStringUTF(ENV_M,global->apk_filename);
    self->priv->nativeFile(ENV_M,GLOBAL_M,file);
    MODULE_DEBUG_PRINTF("nativeFile done\n");

}
Exemple #5
0
const char *
JNIEnv_GetStringUTFChars(JNIEnv *env, jstring string, jboolean *isCopy)
{
    MODULE_DEBUG_PRINTF("JNIEnv_GetStringUTFChars(%x)\n", string);
    if (string == GLOBAL_J(env)) {
        MODULE_DEBUG_PRINTF("WARNING: GetStringUTFChars on global\n");
        return NULL;
    }
    if (string == NULL) {
        return strdup("");
    }
    struct dummy_jstring *str = (struct dummy_jstring*)string;
    MODULE_DEBUG_PRINTF(" \\-> %s\n", str->data);
    return str->data;
}
Exemple #6
0
/* CallVoidMethodV override. Signal when to start or stop audio */
void
JNIEnv_CallVoidMethodV(JNIEnv* p0, jobject p1, jmethodID p2, va_list p3)
{
    MODULE_DEBUG_PRINTF("module_JNIEnv_CallVoidMethodV(%x, %s, %s)\n", p1, p2->name, p2->sig);
    if (strcmp(p2->name, "startOutput") == 0)
    {
        MODULE_DEBUG_PRINTF("Start audio Output\n");
        SDL_PauseAudio(0);
    }
    if (strcmp(p2->name, "stopOutput") == 0)
    {
        // Stop output :)
        MODULE_DEBUG_PRINTF("Stop audio Output\n");
        SDL_PauseAudio(1);
    }
}
Exemple #7
0
/* CallVoidMethodV override. Signal when to start or stop audio */
void
angrybirds_jnienv_CallVoidMethodV(JNIEnv* p0, jobject p1, jmethodID p2, va_list p3)
{
    MODULE_DEBUG_PRINTF("module_angrybirds_jnienv_CallVoidMethodV(%x, %s, %s)\n", p1, p2->name, p2->sig);
    if (strcmp(p2->name, "startOutput") == 0)
    {
        MODULE_DEBUG_PRINTF("Start audio Output\n");
        apkenv_audio_play();
    }
    if (strcmp(p2->name, "stopOutput") == 0)
    {
        // Stop output :)
        MODULE_DEBUG_PRINTF("Stop audio Output\n");
        apkenv_audio_pause();
    }
}
Exemple #8
0
jobject
JNIEnv_NewGlobalRef(JNIEnv* p0, jobject p1)
{
    MODULE_DEBUG_PRINTF("JNIEnv_NewGlobalRef(%x)\n", p1);
    if (p1==NULL) {
        struct dummy_jclass* cls = malloc(sizeof(struct dummy_jclass));
        cls->name = "null";

        dummy_jobject* obj = malloc(sizeof(dummy_jobject));
        obj->clazz = cls;
        obj->field = NULL;
        MODULE_DEBUG_PRINTF("JNIEnv_NewGlobalRef(%x) -> %x\n", p1, obj);
        return obj;
    }
    //dummy_jobject
    return NULL;
}
Exemple #9
0
/* Load all SFX into memory */
void
load_sound_callback(const char *filename, char *buffer, size_t size)
{
    char* fname = strrchr (filename, '/') + 1;
    MODULE_DEBUG_PRINTF("module: Load sound: %s\n", fname);
    SFX[SoundCount].name = strdup(fname);

    SFX[SoundCount].sound = apkenv_mixer_load_sound_buffer(buffer, size);
    SoundCount++;
}
Exemple #10
0
jclass JNIEnv_GetObjectClass(JNIEnv *p0, jobject p1)
{
    MODULE_DEBUG_PRINTF("GetObjectClass %x\n",p1);
    if (p1!=NULL)
    {
        dummy_jobject* obj = p1;
        return obj->clazz;
    }
    return NULL;
}
Exemple #11
0
jobject JNIEnv_CallObjectMethod(JNIEnv* env, jobject p1, jmethodID p2, ...)
{
    MODULE_DEBUG_PRINTF("CallObjectMethod %x %x\n",p1,p2);

    //dummy_jobject* obj = p1;
    jmethodID method = p2;

    if (strcmp(method->name,"getPackageCodePath")==0)
        return (*env)->NewStringUTF(env, GLOBAL_J(env)->apk_filename);

    return NULL;
}
Exemple #12
0
jobject
worldofgoo_CallObjectMethodV(JNIEnv *env, jobject p1, jmethodID p2, va_list p3)
{
    MODULE_DEBUG_PRINTF("worldofgoo_CallObjectMethodV %x %s\n", p1, p2->name);
    if (strcmp(p2->name, "getApkPath") == 0) {
        return (*env)->NewStringUTF(env, GLOBAL_J(env)->apk_filename);
    } else if (strcmp(p2->name, "getExternalStoragePath") == 0) {
        return (*env)->NewStringUTF(env, worldofgoo_priv.home_directory);
    } else if (strcmp(p2->name, "getInternalStoragePath") == 0) {
        return (*env)->NewStringUTF(env, worldofgoo_priv.home_directory);
    } else if (strcmp(p2->name, "getLanguage") == 0) {
        return (*env)->NewStringUTF(env, "");
    } else if (strcmp(p2->name, "playSound") == 0) {
        struct dummy_jstring *name = va_arg(p3, struct dummy_jstring *);
        int loop = va_arg(p3, int);
        double volume = va_arg(p3, double);
        void *ret;
        MODULE_DEBUG_PRINTF("playSound '%s', %d, %f\n", name->data, loop, volume);
        ret = play_sound(name->data, loop, volume);
        MODULE_DEBUG_PRINTF(" = %p\n", ret);
        return ret;
    } else {
Exemple #13
0
jobject JNIEnv_GetStaticObjectField(JNIEnv *p0, jclass p1, jfieldID p2)
{
    struct dummy_jclass* cls = p1;
    struct _jfieldID* fld = (void *)p2;

    MODULE_DEBUG_PRINTF("GetStaticObjectField %s, %s, %s\n", cls->name, fld->name, fld->sig);

    dummy_jobject* obj = malloc(sizeof(dummy_jobject));
    obj->clazz = cls;
    obj->field = p2;

    return obj;
}
Exemple #14
0
jfieldID JNIEnv_GetStaticFieldID(JNIEnv *p0, jclass p1, const char *p2, const char *p3)
{
    struct dummy_jclass* cls = (struct dummy_jclass*)p1;
    MODULE_DEBUG_PRINTF("GetStaticFieldID %s %s %s\n", cls->name, p2, p3);

    struct _jfieldID* field = malloc(sizeof(struct _jfieldID));

    field->clazz = p1;
    field->name = strdup(p2);
    field->sig = strdup(p3);

    return (jfieldID)field;
}
Exemple #15
0
jint
JNIEnv_RegisterNatives(JNIEnv* p0, jclass p1, const JNINativeMethod* p2, jint p3)
{
    MODULE_DEBUG_PRINTF("JNIEnv_RegisterNatives()\n");

    struct dummy_jclass *clazz = (struct dummy_jclass*)p1;
    MODULE_DEBUG_PRINTF("\n\tClass: %s\n", clazz->name);

    int is_unity_player = strcmp(clazz->name,UNITYPLAYER_CLASS_NAME)==0;
    int is_player_prefs = strcmp(clazz->name,PLAYERPREFS_CLASS_NAME)==0;

    int i=0;
    const JNINativeMethod *method = p2;
    while (i<p3) {
        MODULE_DEBUG_PRINTF("\tName: %-20s Sig: %-10s Addr: %x\n", method->name, method->signature, method->fnPtr);

        if (is_unity_player) {

            if (method_is(nativeInit)) { unity_priv.nativeInit = (unity_nativeInit_t)method->fnPtr;} else
            if (method_is(nativeFile)) { unity_priv.nativeFile = (unity_nativeFile_t)method->fnPtr;} else
            if (method_is(nativeRender)) { unity_priv.nativeRender = (unity_nativeRender_t)method->fnPtr;} else
            if (method_is(initJni)) { unity_priv.initJni = (unity_initJni_t)method->fnPtr;} else
            if (method_is(unityAndroidInit)) { unity_priv.unityAndroidInit = (unity_androidinit_t)method->fnPtr;} else
            if (method_is(unityAndroidPrepareGameLoop)) {unity_priv.unityAndroidPrepareGameLoop = (unity_androidpreparegameloop_t)method->fnPtr;} else
            ;
        } else if (is_player_prefs) {

            if (method_is(InitPlayerPrefs)) { unity_priv.InitPlayerPrefs = (unity_InitPlayerPrefs_t)method->fnPtr;} else
            ;
        }

        method++;
        i++;
    }
    MODULE_DEBUG_PRINTF("\n");

    return 0;
}
Exemple #16
0
/* NewObjectV override. Initialize audio output */
jobject
angrybirds_jnienv_NewObjectV(JNIEnv *env, jclass p1, jmethodID p2, va_list p3)
{
    struct dummy_jclass *clazz = p1;
    MODULE_DEBUG_PRINTF("module_angrybirds_jnienv_NewObjectV(%x, %s, %s)\n", p1, p2->name, clazz->name);
    if (strcmp(clazz->name, "com/rovio/ka3d/AudioOutput") == 0)
    {
        /* Open the audio device */
        audioHandle = va_arg(p3, jlong);

        int freq = va_arg(p3, int);
        enum AudioFormat format = AudioFormat_S16SYS;
        int channels = va_arg(p3, int);
        jint bitrate = va_arg(p3, int);
        int samples = va_arg(p3, int) / 8;

        apkenv_audio_open(freq, format, channels, samples, my_audio_callback, NULL);
    }
Exemple #17
0
jobject
JNIEnv_CallStaticObjectMethod(JNIEnv* env, jclass p1, jmethodID p2, ...)
{
    struct dummy_jclass* clazz = p1;
    jmethodID method = p2;

    MODULE_DEBUG_PRINTF("JNIEnv_CallStaticObjectMethod(%s,%s)\n",clazz->name,method->name);

    if (strcmp(method->name,"getProperty")==0) {
        //jstring property = va_arg(p3,jstring);
        //const char* prop = (*env)->
        //dummy_jobject* obj = malloc(sizeof(dummy_jobject));
        //return obj;
        return (*env)->NewStringUTF(env, GLOBAL_J(env)->apk_filename);
    }
    else
    if (strcmp(method->name,"getPackageCodePath")==0) {
        return (*env)->NewStringUTF(env, GLOBAL_J(env)->apk_filename);
    }

    return NULL;
}
Exemple #18
0
static void
unity_init(struct SupportModule *self, int width, int height, const char *home)
{
    global = GLOBAL_M;

    system("export MALLOC_CHECK_=0"); //<unit? or who? does something weird on the pandora ...

    MODULE_DEBUG_PRINTF("JNI_OnLoad\n");
    self->priv->JNI_OnLoad_libunity(VM_M,0);
    MODULE_DEBUG_PRINTF("JNI_OnLoad done.\n");

    self->priv->nativeInit = jnienv_find_native_method(UNITYPLAYER_CLASS_NAME, "nativeInit");
    self->priv->nativeFile = jnienv_find_native_method(UNITYPLAYER_CLASS_NAME, "nativeFile");
    self->priv->nativeRender = jnienv_find_native_method(UNITYPLAYER_CLASS_NAME, "nativeRender");
    self->priv->initJni = jnienv_find_native_method(UNITYPLAYER_CLASS_NAME, "initJni");
    self->priv->unityAndroidInit = jnienv_find_native_method(UNITYPLAYER_CLASS_NAME, "unityAndroidInit");
    self->priv->unityAndroidPrepareGameLoop = jnienv_find_native_method(UNITYPLAYER_CLASS_NAME, "unityAndroidPrepareGameLoop");
    self->priv->InitPlayerPrefs = jnienv_find_native_method(PLAYERPREFS_CLASS_NAME, "InitPlayerPrefs");

    MODULE_DEBUG_PRINTF("nativeInit\n");
    self->priv->nativeInit(ENV_M,GLOBAL_M,width,height);
    MODULE_DEBUG_PRINTF("nativeInit done\n");

    MODULE_DEBUG_PRINTF("unityAndroidInit\n");
    jstring bin = GLOBAL_M->env->NewStringUTF(ENV_M,"assets/bin/");
    jstring lib = GLOBAL_M->env->NewStringUTF(ENV_M,"./lib/");//strcat(home,"lib/"));
    self->priv->unityAndroidInit(ENV_M,GLOBAL_M,bin,lib);
    MODULE_DEBUG_PRINTF("unityAndroidInitDone\n");


    MODULE_DEBUG_PRINTF("nativeFile\n");
    jstring file = GLOBAL_M->env->NewStringUTF(ENV_M,global->apk_filename);
    self->priv->nativeFile(ENV_M,GLOBAL_M,file);
    MODULE_DEBUG_PRINTF("nativeFile done\n");

}
Exemple #19
0
static void
load_preferences()
{
    int i;
    char tmp[PATH_MAX];
    strcpy(tmp,cuttherope_priv.home);
    strcat(tmp,PREFERENCES_FILENAME);

    memset(cuttherope_priv.keyvalues,0,sizeof(cuttherope_priv.keyvalues));

    FILE* fp = fopen(tmp,"rb");
    if (!fp)
        return;

    for (i=0; i<MAX_KEYVALUES;i++) {
        KeyValue kv;
        if(fread(&kv,sizeof(KeyValue),1,fp)!=1)
            break;
        cuttherope_priv.keyvalues[i] = kv;
        MODULE_DEBUG_PRINTF("Loaded key=%s value=%d\n",kv.key,kv.value);
    }
    fclose(fp);
}
Exemple #20
0
static void
load_sound(const char *filename)
{
    const struct ZipFileIndex *zip_index = NULL;
    struct player_sound *sound;
    unsigned long hash;
    const char *mem;
    int loaded = 0;
    int i;

    hash = crc32(0, (void *)filename, strlen(filename));
    hash %= sizeof(sounds) / sizeof(sounds[0]);
    for (sound = sounds[hash]; sound != NULL; sound = sound->next) {
        if (strcmp(filename, sound->filename) == 0)
            break;
    }

    if (sound != NULL) {
        fprintf(stderr, "load_sound: %s already loaded?\n", filename);
        return;
    }

    for (i = 0; i < apk_index_pos; i++) {
        if (strstr(apk_index[i].filename, filename) != NULL) {
            zip_index = &apk_index[i];
            break;
        }
    }

    if (zip_index == NULL) {
        fprintf(stderr, "load_sound: %s not in apk?\n", filename);
        return;
    }

    sound = calloc(1, sizeof(*sound));
    if (sound == NULL)
        return;

    sound->filename = strdup(filename);
    mem = (const char *)worldofgoo_priv.apk_in_mem + zip_index->offset;
    if (strstr(filename, "music/") != NULL) {
        sound->music = apkenv_mixer_load_music_buffer((void*)mem, zip_index->length);
        loaded = (sound->music != NULL);
    } else {
        sound->chunk = apkenv_mixer_load_sound_buffer((void*)mem, zip_index->length);
        apkenv_mixer_set_sound_channel(sound->chunk, -1);
        if (sound->chunk != NULL) {
            loaded = 1;
            /* SDL_mixer can't resample 44100 to 32000 Hz :( */
            if (strncmp(mem, "OggS", 4) == 0 && *(unsigned short *)(mem + 0x28) == 44100)
                apkenv_mixer_sound_lame_resample_44100_32000(sound->chunk);
        }
    }
    if (loaded) {
        MODULE_DEBUG_PRINTF("loaded %s\n", filename);

        sound->next = sounds[hash];
        sounds[hash] = sound;
    } else {
        fprintf(stderr, "failed to load %s\n", filename);
        free(sound);
    }
}