Browse Source

Added refresh functions to repopulate technique UI list dropdowns

Eugene 9 years ago
parent
commit
bfad9471ce
1 changed files with 69 additions and 39 deletions
  1. 69 39
      Script/AtomicEditor/ui/frames/inspector/MaterialInspector.ts

+ 69 - 39
Script/AtomicEditor/ui/frames/inspector/MaterialInspector.ts

@@ -52,25 +52,7 @@ lightmapSource.addItem(new Atomic.UIMenuItem("Lightmap", "Lightmap"));
 lightmapSource.addItem(new Atomic.UIMenuItem("Lightmap Alpha", "Lightmap Alpha"));
 
 var projectSource = new Atomic.UIMenuItemSource();
-var subFolderSource = new Atomic.UIMenuItemSource();
-
-var _ = new Atomic.UIMenuItem("Solid");
-_.subSource = solidSource;
-techniqueSource.addItem(_);
-
-_ = new Atomic.UIMenuItem("Transparency");
-_.subSource = tranSource;
-techniqueSource.addItem(_);
-
-_ = new Atomic.UIMenuItem("Lightmap");
-_.subSource = lightmapSource;
-techniqueSource.addItem(_);
-
-_ = new Atomic.UIMenuItem("Project");
-_.subSource = projectSource;
-techniqueSource.addItem(_);
-
-
+var _ = new Atomic.UIMenuItem();
 
 var techniqueLookup = {
     "Techniques/Diff.xml": "Diffuse",
@@ -88,9 +70,7 @@ var techniqueLookup = {
 };
 
 var techniqueReverseLookup = {};
-
 var projectTechniques = {};
-
 var projectTechniquesAddress = {};
 
 for (var key in techniqueLookup) {
@@ -99,7 +79,6 @@ for (var key in techniqueLookup) {
 
 }
 
-
 class MaterialInspector extends ScriptWidget {
 
     currentTexture: Atomic.UITextureWidget = null;
@@ -114,6 +93,7 @@ class MaterialInspector extends ScriptWidget {
         this.fd.size = 11;
 
         this.subscribeToEvent(EditorEvents.RemoveCurrentAssetAssigned, (ev: EditorEvents.RemoveCurrentAssetAssignedEvent) => this.createTextureRemoveButtonCallback(this.tunit, this.textureWidget));
+        this.subscribeToEvent("ResourceAdded", (ev: ToolCore.ResourceAddedEvent) => this.refreshTechniquesPopup());
     }
 
     createShaderParametersSection(): Atomic.UISection {
@@ -173,12 +153,8 @@ class MaterialInspector extends ScriptWidget {
             attrsVerticalLayout.addChild(attrLayout);
 
             // print(params[i].name, " : ", params[i].value, " : ", params[i].type);
-
         }
-
-
         return section;
-
     }
 
     getTextureThumbnail(texture: Atomic.Texture): Atomic.Texture {
@@ -212,13 +188,12 @@ class MaterialInspector extends ScriptWidget {
         var resourcePath = ToolCore.toolSystem.project.getResourcePath();
 
         if (technique == null)
-
             var techniquePath;
 
-        for (var tech in projectTechniques) {
+        for (var i in projectTechniques) {
 
-            if (techniqueName == projectTechniques[tech]) {
-                techniquePath = projectTechniquesAddress[tech];
+            if (techniqueName == projectTechniques[i]) {
+                techniquePath = projectTechniquesAddress[i];
                 break;
             }
         }
@@ -230,9 +205,7 @@ class MaterialInspector extends ScriptWidget {
 
     createTechniquePopup(): Atomic.UIWidget {
 
-        projectSource.clear();
-        var resourcesPath = ToolCore.toolSystem.project.getResourcePath();
-        this.loadProjectTechniques(resourcesPath + "Techniques", projectSource);
+        this.refreshTechniquesPopup();
 
         var button = this.techniqueButton = new Atomic.UIButton();
         var technique = this.material.getTechnique(0);
@@ -290,7 +263,6 @@ class MaterialInspector extends ScriptWidget {
 
     }
 
-
     openTextureSelectionBox(textureUnit: number, textureWidget: Atomic.UITextureWidget) {
 
         var inspector = this;
@@ -453,12 +425,15 @@ class MaterialInspector extends ScriptWidget {
             var asset = TechniqueAssets[i];
             if (TechniqueAssets[i].isFolder()) {
 
-                var subfoldersource = new Atomic.UIMenuItemSource();
-                _ = new Atomic.UIMenuItem(TechniqueAssets[i].name);
-                _.subSource = subfoldersource;
-                menuItem.addItem(_);
+                if (this.scanDirectoryForTechniques(asset.path)) {
+
+                    var subfoldersource = new Atomic.UIMenuItemSource();
+                    _ = new Atomic.UIMenuItem(TechniqueAssets[i].name);
+                    _.subSource = subfoldersource;
+                    menuItem.addItem(_);
 
-                this.loadProjectTechniques(asset.path, subfoldersource);
+                    this.loadProjectTechniques(asset.path, subfoldersource);
+                }
             }
             else {
                 projectTechniques[i] = TechniqueAssets[i].name;
@@ -468,6 +443,61 @@ class MaterialInspector extends ScriptWidget {
         }
     }
 
+    scanDirectoryForTechniques(directory: string): boolean {
+
+        var techniqueFound = false;
+
+        var techniqueAssets = ToolCore.getAssetDatabase().getFolderAssets(directory);
+
+        for (var i in techniqueAssets) {
+
+            var asset = techniqueAssets[i];
+
+            if (techniqueAssets[i].isFolder()) {
+                if (this.scanDirectoryForTechniques(asset.path)) {
+                    return true;
+                }
+            }
+            else if (techniqueAssets[i].getExtension() == ".xml") {
+                techniqueFound = true;
+                return true;
+            }
+        }
+        return false;
+    }
+
+    refreshTechniquesPopup() {
+
+        techniqueSource.clear();
+
+        _ = new Atomic.UIMenuItem("Solid");
+        _.subSource = solidSource;
+        techniqueSource.addItem(_);
+
+        _ = new Atomic.UIMenuItem("Transparency");
+        _.subSource = tranSource;
+        techniqueSource.addItem(_);
+
+        _ = new Atomic.UIMenuItem("Lightmap");
+        _.subSource = lightmapSource;
+        techniqueSource.addItem(_);
+
+        var projectTechniquesPath = ToolCore.toolSystem.project.getResourcePath() + "Techniques";
+
+        if (Atomic.fileSystem.dirExists(projectTechniquesPath )) {
+            if (this.scanDirectoryForTechniques(projectTechniquesPath)) {
+
+                projectSource.clear();
+
+                _ = new Atomic.UIMenuItem("Project");
+                _.subSource = projectSource;
+                techniqueSource.addItem(_);
+
+                this.loadProjectTechniques(projectTechniquesPath, projectSource);
+            }
+        }
+    }
+
     inspect(asset: ToolCore.Asset, material: Atomic.Material) {
         // Add folders to resource directory