From ecc1309a04b527c62ffe97e814daf050dbd025cd Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Sat, 17 Aug 2019 04:13:32 -0400
Subject: [PATCH] Skin shader + material panel fix.

---
 Grafreed.java |  144 ++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 133 insertions(+), 11 deletions(-)

diff --git a/Grafreed.java b/Grafreed.java
index 4f0341c..99344db 100644
--- a/Grafreed.java
+++ b/Grafreed.java
@@ -49,6 +49,79 @@
             
         }
     }
+
+    public static String RemovePrefix(String s, String prefix)
+    {
+        if (s != null && prefix != null && s.startsWith(prefix))
+        {
+            return s.substring(prefix.length());
+        }
+
+        return s;
+    }
+    
+    static void ParseFileSystem(java.io.File dir, iResourceCallBack callback, String prefix)
+    {
+        callback.ResourceCallBack(RemovePrefix(dir.toString(),prefix).split("/"));
+        File[] listFiles = dir.listFiles();
+        if (listFiles != null)
+        {
+            for (java.io.File file : listFiles)
+            {
+                ParseFileSystem(file, callback, prefix);
+            }
+        }
+    }
+        
+    static interface iResourceCallBack
+    {
+        void ResourceCallBack(String[] path);
+    }
+    
+    static void ParseResources(String path, iResourceCallBack callback)
+    {
+        java.io.File jarFile = new java.io.File(Grafreed.class.getProtectionDomain().getCodeSource().getLocation().getPath());
+
+        if (jarFile.isFile())
+        {
+            // Run with JAR file
+            try
+            {
+                java.util.jar.JarFile jar = new java.util.jar.JarFile(jarFile);
+                java.util.Enumeration<java.util.jar.JarEntry> entries = jar.entries(); //gives ALL entries in jar
+                while (entries.hasMoreElements())
+                {
+                    String name = entries.nextElement().getName();
+                    
+                    if (name.startsWith(path + "/"))
+                        callback.ResourceCallBack(RemovePrefix(name, path + "/").split("/"));
+                }
+                jar.close();
+            } catch (Exception ex)
+            {
+                ex.printStackTrace();
+            }
+        } else
+        {
+            // Run with IDE
+            final java.net.URL url = Object3D.class.getResource("/" + path);
+            if (url != null)
+            {
+                try
+                {
+                    java.io.File apps = new java.io.File(url.toURI());
+                    ParseFileSystem(apps, callback, RemovePrefix(url.toString() + "/", "file:"));
+//                    for (java.io.File app : apps.listFiles())
+//                    {
+//                        //System.out.println(RemovePrefix(app.toString(), RemovePrefix(url.toString(), "file:") + "/"));
+//                    }
+                } catch (Exception ex)
+                {
+                    ex.printStackTrace();
+                }
+            }
+        }
+    }
     
     public void init()
     {
@@ -58,7 +131,7 @@
         universe.material = new cMaterial();
         //god.addChild(universe);
         universe.name = "Applet";
-        grafreeD = this;
+        grafreed = this;
     }
 
     /**/
@@ -603,7 +676,8 @@
     
     public static void main(String argv[])
     {
-                String osArch = System.getProperty("os.arch");
+         String osArch = System.getProperty("os.arch");
+        if (Globals.DEBUG)
                 System.out.println("os.arch = " + osArch);
                 
         if (argv.length == 0)
@@ -626,12 +700,12 @@
 
                         System.out.println("jarfile = " + jarfile);
                         
-            String command = javaPath + " -Xmx2048m -Djava.library.path=" + jarpath;
+            String command = javaPath + " -Xmx1024m -Djava.library.path=" + jarpath;
             
             // -Djava.library.path=/Users/nbriere/Projects/shared/lib
         if (jarfile.charAt(2) == ':')
         {
-            command = "\"" + javaPath + "\" -Xmx2048m -Djava.library.path=" + jarpath;
+            command = "\"" + javaPath + "\" -Xmx1024m -Djava.library.path=" + jarpath;
                 // On Windows systems, the path is /C:/
                 jarfile = jarfile.substring(1, jarfile.length());
                 System.out.println("jarfile = " + jarfile);
@@ -849,19 +923,67 @@
         
         //Monitor mon=MonitorFactory.start("myFirstMonitor");
         standAlone = true;
-        grafreeD = new Grafreed();
-        grafreeD.universe = new cGroup();
-        grafreeD.universe.name = "Grafreed";
-        grafreeD.universe.material = new cMaterial();
+        grafreed = new Grafreed();
+        grafreed.materials = ReadGFD(grafreed.getClass().getClassLoader().getResourceAsStream("gfd/materials.gfd"));
+        
+        grafreed.universe = new cGroup();
+        grafreed.universe.name = "Grafreed";
+        grafreed.universe.material = new cMaterial();
+        grafreed.universe.skyboxname = "cubemaps/penguins-skyboxes/yonder";
+        grafreed.universe.skyboxext = "jpg";
+        
         //   theApplet3D.universe.textures = CameraPane.DEFAULT_TEXTURE;
 
-        grafreeD.universe.root = true;
-        grafreeD.universe.openEditWindow(null, true); //, true);
+        grafreed.universe.root = true;
+        grafreed.universe.openEditWindow(null, true); //, true);
         //mon.stop();
         //System.out.println(mon);
         //timeflow.app.TimeflowAppLauncher.GetTimeFlow();
+        
+        javax.swing.ToolTipManager.sharedInstance().setEnabled(Globals.TOOLTIPS);
     }
 
+    static Object3D materials;
+    
+    static Object3D ReadGFD(java.io.InputStream istream)
+    {
+        Object3D readobj = null;
+        
+        try
+        {
+            // Try compressed version first.
+            java.util.zip.GZIPInputStream zstream = new java.util.zip.GZIPInputStream(istream);
+            java.io.ObjectInputStream p = new java.io.ObjectInputStream(zstream);
+
+            readobj = (Object3D) p.readObject();
+            p.close();
+            zstream.close();
+            istream.close();
+
+            readobj.ResetDisplayList();
+        } catch (Exception e)
+        {
+            if (!e.toString().contains("GZIP"))
+                e.printStackTrace();
+            
+            try
+            {
+                java.io.ObjectInputStream p = new java.io.ObjectInputStream(istream);
+
+                readobj = (Object3D) p.readObject();
+                p.close();
+                istream.close();
+
+                readobj.ResetDisplayList();
+            } catch (Exception e2)
+            {
+                e2.printStackTrace();
+            }
+        }
+        
+        return readobj;
+    }
+    
     // Timer callback
     public void actionPerformed(ActionEvent e)
     {
@@ -1085,7 +1207,7 @@
         } while (avail > 0 && numRead >= 0);
         return new String(data, 0, pos, "US-ASCII");
     }
-    public static Grafreed grafreeD;
+    public static Grafreed grafreed;
     public static boolean standAlone = true;
     public Composite universe;
     public static Object3D clipboard = new Object3D();

--
Gitblit v1.6.2