Sfoglia il codice sorgente

iOS Support:
- fix iOS support


Former-commit-id: 636cdd617efa49db2150f0a921d02e2d53772f28

normen667 12 anni fa
parent
commit
e0b1fa970a

+ 3 - 28
ios-data/templates/project/jme-ios/jmeAppDelegate.m

@@ -53,32 +53,7 @@ getEnv(JavaVM* vm)
     void* env;
     JNI_CreateJavaVM(&vm, &env, &vmArgs);
     JNIEnv* e = (JNIEnv*) env;
-    
-    /**
-     * jME Application initilization.
-     **/
-    jclass mainClass = (*e)->FindClass(e, "mygame.Main");
-    if (! (*e)->ExceptionCheck(e)) {
-        jmethodID mainConstructor = (*e)->GetMethodID(e, mainClass, "<init>", "()V");
-        if (! (*e)->ExceptionCheck(e)) {
-            jobject mainObject = (*e)->NewObject(e, mainClass, mainConstructor);
-            if (! (*e)->ExceptionCheck(e)) {
-                self.app = mainObject;
-                (*e)->NewGlobalRef(e, mainObject);
-            }else{
-                NSLog(@"Could not create new Application object");
-                (*e)->ExceptionDescribe(e);
-                (*e)->ExceptionClear(e);
-                return NO;
-            }
-        }else{
-            NSLog(@"Could not find Application constructor");
-            (*e)->ExceptionDescribe(e);
-            (*e)->ExceptionClear(e);
-            return NO;
-        }
-    }else{
-        NSLog(@"Could not find Application main class");
+    if ((*e)->ExceptionCheck(e)) {
         (*e)->ExceptionDescribe(e);
         (*e)->ExceptionClear(e);
         return NO;
@@ -90,9 +65,9 @@ getEnv(JavaVM* vm)
      **/
     jclass harnessClass = (*e)->FindClass(e, "JmeAppHarness");
     if (! (*e)->ExceptionCheck(e)) {
-        jmethodID harnessConstructor = (*e)->GetMethodID(e, harnessClass, "<init>", "(Lcom/jme3/app/Application;)V");
+        jmethodID harnessConstructor = (*e)->GetMethodID(e, harnessClass, "<init>", "(J)V");
         if (! (*e)->ExceptionCheck(e)) {
-            jobject harnessObject = (*e)->NewObject(e, harnessClass, harnessConstructor, self.app);
+            jobject harnessObject = (*e)->NewObject(e, harnessClass, harnessConstructor, (jlong)self);
             if (! (*e)->ExceptionCheck(e)) {
                 self.harness = harnessObject;
                 (*e)->NewGlobalRef(e, harnessObject);

+ 10 - 7
ios-data/templates/src/JmeAppHarness.java

@@ -1,4 +1,4 @@
-import com.jme3.app.Application;
+import com.jme3.system.AppSettings;
 import com.jme3.system.ios.IosHarness;
 
 /**
@@ -15,25 +15,28 @@ public class JmeAppHarness extends IosHarness{
      * You can e.g. attach special AppStates or do similar things here. You can
      * access classes from this source directory as well as your main projects
      * sources and classpath.
-     * @param app The application object that has been created
      */
-    public JmeAppHarness(Application app) {
-        super(app);
+    public JmeAppHarness(long id) {
+        super(id);
+        app = new ${main.class}();
+        AppSettings settings = new AppSettings(true);
+        settings.setRenderer(null);
+        settings.setAudioRenderer(null);
+        this.app.setSettings(settings);
+        app.start();
     }
 
     @Override
     public void appPaused() {
-        super.appPaused();
     }
 
     @Override
     public void appReactivated() {
-        super.appReactivated();
     }
 
     @Override
     public void appClosed() {
-        super.appClosed();
+        app.stop();
     }
     
     /**

+ 1 - 1
nbproject/project.xml

@@ -12,7 +12,7 @@
                     <compile-dependency/>
                     <run-dependency>
                         <release-version>1</release-version>
-                        <specification-version>3.0.0.9921</specification-version>
+                        <specification-version>3.0.0</specification-version>
                     </run-dependency>
                 </dependency>
                 <dependency>

BIN
src/com/jme3/gde/ios/ios-data.zip


+ 35 - 1
src/com/jme3/gde/ios/panel/IosCompositeProvider.java

@@ -37,7 +37,12 @@ import com.jme3.gde.core.j2seproject.ProjectExtensionProperties;
 import com.jme3.gde.core.util.ZipExtensionTool;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.io.BufferedWriter;
 import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import javax.swing.JComponent;
 
 import org.netbeans.api.project.Project;
@@ -56,6 +61,7 @@ import org.openide.util.NbBundle;
 @ProjectCustomizer.CompositeCategoryProvider.Registration(projectType = "org-netbeans-modules-java-j2seproject", category = "Application", position = 410)
 public class IosCompositeProvider implements ProjectCustomizer.CompositeCategoryProvider {
 
+    private static final Logger logger = Logger.getLogger(IosCompositeProvider.class.getName());
     private static final String CAT_MOBILE = "iOSDeployment"; // NOI18N
     private static ProjectExtensionProperties jwsProps = null;
     private String[] keyList = new String[]{
@@ -131,8 +137,9 @@ public class IosCompositeProvider implements ProjectCustomizer.CompositeCategory
                     try {
                         iosFolder = project.getProjectDirectory().createFolder("ios");
                         projFolder.copy(iosFolder, projFolder.getName(), null);
-                        srcFolder.copy(iosFolder, srcFolder.getName(), null);
                         propsFile.copy(iosFolder, propsFile.getName(), propsFile.getExt());
+                        FileObject newSrcFolder = srcFolder.copy(iosFolder, srcFolder.getName(), null);
+                        replaceHarnessData(newSrcFolder, properties);
                     } catch (IOException ex) {
                         showError("Error creating iOS folders", ex);
                         return;
@@ -162,6 +169,33 @@ public class IosCompositeProvider implements ProjectCustomizer.CompositeCategory
                 Exceptions.printStackTrace(ioe);
             }
         }
+
+        private void replaceHarnessData(FileObject newSrcFolder, ProjectExtensionProperties properties) throws IOException {
+            //replace harness data
+            FileObject appHarnessFile = newSrcFolder.getFileObject("JmeAppHarness.java");
+            String text = appHarnessFile.asText();
+            String mainClass = properties.getProperty("main.class");
+            if (text == null || mainClass == null) {
+                logger.log(Level.INFO, "Could not replace harness data in folder {0}, file {4}, text = [{1}], mainClass = [{2}]", new Object[]{newSrcFolder, text, mainClass, appHarnessFile});
+                return;
+            }
+            text = text.replace("${main.class}", mainClass);
+            OutputStream out = appHarnessFile.getOutputStream();
+            BufferedWriter wrt = null;
+            try {
+                wrt = new BufferedWriter(new OutputStreamWriter(out));
+                wrt.write(text, 0, text.length());
+            } catch (IOException ey) {
+                Exceptions.printStackTrace(ey);
+            } finally {
+                if (wrt != null) {
+                    wrt.close();
+                }
+                if (out != null) {
+                    out.close();
+                }
+            }
+        }
     }
 
     private void showError(String message, Exception ex) {