ソースを参照

Merge pull request #247 from Areloch/AssetEditorImprovements

Various improvements, fixes and enhancements to Asset editor stuffs
Brian Roberts 5 年 前
コミット
56233410cf
42 ファイル変更1718 行追加1109 行削除
  1. BIN
      Templates/BaseGame/game/tools/assetBrowser/art/checkbox.png
  2. BIN
      Templates/BaseGame/game/tools/assetBrowser/art/datablockIcon.png
  3. BIN
      Templates/BaseGame/game/tools/assetBrowser/art/folderIcon.png
  4. BIN
      Templates/BaseGame/game/tools/assetBrowser/art/gameObjectIcon.png
  5. BIN
      Templates/BaseGame/game/tools/assetBrowser/art/genericAssetIcon.png
  6. BIN
      Templates/BaseGame/game/tools/assetBrowser/art/looseFileIcon.png
  7. 98 97
      Templates/BaseGame/game/tools/assetBrowser/assetImportConfigs.xml
  8. 455 222
      Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui
  9. 124 0
      Templates/BaseGame/game/tools/assetBrowser/guis/createNewCollectionSet.gui
  10. 14 14
      Templates/BaseGame/game/tools/assetBrowser/guis/editAsset.gui
  11. 5 5
      Templates/BaseGame/game/tools/assetBrowser/guis/editModule.gui
  12. 25 4
      Templates/BaseGame/game/tools/assetBrowser/main.cs
  13. 5 0
      Templates/BaseGame/game/tools/assetBrowser/scripts/addModuleWindow.cs
  14. 726 142
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.cs
  15. 64 576
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetImport.cs
  16. 10 3
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetImportConfig.cs
  17. 3 3
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/cubemap.cs
  18. 38 6
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/datablockObjects.cs
  19. 1 1
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.cs
  20. 4 0
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/level.cs
  21. 14 0
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/looseFiles.cs
  22. 4 4
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.cs
  23. 14 0
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/prefab.cs
  24. 8 4
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.cs
  25. 20 4
      Templates/BaseGame/game/tools/assetBrowser/scripts/directoryHandling.cs
  26. 34 1
      Templates/BaseGame/game/tools/assetBrowser/scripts/editModule.cs
  27. 4 0
      Templates/BaseGame/game/tools/assetBrowser/scripts/looseFileAudit.cs
  28. 15 21
      Templates/BaseGame/game/tools/assetBrowser/scripts/popupMenus.cs
  29. 27 0
      Templates/BaseGame/game/tools/assetBrowser/scripts/profiles.cs
  30. 2 1
      Templates/BaseGame/game/tools/base/menuBar/menuBuilder.ed.cs
  31. 1 0
      Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.cs
  32. BIN
      Templates/BaseGame/game/tools/gui/images/stencilIcons/cross.png
  33. BIN
      Templates/BaseGame/game/tools/gui/images/stencilIcons/filter.png
  34. BIN
      Templates/BaseGame/game/tools/gui/images/stencilIcons/import.png
  35. BIN
      Templates/BaseGame/game/tools/gui/images/stencilIcons/menuGrid.png
  36. BIN
      Templates/BaseGame/game/tools/gui/images/stencilIcons/phone.png
  37. BIN
      Templates/BaseGame/game/tools/gui/images/stencilIcons/plus.png
  38. BIN
      Templates/BaseGame/game/tools/gui/images/stencilIcons/previous.png
  39. BIN
      Templates/BaseGame/game/tools/gui/images/stencilIcons/return.png
  40. BIN
      Templates/BaseGame/game/tools/gui/images/stencilIcons/warning.png
  41. BIN
      Templates/BaseGame/game/tools/gui/images/stencilIcons/zoom.png
  42. 3 1
      Templates/BaseGame/game/tools/gui/profiles.ed.cs

BIN
Templates/BaseGame/game/tools/assetBrowser/art/checkbox.png


BIN
Templates/BaseGame/game/tools/assetBrowser/art/datablockIcon.png


BIN
Templates/BaseGame/game/tools/assetBrowser/art/folderIcon.png


BIN
Templates/BaseGame/game/tools/assetBrowser/art/gameObjectIcon.png


BIN
Templates/BaseGame/game/tools/assetBrowser/art/genericAssetIcon.png


BIN
Templates/BaseGame/game/tools/assetBrowser/art/looseFileIcon.png


+ 98 - 97
Templates/BaseGame/game/tools/assetBrowser/assetImportConfigs.xml

@@ -1,137 +1,138 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <AssetImportSettings>
-    <Group name="NewTest">
-        <Group name="Materials">
-            <Setting name="ImportMaterials">1</Setting>
-            <Setting name="UseExistingMaterials">1</Setting>
-            <Setting name="CreateComposites">1</Setting>
-            <Setting name="UseDiffuseSuffixOnOriginImage">1</Setting>
-            <Setting name="PopulateMaterialMaps">1</Setting>
-        </Group>
-        <Group name="Meshes">
-            <Setting name="DoScaleOverride">0</Setting>
-            <Setting name="limitBoneWeights">0</Setting>
-            <Setting name="convertLeftHanded">0</Setting>
-            <Setting name="ScaleOverride">1</Setting>
-            <Setting name="JoinIdenticalVerts">0</Setting>
-            <Setting name="IgnoreNodeScale">0</Setting>
-            <Setting name="calcTangentSpace">0</Setting>
-            <Setting name="AdjustCenter">0</Setting>
-            <Setting name="AdjustFloor">0</Setting>
-            <Setting name="reverseWindingOrder">0</Setting>
-            <Setting name="removeRedundantMats">0</Setting>
-            <Setting name="ImportMesh">1</Setting>
-            <Setting name="CollapseSubmeshes">0</Setting>
-            <Setting name="DoUpAxisOverride">0</Setting>
-            <Setting name="genUVCoords">0</Setting>
-            <Setting name="LODType">TrailingNumber</Setting>
-            <Setting name="invertNormals">0</Setting>
-            <Setting name="TransformUVs">0</Setting>
-            <Setting name="flipUVCoords">0</Setting>
-            <Setting name="UpAxisOverride">Z_AXIS</Setting>
-            <Setting name="findInstances">0</Setting>
+    <Group name="DefaultConfig">
+        <Group name="Animations">
+            <Setting name="ImportAnimations">1</Setting>
+            <Setting name="SeparateAnimations">1</Setting>
         </Group>
         <Group name="Images">
-            <Setting name="NormalTypeSuffixes">_NORMAL,_NORM</Setting>
-            <Setting name="AOTypeSuffixes">_AO,_AMBIENT,_AMBIENTOCCLUSION</Setting>
+            <Setting name="Compressed">1</Setting>
             <Setting name="MetalnessTypeSuffixes">_METAL,_MET,_METALNESS,_METALLIC</Setting>
-            <Setting name="CompositeTypeSuffixes">_COMP,_COMPOSITE</Setting>
+            <Setting name="AOTypeSuffixes">_AO,_AMBIENT,_AMBIENTOCCLUSION</Setting>
+            <Setting name="IsHDR">0</Setting>
+            <Setting name="TextureFilteringMode">Bilinear</Setting>
             <Setting name="RoughnessTypeSuffixes">_ROUGH,_ROUGHNESS</Setting>
-            <Setting name="ImageType">N/A</Setting>
-            <Setting name="Compressed">1</Setting>
+            <Setting name="GenerateMaterialOnImport">1</Setting>
+            <Setting name="DiffuseTypeSuffixes">_ALBEDO,_DIFFUSE,_ALB,_DIF,_COLOR,_COL,_baseColor,_a,</Setting>
+            <Setting name="SmoothnessTypeSuffixes">_SMOOTH,_SMOOTHNESS</Setting>
+            <Setting name="CompositeTypeSuffixes">_COMP,_COMPOSITE</Setting>
             <Setting name="Scaling">1.0</Setting>
-            <Setting name="TextureFilteringMode">Bilinear</Setting>
-            <Setting name="IsHDR">0</Setting>
-            <Setting name="DiffuseTypeSuffixes">_ALBEDO,_DIFFUSE,_ALB,_DIF,_COLOR,_COL</Setting>
+            <Setting name="NormalTypeSuffixes">_NORMAL,_NORM</Setting>
+            <Setting name="PopulateMaterialMaps">1</Setting>
+            <Setting name="ImageType">N/A</Setting>
             <Setting name="UseMips">1</Setting>
-            <Setting name="SmoothnessTypeSuffixes">_SMOOTH,_SMOOTHNESS</Setting>
-            <Setting name="GenerateMaterialOnImport">1</Setting>
         </Group>
-        <Group name="General">
-            <Setting name="DuplicatAutoResolution">AutoPrune</Setting>
-            <Setting name="AutomaticallyPromptMissingFiles">0</Setting>
-            <Setting name="WarningsAsErrors">0</Setting>
-            <Setting name="PreventImportWithErrors">1</Setting>
+        <Group name="Meshes">
+            <Setting name="invertNormals">0</Setting>
+            <Setting name="CollapseSubmeshes">0</Setting>
+            <Setting name="DoUpAxisOverride">0</Setting>
+            <Setting name="UpAxisOverride">Z_AXIS</Setting>
+            <Setting name="AdjustCenter">0</Setting>
+            <Setting name="DoScaleOverride">1</Setting>
+            <Setting name="JoinIdenticalVerts">1</Setting>
+            <Setting name="reverseWindingOrder">0</Setting>
+            <Setting name="ScaleOverride">0.01</Setting>
+            <Setting name="AdjustFloor">0</Setting>
+            <Setting name="IgnoreNodeScale">0</Setting>
+            <Setting name="LODType">TrailingNumber</Setting>
+        </Group>
+        <Group name="Sounds">
+            <Setting name="Compressed">0</Setting>
+            <Setting name="VolumeAdjust">1.0</Setting>
+            <Setting name="PitchAdjust">1.0</Setting>
         </Group>
         <Group name="Collision">
-            <Setting name="CollisionMeshPrefix">Col</Setting>
+            <Setting name="GenCollisionType">CollisionMesh</Setting>
             <Setting name="LOSCollisionMeshPrefix">LOS</Setting>
-            <Setting name="GenerateLOSCollisions">1</Setting>
+            <Setting name="CollisionMeshPrefix">Col</Setting>
             <Setting name="GenerateCollisions">1</Setting>
-            <Setting name="GenCollisionType">CollisionMesh</Setting>
             <Setting name="GenLOSCollisionType">CollisionMesh</Setting>
+            <Setting name="GenerateLOSCollisions">1</Setting>
         </Group>
-        <Group name="Animations">
-            <Setting name="ImportAnimations">1</Setting>
-            <Setting name="animTiming">Seconds</Setting>
-            <Setting name="animFPS">2</Setting>
-            <Setting name="SeparateAnimations">1</Setting>
+        <Group name="Materials">
+            <Setting name="IgnoreMaterials">ColorEffect*,</Setting>
+            <Setting name="CreateComposites">1</Setting>
+            <Setting name="UseExistingMaterials">1</Setting>
+            <Setting name="UseDiffuseSuffixOnOriginImage">1</Setting>
+            <Setting name="ImportMaterials">1</Setting>
+            <Setting name="AlwaysPresentImageMaps">0</Setting>
+            <Setting name="PopulateMaterialMaps">1</Setting>
         </Group>
-        <Group name="Sounds">
-            <Setting name="VolumeAdjust">1.0</Setting>
-            <Setting name="PitchAdjust">1.0</Setting>
-            <Setting name="Compressed">0</Setting>
+        <Group name="General">
+            <Setting name="DuplicatAutoResolution">AutoPrune</Setting>
         </Group>
     </Group>
-    <Group name="TestConfig">
+    <Group name="NewTest">
         <Group name="Images">
-            <Setting name="MetalnessTypeSuffixes">_METAL,_MET,_METALNESS,_METALLIC</Setting>
-            <Setting name="IsHDR">0</Setting>
-            <Setting name="TextureFilteringMode">Bilinear</Setting>
-            <Setting name="SmoothnessTypeSuffixes">_SMOOTH,_SMOOTHNESS</Setting>
-            <Setting name="Compressed">1</Setting>
-            <Setting name="DiffuseTypeSuffixes">_ALBEDO,_DIFFUSE,_ALB,_DIF,_COLOR,_COL,_baseColor,_a,</Setting>
             <Setting name="AOTypeSuffixes">_AO,_AMBIENT,_AMBIENTOCCLUSION</Setting>
-            <Setting name="CompositeTypeSuffixes">_COMP,_COMPOSITE</Setting>
-            <Setting name="Scaling">1.0</Setting>
-            <Setting name="PopulateMaterialMaps">1</Setting>
+            <Setting name="GenerateMaterialOnImport">1</Setting>
+            <Setting name="DiffuseTypeSuffixes">_ALBEDO,_DIFFUSE,_ALB,_DIF,_COLOR,_COL</Setting>
+            <Setting name="SmoothnessTypeSuffixes">_SMOOTH,_SMOOTHNESS</Setting>
             <Setting name="NormalTypeSuffixes">_NORMAL,_NORM</Setting>
+            <Setting name="ImageType">N/A</Setting>
+            <Setting name="IsHDR">0</Setting>
             <Setting name="RoughnessTypeSuffixes">_ROUGH,_ROUGHNESS</Setting>
+            <Setting name="Scaling">1.0</Setting>
+            <Setting name="MetalnessTypeSuffixes">_METAL,_MET,_METALNESS,_METALLIC</Setting>
+            <Setting name="Compressed">1</Setting>
+            <Setting name="CompositeTypeSuffixes">_COMP,_COMPOSITE</Setting>
+            <Setting name="TextureFilteringMode">Bilinear</Setting>
             <Setting name="UseMips">1</Setting>
-            <Setting name="ImageType">N/A</Setting>
-            <Setting name="GenerateMaterialOnImport">1</Setting>
+        </Group>
+        <Group name="Meshes">
+            <Setting name="DoScaleOverride">0</Setting>
+            <Setting name="reverseWindingOrder">0</Setting>
+            <Setting name="DoUpAxisOverride">0</Setting>
+            <Setting name="invertNormals">0</Setting>
+            <Setting name="UpAxisOverride">Z_AXIS</Setting>
+            <Setting name="JoinIdenticalVerts">0</Setting>
+            <Setting name="AdjustCenter">0</Setting>
+            <Setting name="calcTangentSpace">0</Setting>
+            <Setting name="IgnoreNodeScale">0</Setting>
+            <Setting name="convertLeftHanded">0</Setting>
+            <Setting name="AdjustFloor">0</Setting>
+            <Setting name="ImportMesh">1</Setting>
+            <Setting name="flipUVCoords">0</Setting>
+            <Setting name="CollapseSubmeshes">0</Setting>
+            <Setting name="TransformUVs">0</Setting>
+            <Setting name="removeRedundantMats">0</Setting>
+            <Setting name="limitBoneWeights">0</Setting>
+            <Setting name="findInstances">0</Setting>
+            <Setting name="genUVCoords">0</Setting>
+            <Setting name="ScaleOverride">1</Setting>
+            <Setting name="LODType">TrailingNumber</Setting>
         </Group>
         <Group name="Collision">
-            <Setting name="GenLOSCollisionType">CollisionMesh</Setting>
-            <Setting name="LOSCollisionMeshPrefix">LOS</Setting>
+            <Setting name="GenerateCollisions">1</Setting>
             <Setting name="CollisionMeshPrefix">Col</Setting>
-            <Setting name="GenCollisionType">CollisionMesh</Setting>
+            <Setting name="LOSCollisionMeshPrefix">LOS</Setting>
             <Setting name="GenerateLOSCollisions">1</Setting>
-            <Setting name="GenerateCollisions">1</Setting>
+            <Setting name="GenLOSCollisionType">CollisionMesh</Setting>
+            <Setting name="GenCollisionType">CollisionMesh</Setting>
         </Group>
-        <Group name="Sounds">
-            <Setting name="Compressed">0</Setting>
-            <Setting name="PitchAdjust">1.0</Setting>
-            <Setting name="VolumeAdjust">1.0</Setting>
+        <Group name="Animations">
+            <Setting name="ImportAnimations">1</Setting>
+            <Setting name="SeparateAnimations">1</Setting>
+            <Setting name="animTiming">Seconds</Setting>
+            <Setting name="animFPS">2</Setting>
         </Group>
         <Group name="General">
+            <Setting name="PreventImportWithErrors">1</Setting>
+            <Setting name="WarningsAsErrors">0</Setting>
+            <Setting name="AutomaticallyPromptMissingFiles">0</Setting>
             <Setting name="DuplicatAutoResolution">AutoPrune</Setting>
         </Group>
-        <Group name="Meshes">
-            <Setting name="JoinIdenticalVerts">1</Setting>
-            <Setting name="reverseWindingOrder">0</Setting>
-            <Setting name="DoUpAxisOverride">0</Setting>
-            <Setting name="IgnoreNodeScale">0</Setting>
-            <Setting name="AdjustCenter">0</Setting>
-            <Setting name="DoScaleOverride">1</Setting>
-            <Setting name="LODType">TrailingNumber</Setting>
-            <Setting name="AdjustFloor">0</Setting>
-            <Setting name="UpAxisOverride">Z_AXIS</Setting>
-            <Setting name="CollapseSubmeshes">0</Setting>
-            <Setting name="ScaleOverride">0.01</Setting>
-            <Setting name="invertNormals">0</Setting>
+        <Group name="Sounds">
+            <Setting name="VolumeAdjust">1.0</Setting>
+            <Setting name="Compressed">0</Setting>
+            <Setting name="PitchAdjust">1.0</Setting>
         </Group>
         <Group name="Materials">
-            <Setting name="IgnoreMaterials">ColorEffect*,</Setting>
-            <Setting name="UseExistingMaterials">1</Setting>
             <Setting name="ImportMaterials">1</Setting>
+            <Setting name="UseExistingMaterials">1</Setting>
             <Setting name="CreateComposites">1</Setting>
-            <Setting name="AlwaysPresentImageMaps">0</Setting>
+            <Setting name="PopulateMaterialMaps">1</Setting>
             <Setting name="UseDiffuseSuffixOnOriginImage">1</Setting>
         </Group>
-        <Group name="Animations">
-            <Setting name="SeparateAnimations">1</Setting>
-            <Setting name="ImportAnimations">1</Setting>
-        </Group>
     </Group>
 </AssetImportSettings>

+ 455 - 222
Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui

@@ -12,20 +12,7 @@
    hovertime = "1000";
    isContainer = "1";
    canSave = "1";
-   canSaveDynamicFields = "1";
-      AddNewArtAssetPopup = "18110";
-      AddNewAssetPopup = "18112";
-      AddNewCppAssetPopup = "18111";
-      AddNewScriptAssetPopup = "18109";
-      coreModulesFilter = "0";
-      currentPreviewPage = "0";
-      Enabled = "1";
-      navigationHistoryIdx = "0";
-      onlyShowModulesWithAssets = "0";
-      previewData = "19953";
-      previewSize = "80";
-      templateFilesPath = "tools/assetBrowser/scripts/templateFiles/";
-      totalPages = "1";
+   canSaveDynamicFields = "0";
 
    new GuiWindowCtrl(AssetBrowser_addFilterWindow) {
       text = "Create New Tag";
@@ -167,8 +154,8 @@
       anchorBottom = "0";
       anchorLeft = "1";
       anchorRight = "0";
-      position = "256 107";
-      extent = "512 554";
+      position = "204 80";
+      extent = "615 608";
       minExtent = "383 274";
       horizSizing = "center";
       vertSizing = "center";
@@ -181,150 +168,211 @@
       canSave = "1";
       canSaveDynamicFields = "0";
 
-      new GuiButtonCtrl(CreateAssetButton) {
-         text = "New";
-         groupNum = "-1";
-         buttonType = "PushButton";
-         useMouseEvents = "0";
-         position = "3 22";
-         extent = "45 19";
-         minExtent = "8 2";
-         horizSizing = "right";
-         vertSizing = "bottom";
-         profile = "ToolsGuiButtonProfile";
-         visible = "1";
-         active = "1";
-         tooltipProfile = "GuiToolTipProfile";
-         hovertime = "1000";
-         isContainer = "0";
-         canSave = "1";
-         canSaveDynamicFields = "0";
-      };
-      new GuiButtonCtrl(ImportAssetButton) {
-         text = "Import";
-         groupNum = "-1";
-         buttonType = "PushButton";
-         useMouseEvents = "0";
-         position = "52 22";
-         extent = "45 19";
-         minExtent = "8 2";
-         horizSizing = "right";
-         vertSizing = "bottom";
-         profile = "ToolsGuiButtonProfile";
-         visible = "1";
-         active = "1";
-         tooltipProfile = "GuiToolTipProfile";
-         hovertime = "1000";
-         isContainer = "0";
-         canSave = "1";
-         canSaveDynamicFields = "0";
-      };
-      new GuiBitmapButtonCtrl(AssetBrowser_NavigateBackBtn) {
-         bitmap = "tools/gui/images/folderUp.png";
-         bitmapMode = "Centered";
-         autoFitExtents = "0";
-         useModifiers = "0";
-         useStates = "1";
-         masked = "0";
-         groupNum = "-1";
-         buttonType = "PushButton";
-         useMouseEvents = "0";
-         position = "98 21";
-         extent = "22 22";
-         minExtent = "8 2";
-         horizSizing = "right";
-         vertSizing = "bottom";
-         profile = "GuiDefaultProfile";
-         visible = "1";
-         active = "1";
-         command = "AssetBrowser.navigateHistoryBack();";
-         tooltipProfile = "GuiToolTipProfile";
-         hovertime = "1000";
-         isContainer = "0";
-         canSave = "1";
-         canSaveDynamicFields = "0";
-      };
-      new GuiBitmapButtonCtrl(AssetBrowser_NavigateForwardBtn) {
-         bitmap = "tools/gui/images/folderDown.png";
-         bitmapMode = "Centered";
-         autoFitExtents = "0";
-         useModifiers = "0";
-         useStates = "1";
-         masked = "0";
-         groupNum = "-1";
-         buttonType = "PushButton";
-         useMouseEvents = "0";
-         position = "120 21";
-         extent = "22 22";
+      new GuiDynamicCtrlArrayControl() {
+         colCount = "20";
+         colSize = "30";
+         rowCount = "1";
+         rowSize = "30";
+         rowSpacing = "0";
+         colSpacing = "0";
+         frozen = "0";
+         autoCellSize = "0";
+         fillRowFirst = "1";
+         dynamicSize = "0";
+         padding = "0 0 0 0";
+         position = "0 24";
+         extent = "615 30";
          minExtent = "8 2";
          horizSizing = "right";
          vertSizing = "bottom";
          profile = "GuiDefaultProfile";
          visible = "1";
          active = "1";
-         command = "AssetBrowser.navigateHistoryForward();";
-         tooltipProfile = "GuiToolTipProfile";
-         hovertime = "1000";
-         isContainer = "0";
-         canSave = "1";
-         canSaveDynamicFields = "0";
-      };
-      new GuiStackControl(AssetBrowser_BreadcrumbBar) {
-         stackingType = "Horizontal";
-         horizStacking = "Left to Right";
-         vertStacking = "Top to Bottom";
-         padding = "0";
-         dynamicSize = "0";
-         dynamicNonStackExtent = "0";
-         dynamicPos = "0";
-         changeChildSizeToFit = "0";
-         changeChildPosition = "1";
-         position = "156 21";
-         extent = "326 23";
-         minExtent = "16 16";
-         horizSizing = "width";
-         vertSizing = "bottom";
-         profile = "GuiDefaultProfile";
-         visible = "1";
-         active = "1";
          tooltipProfile = "GuiToolTipProfile";
          hovertime = "1000";
          isContainer = "1";
+         internalName = "topBar";
          canSave = "1";
          canSaveDynamicFields = "0";
-      };
-      new GuiBitmapButtonCtrl(AssetBrowser_VisibilityOptions) {
-         bitmap = "tools/gui/images/visible";
-         bitmapMode = "Centered";
-         autoFitExtents = "0";
-         useModifiers = "0";
-         useStates = "1";
-         masked = "0";
-         groupNum = "-1";
-         buttonType = "PushButton";
-         useMouseEvents = "0";
-         position = "487 21";
-         extent = "23 23";
-         minExtent = "8 2";
-         horizSizing = "left";
-         vertSizing = "bottom";
-         profile = "ToolsGuiSolidDefaultProfile";
-         visible = "1";
-         active = "1";
-         command = "AssetBrowser.showVisibiltyOptions();";
-         tooltipProfile = "GuiToolTipProfile";
-         tooltip = "Visibility Options";
-         hovertime = "1000";
-         isContainer = "0";
-         canSave = "1";
-         canSaveDynamicFields = "0";
+
+         new GuiIconButtonCtrl() {
+            buttonMargin = "4 4";
+            iconBitmap = "tools/gui/images/stencilIcons/phone.png";
+            iconLocation = "Left";
+            sizeIconToButton = "1";
+            makeIconSquare = "1";
+            textLocation = "Left";
+            textMargin = "4";
+            autoSize = "0";
+            groupNum = "-1";
+            buttonType = "PushButton";
+            useMouseEvents = "0";
+            position = "0 0";
+            extent = "30 30";
+            minExtent = "8 2";
+            horizSizing = "right";
+            vertSizing = "bottom";
+            profile = "ToolsGuiDefaultProfile";
+            visible = "1";
+            active = "1";
+            tooltipProfile = "GuiToolTipProfile";
+            tooltip = "Controls for layout and window mode.";
+            hovertime = "1000";
+            isContainer = "0";
+            internalName = "windowOptionsButton";
+            canSave = "1";
+            canSaveDynamicFields = "0";
+         };
+         new GuiIconButtonCtrl() {
+            buttonMargin = "4 4";
+            iconBitmap = "tools/gui/images/stencilIcons/plus.png";
+            iconLocation = "Left";
+            sizeIconToButton = "1";
+            makeIconSquare = "1";
+            textLocation = "Center";
+            textMargin = "4";
+            autoSize = "0";
+            groupNum = "-1";
+            buttonType = "PushButton";
+            useMouseEvents = "0";
+            position = "30 0";
+            extent = "30 30";
+            minExtent = "8 2";
+            horizSizing = "right";
+            vertSizing = "bottom";
+            profile = "ToolsGuiDefaultProfile";
+            visible = "1";
+            active = "1";
+            tooltipProfile = "GuiToolTipProfile";
+            tooltip = "Create a new asset in the current directory";
+            hovertime = "1000";
+            isContainer = "0";
+            internalName = "CreateAssetButton";
+            canSave = "1";
+            canSaveDynamicFields = "0";
+         };
+         new GuiIconButtonCtrl() {
+            buttonMargin = "4 4";
+            iconBitmap = "tools/gui/images/stencilIcons/import.png";
+            iconLocation = "Left";
+            sizeIconToButton = "1";
+            makeIconSquare = "1";
+            textLocation = "Center";
+            textMargin = "4";
+            autoSize = "0";
+            groupNum = "-1";
+            buttonType = "PushButton";
+            useMouseEvents = "0";
+            position = "60 0";
+            extent = "30 30";
+            minExtent = "8 2";
+            horizSizing = "right";
+            vertSizing = "bottom";
+            profile = "ToolsGuiDefaultProfile";
+            visible = "1";
+            active = "1";
+            tooltipProfile = "GuiToolTipProfile";
+            tooltip = "Import a file to be a new asset in the current directory";
+            hovertime = "1000";
+            isContainer = "0";
+            internalName = "ImportAssetButton";
+            canSave = "1";
+            canSaveDynamicFields = "0";
+         };
+         new GuiIconButtonCtrl() {
+            buttonMargin = "4 4";
+            iconBitmap = "tools/gui/images/stencilIcons/filter.png";
+            iconLocation = "Left";
+            sizeIconToButton = "1";
+            makeIconSquare = "1";
+            textLocation = "Center";
+            textMargin = "4";
+            autoSize = "0";
+            groupNum = "-1";
+            buttonType = "PushButton";
+            useMouseEvents = "0";
+            position = "90 0";
+            extent = "30 30";
+            minExtent = "8 2";
+            horizSizing = "right";
+            vertSizing = "bottom";
+            profile = "ToolsGuiDefaultProfile";
+            visible = "1";
+            active = "1";
+            command = "AssetBrowser.showVisibiltyOptions();";
+            tooltipProfile = "GuiToolTipProfile";
+            tooltip = "Visibility and filter modes.";
+            hovertime = "1000";
+            isContainer = "0";
+            internalName = "filterAssetsButton";
+            canSave = "1";
+            canSaveDynamicFields = "0";
+         };
+         new GuiIconButtonCtrl() {
+            buttonMargin = "4 4";
+            iconBitmap = "tools/gui/images/stencilIcons/return.png";
+            iconLocation = "Left";
+            sizeIconToButton = "1";
+            makeIconSquare = "1";
+            textLocation = "Center";
+            textMargin = "4";
+            autoSize = "0";
+            groupNum = "-1";
+            buttonType = "PushButton";
+            useMouseEvents = "0";
+            position = "120 0";
+            extent = "30 30";
+            minExtent = "8 2";
+            horizSizing = "right";
+            vertSizing = "bottom";
+            profile = "ToolsGuiDefaultProfile";
+            visible = "1";
+            active = "1";
+            command = "AssetBrowser.refreshDatabases();";
+            tooltipProfile = "GuiToolTipProfile";
+            tooltip = "Refresh Asset and Module databases.";
+            hovertime = "1000";
+            isContainer = "0";
+            internalName = "refreshDatabasesButton";
+            canSave = "1";
+            canSaveDynamicFields = "0";
+         };
+         new GuiIconButtonCtrl() {
+            buttonMargin = "4 4";
+            iconBitmap = "tools/gui/images/stencilIcons/warning.png";
+            iconLocation = "Left";
+            sizeIconToButton = "1";
+            makeIconSquare = "1";
+            textLocation = "Center";
+            textMargin = "4";
+            autoSize = "0";
+            groupNum = "-1";
+            buttonType = "PushButton";
+            useMouseEvents = "0";
+            position = "150 0";
+            extent = "30 30";
+            minExtent = "8 2";
+            horizSizing = "right";
+            vertSizing = "bottom";
+            profile = "ToolsGuiDefaultProfile";
+            visible = "1";
+            active = "1";
+            command = "AssetBrowser.autoImportSimpleLooseFiles();";
+            tooltipProfile = "GuiToolTipProfile";
+            tooltip = "Find all loose files that are of a \"simple\" type and automatically import them.";
+            hovertime = "1000";
+            isContainer = "0";
+            internalName = "AutoImportAssetButton";
+            canSave = "1";
+            canSaveDynamicFields = "0";
+         };
       };
       new GuiSplitContainer(AssetBrowser_MainSplit) {
          orientation = "Vertical";
          splitterSize = "2";
-         splitPoint = "149 100";
+         splitPoint = "190 100";
          fixedPanel = "None";
-         fixedSize = "356";
+         fixedSize = "468";
          docking = "None";
          margin = "0 0 0 0";
          padding = "0 0 0 0";
@@ -332,8 +380,8 @@
          anchorBottom = "0";
          anchorLeft = "1";
          anchorRight = "0";
-         position = "3 42";
-         extent = "505 509";
+         position = "3 56";
+         extent = "608 532";
          minExtent = "64 64";
          horizSizing = "relative";
          vertSizing = "height";
@@ -355,7 +403,7 @@
             anchorLeft = "1";
             anchorRight = "0";
             position = "0 0";
-            extent = "147 509";
+            extent = "188 532";
             minExtent = "0 0";
             horizSizing = "right";
             vertSizing = "bottom";
@@ -376,8 +424,8 @@
                anchorBottom = "0";
                anchorLeft = "1";
                anchorRight = "0";
-               position = "0 0";
-               extent = "147 31";
+               position = "0 -4";
+               extent = "188 25";
                minExtent = "8 2";
                horizSizing = "width";
                vertSizing = "bottom";
@@ -396,7 +444,7 @@
                   sinkAllKeyEvents = "0";
                   password = "0";
                   passwordMask = "*";
-                  text = "Search Folders...";
+                  placeholderText = "Search Folders...";
                   maxLength = "1024";
                   margin = "0 0 0 0";
                   padding = "0 0 0 0";
@@ -404,8 +452,8 @@
                   anchorBottom = "0";
                   anchorLeft = "1";
                   anchorRight = "0";
-                  position = "0 0";
-                  extent = "148 18";
+                  position = "0 3";
+                  extent = "189 18";
                   minExtent = "8 2";
                   horizSizing = "width";
                   vertSizing = "height";
@@ -418,10 +466,11 @@
                   class = "AssetBrowserSearchFilterTxt";
                   canSave = "1";
                   canSaveDynamicFields = "0";
+                  command="AssetBrowserFolderSearchFilter.onEdited();";
                };
-               new GuiBitmapButtonCtrl(AssetBrowser_ClearFolderFilterBtn) {
-                  bitmap = "tools/gui/images/clear-icon";
-                  bitmapMode = "Centered";
+               new GuiBitmapButtonCtrl() {
+                  bitmap = "tools/gui/images/stencilIcons/zoom.png";
+                  bitmapMode = "Stretched";
                   autoFitExtents = "0";
                   useModifiers = "0";
                   useStates = "1";
@@ -429,7 +478,7 @@
                   groupNum = "-1";
                   buttonType = "PushButton";
                   useMouseEvents = "0";
-                  position = "132 0";
+                  position = "173 4";
                   extent = "15 15";
                   minExtent = "8 2";
                   horizSizing = "left";
@@ -440,6 +489,8 @@
                   tooltipProfile = "GuiToolTipProfile";
                   hovertime = "1000";
                   isContainer = "0";
+                  internalName = "folderSearchBtn";
+                  class = "AssetBrowserFolderSearchBtn";
                   canSave = "1";
                   canSaveDynamicFields = "0";
                };
@@ -452,7 +503,7 @@
                anchorLeft = "1";
                anchorRight = "0";
                position = "0 17";
-               extent = "147 493";
+               extent = "188 516";
                minExtent = "8 2";
                horizSizing = "width";
                vertSizing = "height";
@@ -482,7 +533,7 @@
                   anchorLeft = "1";
                   anchorRight = "0";
                   position = "0 0";
-                  extent = "147 493";
+                  extent = "188 516";
                   minExtent = "8 8";
                   horizSizing = "width";
                   vertSizing = "height";
@@ -518,7 +569,7 @@
                      canRenameObjects = "1";
                      renameInternal = "0";
                      position = "1 1";
-                     extent = "145 147";
+                     extent = "186 2";
                      minExtent = "8 2";
                      horizSizing = "right";
                      vertSizing = "bottom";
@@ -543,8 +594,8 @@
             anchorBottom = "0";
             anchorLeft = "1";
             anchorRight = "0";
-            position = "151 0";
-            extent = "354 509";
+            position = "192 0";
+            extent = "416 532";
             minExtent = "16 16";
             horizSizing = "right";
             vertSizing = "bottom";
@@ -565,12 +616,12 @@
                anchorBottom = "0";
                anchorLeft = "1";
                anchorRight = "0";
-               position = "1 0";
-               extent = "354 19";
+               position = "0 0";
+               extent = "418 20";
                minExtent = "8 2";
                horizSizing = "width";
                vertSizing = "bottom";
-               profile = "inspectorStyleRolloutDarkProfile";
+               profile = "GuiDefaultProfile";
                visible = "1";
                active = "1";
                tooltipProfile = "GuiToolTipProfile";
@@ -579,13 +630,88 @@
                canSave = "1";
                canSaveDynamicFields = "0";
 
-               new GuiTextEditCtrl(AssetBrowserSearchFilter) {
+               new GuiBitmapButtonCtrl(AssetBrowser_NavigateBackBtn) {
+                  bitmap = "tools/gui/images/folderUp.png";
+                  bitmapMode = "Centered";
+                  autoFitExtents = "0";
+                  useModifiers = "0";
+                  useStates = "1";
+                  masked = "0";
+                  groupNum = "-1";
+                  buttonType = "PushButton";
+                  useMouseEvents = "0";
+                  position = "0 0";
+                  extent = "22 22";
+                  minExtent = "8 2";
+                  horizSizing = "right";
+                  vertSizing = "bottom";
+                  profile = "GuiDefaultProfile";
+                  visible = "1";
+                  active = "1";
+                  command = "AssetBrowser.navigateHistoryBack();";
+                  tooltipProfile = "GuiToolTipProfile";
+                  tooltip = "Navigate Back in history";
+                  hovertime = "1000";
+                  isContainer = "0";
+                  canSave = "1";
+                  canSaveDynamicFields = "0";
+               };
+               new GuiBitmapButtonCtrl(AssetBrowser_NavigateForwardBtn) {
+                  bitmap = "tools/gui/images/folderDown.png";
+                  bitmapMode = "Centered";
+                  autoFitExtents = "0";
+                  useModifiers = "0";
+                  useStates = "1";
+                  masked = "0";
+                  groupNum = "-1";
+                  buttonType = "PushButton";
+                  useMouseEvents = "0";
+                  position = "22 0";
+                  extent = "22 22";
+                  minExtent = "8 2";
+                  horizSizing = "right";
+                  vertSizing = "bottom";
+                  profile = "GuiDefaultProfile";
+                  visible = "1";
+                  active = "1";
+                  command = "AssetBrowser.navigateHistoryForward();";
+                  tooltipProfile = "GuiToolTipProfile";
+                  tooltip = "Navigate forward in history";
+                  hovertime = "1000";
+                  isContainer = "0";
+                  canSave = "1";
+                  canSaveDynamicFields = "0";
+               };
+               new GuiStackControl(AssetBrowser_BreadcrumbBar) {
+                  stackingType = "Horizontal";
+                  horizStacking = "Left to Right";
+                  vertStacking = "Top to Bottom";
+                  padding = "0";
+                  dynamicSize = "0";
+                  dynamicNonStackExtent = "0";
+                  dynamicPos = "0";
+                  changeChildSizeToFit = "0";
+                  changeChildPosition = "1";
+                  position = "52 0";
+                  extent = "365 23";
+                  minExtent = "16 16";
+                  horizSizing = "width";
+                  vertSizing = "bottom";
+                  profile = "GuiDefaultProfile";
+                  visible = "1";
+                  active = "1";
+                  tooltipProfile = "GuiToolTipProfile";
+                  hovertime = "1000";
+                  isContainer = "1";
+                  canSave = "1";
+                  canSaveDynamicFields = "0";
+               };
+               new GuiTextEditCtrl() {
                   historySize = "0";
                   tabComplete = "0";
                   sinkAllKeyEvents = "0";
                   password = "0";
                   passwordMask = "*";
-                  text = "Search Assets...";
                   maxLength = "1024";
                   margin = "0 0 0 0";
                   padding = "0 0 0 0";
@@ -593,8 +719,8 @@
                   anchorBottom = "0";
                   anchorLeft = "1";
                   anchorRight = "0";
-                  position = "21 1";
-                  extent = "314 18";
+                  position = "48 0";
+                  extent = "369 18";
                   minExtent = "8 2";
                   horizSizing = "width";
                   vertSizing = "bottom";
@@ -604,13 +730,36 @@
                   tooltipProfile = "GuiToolTipProfile";
                   hovertime = "1000";
                   isContainer = "1";
-                  class = "AssetBrowserSearchFilterTxt";
+                  internalName = "NavPath";
+                  class = "assetBrowserNavPath";
                   canSave = "1";
                   canSaveDynamicFields = "0";
                };
-               new GuiBitmapButtonCtrl(AssetBrowser_ClearAssetFilterBtn) {
-                  bitmap = "tools/gui/images/clear-icon";
-                  bitmapMode = "Stretched";
+            };
+            new GuiContainer() {
+               margin = "0 0 0 0";
+               padding = "0 0 0 0";
+               anchorTop = "1";
+               anchorBottom = "0";
+               anchorLeft = "1";
+               anchorRight = "0";
+               position = "1 20";
+               extent = "416 19";
+               minExtent = "8 2";
+               horizSizing = "width";
+               vertSizing = "bottom";
+               profile = "inspectorStyleRolloutDarkProfile";
+               visible = "1";
+               active = "1";
+               tooltipProfile = "GuiToolTipProfile";
+               hovertime = "1000";
+               isContainer = "1";
+               canSave = "1";
+               canSaveDynamicFields = "0";
+
+               new GuiBitmapButtonCtrl(AssetBrowser_VisibilityOptions) {
+                  bitmap = "tools/gui/images/visible";
+                  bitmapMode = "Centered";
                   autoFitExtents = "0";
                   useModifiers = "0";
                   useStates = "1";
@@ -618,24 +767,55 @@
                   groupNum = "-1";
                   buttonType = "PushButton";
                   useMouseEvents = "0";
-                  position = "321 1";
-                  extent = "15 15";
+                  position = "0 0";
+                  extent = "23 23";
                   minExtent = "8 2";
                   horizSizing = "left";
                   vertSizing = "bottom";
                   profile = "ToolsGuiSolidDefaultProfile";
                   visible = "1";
                   active = "1";
+                  command = "AssetBrowser.showVisibiltyOptions();";
                   tooltipProfile = "GuiToolTipProfile";
-                  tooltip = "Create New Asset";
+                  tooltip = "Visibility Options";
                   hovertime = "1000";
                   isContainer = "0";
                   canSave = "1";
                   canSaveDynamicFields = "0";
                };
-               new GuiBitmapButtonCtrl(AssetBrowser_ToggleFolderPanel) {
-                  bitmap = "tools/gui/images/iconList.png";
-                  bitmapMode = "Centered";
+               new GuiTextEditCtrl(AssetBrowserSearchFilter) {
+                  historySize = "0";
+                  tabComplete = "0";
+                  sinkAllKeyEvents = "0";
+                  password = "0";
+                  passwordMask = "*";
+                  placeHolderText = "Search Assets...";
+                  maxLength = "1024";
+                  margin = "0 0 0 0";
+                  padding = "0 0 0 0";
+                  anchorTop = "1";
+                  anchorBottom = "0";
+                  anchorLeft = "1";
+                  anchorRight = "0";
+                  position = "22 1";
+                  extent = "375 18";
+                  minExtent = "8 2";
+                  horizSizing = "width";
+                  vertSizing = "bottom";
+                  profile = "ToolsGuiTextEditProfile";
+                  visible = "1";
+                  active = "1";
+                  tooltipProfile = "GuiToolTipProfile";
+                  hovertime = "1000";
+                  isContainer = "1";
+                  class = "AssetBrowserSearchFilterTxt";
+                  canSave = "1";
+                  canSaveDynamicFields = "0";
+                  command="AssetBrowserSearchFilter.onEdited();";
+               };
+               new GuiBitmapButtonCtrl() {
+                  bitmap = "tools/gui/images/stencilIcons/zoom.png";
+                  bitmapMode = "Stretched";
                   autoFitExtents = "0";
                   useModifiers = "0";
                   useStates = "1";
@@ -643,24 +823,24 @@
                   groupNum = "-1";
                   buttonType = "PushButton";
                   useMouseEvents = "0";
-                  position = "1 1";
+                  position = "383 1";
                   extent = "15 15";
                   minExtent = "8 2";
-                  horizSizing = "right";
+                  horizSizing = "left";
                   vertSizing = "bottom";
                   profile = "ToolsGuiSolidDefaultProfile";
                   visible = "1";
                   active = "1";
-                  command = "AssetBrowser.toggleFolderCollapseButton();";
                   tooltipProfile = "GuiToolTipProfile";
-                  tooltip = "Toggles the display of the folders panel";
                   hovertime = "1000";
                   isContainer = "0";
+                  internalName = "assetSearchBtn";
+                  class = "AssetBrowserAssetSearchBtn";
                   canSave = "1";
                   canSaveDynamicFields = "0";
                };
-               new GuiBitmapButtonCtrl(AssetBrowser_FilterOptionsBtn) {
-                  bitmap = "tools/gui/images/filter.png";
+               new GuiBitmapButtonCtrl() {
+                  bitmap = "tools/gui/images/save-icon";
                   bitmapMode = "Stretched";
                   autoFitExtents = "0";
                   useModifiers = "0";
@@ -669,7 +849,7 @@
                   groupNum = "-1";
                   buttonType = "PushButton";
                   useMouseEvents = "0";
-                  position = "337 1";
+                  position = "399 1";
                   extent = "15 15";
                   minExtent = "8 2";
                   horizSizing = "left";
@@ -677,11 +857,12 @@
                   profile = "ToolsGuiSolidDefaultProfile";
                   visible = "1";
                   active = "1";
-                  command = "AssetBrowser.showFilterOptions();";
+                  command = "Canvas.pushDialog(CreateNewCollectionSetCtrl);";
                   tooltipProfile = "GuiToolTipProfile";
-                  tooltip = "Filter Options";
+                  tooltip = "Save current search parameters as a collectionset";
                   hovertime = "1000";
                   isContainer = "0";
+                  internalName = "saveSearchAsCollectionBtn";
                   canSave = "1";
                   canSaveDynamicFields = "0";
                };
@@ -693,8 +874,8 @@
                anchorBottom = "0";
                anchorLeft = "1";
                anchorRight = "1";
-               position = "1 17";
-               extent = "354 487";
+               position = "1 37";
+               extent = "416 495";
                minExtent = "8 2";
                horizSizing = "width";
                vertSizing = "height";
@@ -724,7 +905,7 @@
                   anchorLeft = "1";
                   anchorRight = "0";
                   position = "0 0";
-                  extent = "354 467";
+                  extent = "416 479";
                   minExtent = "8 8";
                   horizSizing = "width";
                   vertSizing = "height";
@@ -739,8 +920,8 @@
 
                   new GuiMouseEventCtrl(AssetListPanelInputs) {
                      lockMouse = "0";
-                     position = "1 0";
-                     extent = "339 467";
+                     position = "1 1";
+                     extent = "414 472";
                      minExtent = "8 2";
                      horizSizing = "width";
                      vertSizing = "height";
@@ -763,8 +944,8 @@
                      dynamicPos = "0";
                      changeChildSizeToFit = "1";
                      changeChildPosition = "0";
-                     position = "2 1";
-                     extent = "339 124";
+                     position = "2 2";
+                     extent = "414 120";
                      minExtent = "16 16";
                      horizSizing = "width";
                      vertSizing = "bottom";
@@ -778,10 +959,10 @@
                      canSaveDynamicFields = "0";
 
                      new GuiDynamicCtrlArrayControl() {
-                        colCount = "3";
+                        colCount = "4";
                         colSize = "100";
                         rowCount = "1";
-                        rowSize = "124";
+                        rowSize = "120";
                         rowSpacing = "2";
                         colSpacing = "2";
                         frozen = "0";
@@ -790,7 +971,7 @@
                         dynamicSize = "1";
                         padding = "0 0 0 0";
                         position = "3 0";
-                        extent = "339 124";
+                        extent = "414 120";
                         minExtent = "8 8";
                         horizSizing = "width";
                         vertSizing = "bottom";
@@ -814,8 +995,8 @@
                   anchorBottom = "0";
                   anchorLeft = "1";
                   anchorRight = "0";
-                  position = "0 467";
-                  extent = "354 20";
+                  position = "0 479";
+                  extent = "416 16";
                   minExtent = "8 2";
                   horizSizing = "width";
                   vertSizing = "height";
@@ -830,6 +1011,7 @@
                   canSaveDynamicFields = "0";
                };
                new GuiTextCtrl(AssetBrowser_FooterText) {
+                  text = "0 Assets";
                   maxLength = "1024";
                   margin = "0 0 0 0";
                   padding = "0 0 0 0";
@@ -837,7 +1019,7 @@
                   anchorBottom = "0";
                   anchorLeft = "1";
                   anchorRight = "0";
-                  position = "0 470";
+                  position = "0 475";
                   extent = "269 23";
                   minExtent = "8 2";
                   horizSizing = "right";
@@ -851,31 +1033,82 @@
                   canSave = "1";
                   canSaveDynamicFields = "0";
                };
-            };
-            new GuiButtonCtrl() {
-               text = "Select";
-               groupNum = "-1";
-               buttonType = "PushButton";
-               useMouseEvents = "0";
-               position = "301 488";
-               extent = "53 19";
-               minExtent = "8 2";
-               horizSizing = "left";
-               vertSizing = "top";
-               profile = "ToolsGuiButtonProfile";
-               visible = "0";
-               active = "1";
-               command = "AssetBrowser.selectAsset( AssetBrowser.selectedAsset );";
-               tooltipProfile = "GuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "0";
-               internalName = "SelectButton";
-               hidden = "1";
-               canSave = "1";
-               canSaveDynamicFields = "0";
+               new GuiBitmapButtonCtrl(AssetBrowser_ToggleFolderPanel) {
+                  bitmap = "tools/gui/images/stencilIcons/previous.png";
+                  bitmapMode = "Stretched";
+                  autoFitExtents = "0";
+                  useModifiers = "0";
+                  useStates = "1";
+                  masked = "0";
+                  groupNum = "-1";
+                  buttonType = "PushButton";
+                  useMouseEvents = "0";
+                  position = "-2 200";
+                  extent = "18 18";
+                  minExtent = "8 2";
+                  horizSizing = "right";
+                  vertSizing = "center";
+                  profile = "ToolsGuiSolidDefaultProfile";
+                  visible = "1";
+                  active = "1";
+                  command = "AssetBrowser.toggleFolderCollapseButton();";
+                  tooltipProfile = "GuiToolTipProfile";
+                  tooltip = "Toggles the display of the folders panel";
+                  hovertime = "1000";
+                  isContainer = "0";
+                  canSave = "1";
+                  canSaveDynamicFields = "0";
+               };
             };
          };
       };
+      new GuiButtonCtrl() {
+         text = "Select";
+         groupNum = "-1";
+         buttonType = "PushButton";
+         useMouseEvents = "0";
+         position = "559 588";
+         extent = "53 19";
+         minExtent = "8 2";
+         horizSizing = "left";
+         vertSizing = "top";
+         profile = "ToolsGuiButtonProfile";
+         visible = "0";
+         active = "1";
+         command = "AssetBrowser.selectAsset( AssetBrowser.selectedAsset );";
+         tooltipProfile = "GuiToolTipProfile";
+         hovertime = "1000";
+         isContainer = "0";
+         internalName = "SelectButton";
+         hidden = "1";
+         canSave = "1";
+         canSaveDynamicFields = "0";
+      };
+      new GuiSliderCtrl() {
+         range = "0 2";
+         ticks = "5";
+         snap = "1";
+         value = "1";
+         useFillBar = "0";
+         fillBarColor = "255 255 255 255";
+         renderTicks = "0";
+         position = "8 588";
+         extent = "75 20";
+         minExtent = "8 2";
+         horizSizing = "right";
+         vertSizing = "top";
+         profile = "GuiSliderProfile";
+         visible = "1";
+         active = "1";
+         tooltipProfile = "GuiToolTipProfile";
+         tooltip = "Controls the asset preview size. At minimum, it will render items as a list.";
+         hovertime = "1000";
+         isContainer = "0";
+         internalName = "previewSlider";
+         class = "assetBrowserPreviewSlider";
+         canSave = "1";
+         canSaveDynamicFields = "0";
+      };
    };
 };
 //--- OBJECT WRITE END ---

+ 124 - 0
Templates/BaseGame/game/tools/assetBrowser/guis/createNewCollectionSet.gui

@@ -0,0 +1,124 @@
+//--- OBJECT WRITE BEGIN ---
+%guiContent = new GuiControl(CreateNewCollectionSetCtrl) {
+   position = "0 0";
+   extent = "1024 768";
+   minExtent = "8 2";
+   horizSizing = "right";
+   vertSizing = "bottom";
+   profile = "ToolsGuiDefaultNonModalProfile";
+   visible = "1";
+   active = "1";
+   tooltipProfile = "GuiToolTipProfile";
+   hovertime = "1000";
+   isContainer = "1";
+   canSave = "1";
+   canSaveDynamicFields = "1";
+      Enabled = "1";
+
+   new GuiWindowCtrl() {
+      text = "Name New Collection Set";
+      resizeWidth = "1";
+      resizeHeight = "0";
+      canMove = "1";
+      canClose = "1";
+      canMinimize = "0";
+      canMaximize = "0";
+      canCollapse = "0";
+      edgeSnap = "1";
+      margin = "0 0 0 0";
+      padding = "0 0 0 0";
+      anchorTop = "1";
+      anchorBottom = "0";
+      anchorLeft = "1";
+      anchorRight = "0";
+      position = "362 334";
+      extent = "355 99";
+      minExtent = "48 92";
+      horizSizing = "center";
+      vertSizing = "center";
+      profile = "ToolsGuiWindowProfile";
+      visible = "1";
+      active = "1";
+      closeCommand = "Canvas.popDialog(CreateNewCollectionSetCtrl);";
+      tooltipProfile = "ToolsGuiToolTipProfile";
+      hovertime = "1000";
+      isContainer = "1";
+      canSave = "1";
+      canSaveDynamicFields = "0";
+
+      new GuiButtonCtrl() {
+         text = "Select";
+         groupNum = "-1";
+         buttonType = "PushButton";
+         useMouseEvents = "0";
+         position = "207 68";
+         extent = "71 22";
+         minExtent = "8 2";
+         horizSizing = "left";
+         vertSizing = "top";
+         profile = "ToolsGuiButtonProfile";
+         visible = "1";
+         active = "1";
+         command = "Canvas.popDialog(CreateNewCollectionSetCtrl); AssetBrowser.saveCurrentFiltersAsCollection();";
+         tooltipProfile = "ToolsGuiToolTipProfile";
+         hovertime = "1000";
+         isContainer = "0";
+         canSave = "1";
+         canSaveDynamicFields = "0";
+      };
+      new GuiButtonCtrl() {
+         text = "Cancel";
+         groupNum = "-1";
+         buttonType = "PushButton";
+         useMouseEvents = "0";
+         position = "284 68";
+         extent = "64 22";
+         minExtent = "8 2";
+         horizSizing = "left";
+         vertSizing = "top";
+         profile = "ToolsGuiButtonProfile";
+         visible = "1";
+         active = "1";
+         command = "Canvas.popDialog(CreateNewCollectionSetCtrl);";
+         tooltipProfile = "ToolsGuiToolTipProfile";
+         hovertime = "1000";
+         isContainer = "0";
+         canSave = "1";
+         canSaveDynamicFields = "0";
+      };
+      new GuiTextEditCtrl() {
+         historySize = "0";
+         tabComplete = "0";
+         sinkAllKeyEvents = "0";
+         password = "0";
+         passwordMask = "*";
+         maxLength = "1024";
+         margin = "0 0 0 0";
+         padding = "0 0 0 0";
+         anchorTop = "1";
+         anchorBottom = "0";
+         anchorLeft = "1";
+         anchorRight = "0";
+         position = "8 38";
+         extent = "341 18";
+         minExtent = "8 2";
+         horizSizing = "width";
+         vertSizing = "height";
+         profile = "ToolsGuiTextEditProfile";
+         visible = "1";
+         active = "1";
+         tooltipProfile = "ToolsGuiToolTipProfile";
+         hovertime = "1000";
+         isContainer = "1";
+         canSave = "1";
+         canSaveDynamicFields = "0";
+         internalName="collectionSetName";
+      };
+   };
+};
+//--- OBJECT WRITE END ---
+
+function CreateNewCollectionSetCtrl::onWake(%this)
+{
+   %this-->collectionSetName.setText("");
+}

+ 14 - 14
Templates/BaseGame/game/tools/assetBrowser/guis/editAsset.gui

@@ -1,7 +1,7 @@
 //--- OBJECT WRITE BEGIN ---
 %guiContent = new GuiControl(AssetBrowser_editAsset) {
    position = "0 0";
-   extent = "1920 1080";
+   extent = "1024 768";
    minExtent = "8 2";
    horizSizing = "right";
    vertSizing = "bottom";
@@ -13,7 +13,7 @@
    isContainer = "1";
    canSave = "1";
    canSaveDynamicFields = "1";
-      enabled = "1";
+      Enabled = "1";
 
    new GuiWindowCtrl(AssetBrowser_editAssetWindow) {
       text = "Asset Properties";
@@ -32,7 +32,7 @@
       anchorBottom = "0";
       anchorLeft = "1";
       anchorRight = "0";
-      position = "710 375";
+      position = "262 219";
       extent = "500 329";
       minExtent = "48 92";
       horizSizing = "center";
@@ -48,7 +48,7 @@
 
       new GuiScrollCtrl() {
          willFirstRespond = "1";
-         hScrollBar = "alwaysOff";
+         hScrollBar = "dynamic";
          vScrollBar = "dynamic";
          lockHorizScroll = "0";
          lockVertScroll = "0";
@@ -64,9 +64,9 @@
          position = "1 21";
          extent = "498 283";
          minExtent = "8 2";
-         horizSizing = "right";
-         vertSizing = "bottom";
-         profile = "Tools";
+         horizSizing = "width";
+         vertSizing = "height";
+         profile = "ToolsGuiScrollProfile";
          visible = "1";
          active = "1";
          tooltipProfile = "GuiToolTipProfile";
@@ -88,9 +88,9 @@
             changeChildSizeToFit = "1";
             changeChildPosition = "1";
             position = "1 1";
-            extent = "481 101";
+            extent = "493 101";
             minExtent = "16 16";
-            horizSizing = "right";
+            horizSizing = "width";
             vertSizing = "bottom";
             profile = "GuiInspectorProfile";
             visible = "1";
@@ -110,9 +110,9 @@
          position = "402 305";
          extent = "45 22";
          minExtent = "8 2";
-         horizSizing = "right";
-         vertSizing = "bottom";
-         profile = "ToolsuiButtonProfile";
+         horizSizing = "left";
+         vertSizing = "top";
+         profile = "ToolsGuiButtonProfile";
          visible = "1";
          active = "1";
          command = "AssetBrowser_editAsset.saveAsset();";
@@ -130,8 +130,8 @@
          position = "450 305";
          extent = "45 22";
          minExtent = "8 2";
-         horizSizing = "right";
-         vertSizing = "bottom";
+         horizSizing = "left";
+         vertSizing = "top";
          profile = "ToolsGuiButtonProfile";
          visible = "1";
          active = "1";

+ 5 - 5
Templates/BaseGame/game/tools/assetBrowser/guis/editModule.gui

@@ -1,7 +1,7 @@
 //--- OBJECT WRITE BEGIN ---
 %guiContent = new GuiControl(AssetBrowser_editModule) {
    position = "0 0";
-   extent = "1920 1080";
+   extent = "1024 768";
    minExtent = "8 2";
    horizSizing = "right";
    vertSizing = "bottom";
@@ -13,7 +13,7 @@
    isContainer = "1";
    canSave = "1";
    canSaveDynamicFields = "1";
-      enabled = "1";
+      Enabled = "1";
 
    new GuiWindowCtrl(AssetBrowser_editModuleWindow) {
       text = "Module Properties";
@@ -32,7 +32,7 @@
       anchorBottom = "0";
       anchorLeft = "1";
       anchorRight = "0";
-      position = "710 375";
+      position = "262 219";
       extent = "500 329";
       minExtent = "48 92";
       horizSizing = "center";
@@ -110,7 +110,7 @@
          position = "402 305";
          extent = "45 22";
          minExtent = "8 2";
-         horizSizing = "right";
+         horizSizing = "left";
          vertSizing = "top";
          profile = "ToolsGuiButtonProfile";
          visible = "1";
@@ -130,7 +130,7 @@
          position = "450 305";
          extent = "45 22";
          minExtent = "8 2";
-         horizSizing = "right";
+         horizSizing = "left";
          vertSizing = "top";
          profile = "ToolsGuiButtonProfile";
          visible = "1";

+ 25 - 4
Templates/BaseGame/game/tools/assetBrowser/main.cs

@@ -24,6 +24,7 @@ function initializeAssetBrowser()
    echo(" % - Initializing Asset Browser");  
    
    $AssetBrowser::importConfigsFile = "tools/assetBrowser/assetImportConfigs.xml";
+   $AssetBrowser::collectionSetsFile = "tools/assetBrowser/searchCollectionSets.xml";
    $AssetBrowser::currentImportConfig = "";
    
    if(!isObject(AssetFilterTypeList))
@@ -50,6 +51,8 @@ function initializeAssetBrowser()
       AssetFilterTypeList.add("TerrainMaterialAsset");
    }
    
+   exec("./scripts/profiles.cs");
+   
    exec("./guis/assetBrowser.gui");
    exec("./guis/addModuleWindow.gui");
    exec("./guis/gameObjectCreator.gui");
@@ -67,6 +70,7 @@ function initializeAssetBrowser()
    exec("./guis/assetImportLog.gui");
    exec("./guis/looseFileAudit.gui");
    exec("./guis/assetNameEdit.gui");
+   exec("./guis/createNewCollectionSet.gui");
 
    exec("./scripts/assetBrowser.cs");
    exec("./scripts/popupMenus.cs");
@@ -102,6 +106,8 @@ function initializeAssetBrowser()
    exec("./scripts/assetTypes/terrain.cs");
    exec("./scripts/assetTypes/terrainMaterial.cs");  
    exec("./scripts/assetTypes/datablockObjects.cs");  
+   exec("./scripts/assetTypes/looseFiles.cs"); 
+   exec("./scripts/assetTypes/prefab.cs"); 
    
    new ScriptObject( AssetBrowserPlugin )
    {
@@ -123,19 +129,34 @@ function initializeAssetBrowser()
    
    ImportAssetWindow.reloadImportOptionConfigs();
    
+   //CollectionSets
+   if(!isObject(AssetBrowserCollectionSets))
+   {
+      new Settings(AssetBrowserCollectionSets) 
+      { 
+         file = $AssetBrowser::collectionSetsFile; 
+      };
+   }
+   AssetBrowserCollectionSets.read();
+   
    if(!isObject(ImportAssetWindow.importTempDirHandler))
       ImportAssetWindow.importTempDirHandler = makedirectoryHandler(0, "", "");
       
    if(!isObject(ImportActivityLog))
       new ArrayObject(ImportActivityLog);
       
+   if(!isObject(AssetSearchTerms))
+      new ArrayObject(AssetSearchTerms);
+      
    ImportAssetWindow.importingFilesArray = new ArrayObject();
    
-   if(!isObject(SessionImportAssetItems))
-      new ArrayObject(SessionImportAssetItems);
+   //if(!isObject(SessionImportAssetItems))
+   //   new ArrayObject(SessionImportAssetItems);
+      
+   //if(!isObject(ImportAssetItems))
+   //   new ArrayObject(ImportAssetItems);  
       
-   if(!isObject(ImportAssetItems))
-      new ArrayObject(ImportAssetItems);  
+   ImportAssetWindow.importer = new AssetImporter();
       
    AssetBrowser.buildPopupMenus();
    

+ 5 - 0
Templates/BaseGame/game/tools/assetBrowser/scripts/addModuleWindow.cs

@@ -19,6 +19,11 @@
 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 // IN THE SOFTWARE.
 //-----------------------------------------------------------------------------
+function AssetBrowser_addModuleWindow::onWake(%this)
+{
+   %this-->ModuleName.setText("");
+}
+
 function AssetBrowser_addModuleWindow::onGainFirstResponder(%this)
 {
    %this-->moduleName.setFirstResponder();

ファイルの差分が大きいため隠しています
+ 726 - 142
Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.cs


+ 64 - 576
Templates/BaseGame/game/tools/assetBrowser/scripts/assetImport.cs

@@ -24,8 +24,10 @@ function ImportAssetWindow::showDialog(%this)
 {
    //prep the import control
    Canvas.pushDialog(AssetImportCtrl);
-   AssetImportCtrl.setHidden(true);
-      
+   AssetImportCtrl.setHidden(false);
+   
+   ImportAssetWindow.allowAutoImport = true; //special-case override for if we want to force a manual import process
+   
    ImportAssetWindow.assetHeirarchyChanged = false;
    
    %defaultConfig = EditorSettings.value("Assets/AssetImporDefaultConfig", "");
@@ -45,14 +47,15 @@ function ImportAssetWindow::showDialog(%this)
 function ImportAssetWindow::Close(%this)
 {
    //Some cleanup
-   ImportAssetWindow.importingFilesArray.empty();
+   ImportAssetWindow.importer.resetImportSession(true);
+   //ImportAssetWindow.importingFilesArray.empty();
    
    %this.importTempDirHandler.deleteFolder("tools/assetBrowser/importTemp/*/");
    
    if(ImportAssetWindow.isAwake())
       ImportAssetWindow.refresh();
       
-   ImportAssetItems.empty();
+   //ImportAssetItems.empty();
       
    Canvas.popDialog();  
 }
@@ -124,7 +127,6 @@ function getImageInfo(%file)
 //This lets us go and look for a image at the importing directory as long as it matches the material name
 function findImageFile(%path, %materialName, %type)
 {
-   
    if(isFile(%path @ "/" @ %materialName @ ".jpg"))
       return %path @ "/" @ %materialName @ ".jpg";
    else if(isFile(%path @ "/" @ %materialName @ ".png"))
@@ -173,7 +175,9 @@ function AssetBrowser::onDropFile( %this, %filePath )
    if(!%this.isVisible())
       return;
       
-   %fileExt = fileExt( %filePath );
+   ImportAssetWindow.importer.addImportingFile(%filePath);
+      
+   /*%fileExt = fileExt( %filePath );
    //add it to our array!
    if(isImageFormat(%fileExt))
       %assetItem = %this.addImportingAsset("ImageAsset", %filePath);
@@ -194,13 +198,13 @@ function AssetBrowser::onDropFile( %this, %filePath )
    {
       SessionImportAssetItems.add(%assetItem);
       ImportAssetItems.add(%assetItem);
-   }
+   }*/
       
    //Used to keep tabs on what files we were trying to import, used mainly in the event of
    //adjusting configs and needing to completely reprocess the import
    //ensure we're not doubling-up on files by accident
-   if(ImportAssetWindow.importingFilesArray.getIndexFromKey(%filePath) == -1)
-      ImportAssetWindow.importingFilesArray.add(%filePath);
+   //if(ImportAssetWindow.importingFilesArray.getIndexFromKey(%filePath) == -1)
+   //   ImportAssetWindow.importingFilesArray.add(%filePath);
 }
 
 function AssetBrowser::onDropZipFile(%this, %filePath)
@@ -334,8 +338,10 @@ function AssetBrowser::addImportingAsset( %this, %assetType, %filePath, %parentA
    %moduleName = AssetBrowser.SelectedModule;
    ImportAssetModuleList.text = %moduleName;
    
+   %assetName = strreplace( %assetName, " ", "_" );
+   
    //Add to our main list
-   %assetItem = new ScriptObject()
+   %assetItem = new AssetImportObject()
    {
       assetType = %assetType;
       filePath = %filePath;
@@ -350,33 +356,9 @@ function AssetBrowser::addImportingAsset( %this, %assetType, %filePath, %parentA
       skip = false;
       processed = false;
       generatedAsset = false;
-      childAssetItems = new ArrayObject(){};
    };
    
-   if(%parentAssetItem !$= "")
-   {
-      ImportActivityLog.add("Added Child Importing Asset to " @ %parentAssetItem.assetName);
-   }
-   else
-   {
-      ImportActivityLog.add("Added Importing Asset");
-   }
-   
-   ImportActivityLog.add("   Asset Info: Name: " @ %assetName @ " | Type: " @ %assetType);
-   
-   if(%filePath !$= "")
-      ImportActivityLog.add("   File: " @ %filePath);
-   
-   if(%parentAssetItem $= "")
-   {
-      %asd = true;
-   }
-   else
-   {
-      %parentAssetItem.childAssetItems.add(%assetItem);
-   }
-   
-   ImportAssetWindow.refresh();
+   ImportAssetWindow.importer.addImportingAssetItem(%assetItem, %parentAssetItem);
    
    return %assetItem;
 }
@@ -426,7 +408,7 @@ function ImportAssetWindow::reloadImportOptionConfigs(%this)
 }
 
 //
-function importLooseFile(%filePath, %forceAutoImport)
+/*function importLooseFile(%filePath, %forceAutoImport)
 {
    %assetType = getAssetTypeByFilename(%filePath);
    
@@ -480,7 +462,7 @@ function importLooseFile(%filePath, %forceAutoImport)
    $importedLooseFileAsset = %assetItem.moduleName @ ":" @ %assetItem.assetName;
    
    return true;
-}
+}*/
 
 //
 function assetImportUpdatePath(%newPath)
@@ -491,7 +473,7 @@ function assetImportUpdatePath(%newPath)
 }
 
 //
-function ImportAssetWindow::processImportAssets(%this, %assetItem)
+/*function ImportAssetWindow::processImportAssets(%this, %assetItem)
 {
    if(!isObject(%assetItem))
    {
@@ -573,7 +555,7 @@ function ImportAssetWindow::processImportAssets(%this, %assetItem)
    //so we'll loop back through again until everything has been processed
    if(ImportAssetWindow.assetHeirarchyChanged)
       %this.processImportAssets();
-}
+}*/
 
 function ImportAssetWindow::findImportingAssetByName(%this, %assetName, %assetItem)
 {
@@ -642,16 +624,19 @@ function ImportAssetWindow::doRefresh(%this)
    %this.autoRenamedAssets = 0;
    
    //Go through and process any newly, unprocessed assets
-   %this.processImportAssets();
+   ImportAssetWindow.importer.processImportingAssets();
+   //%this.processImportAssets();
+   
+   //ImportAssetWindow.hasImportIssues = %this.validateAssets();
    
-   ImportAssetWindow.hasImportIssues = %this.validateAssets();
+   ImportAssetWindow.importer.validateImportingAssets();
    
    AssetImportCtrl-->NewAssetsTree.clear();
    AssetImportCtrl-->NewAssetsTree.insertItem(0, "Importing Assets");
    
-   for(%i=0; %i < ImportAssetItems.count(); %i++)
+   for(%i=0; %i < ImportAssetWindow.importer.getAssetItemCount(); %i++)
    {
-      %assetItem = ImportAssetItems.getKey(%i);
+      %assetItem = ImportAssetWindow.importer.getAssetItem(%i);
       
       %this.refreshAssetItem(%assetItem);
    }
@@ -687,16 +672,17 @@ function ImportAssetWindow::doRefresh(%this)
    //bother showing the window.
    //If any of these conditions fail, we'll display the import window so it can be handled
    //by the user
-   if(ImportAssetWindow.importConfigsList.count() != 0 && 
-      EditorSettings.value("Assets/AssetImporDefaultConfig") !$= "" && 
-      EditorSettings.value("Assets/AutoImport", false) == true
-      && ImportAssetWindow.hasImportIssues == false)
+   if(ImportAssetWindow.importConfigsList.count() != 0 
+      && EditorSettings.value("Assets/AssetImporDefaultConfig") !$= "" 
+      && EditorSettings.value("Assets/AutoImport", false) == true
+      && ImportAssetWindow.hasImportIssues == false
+      && ImportAssetWindow.allowAutoImport)
    {
       AssetImportCtrl.setHidden(true);
       ImportAssetWindow.visible = false;
       
       //Go ahead and check if we have any issues, and if not, run the import!
-      ImportAssetWindow.ImportAssets();
+      ImportAssetWindow.importer.ImportAssets();
    }
    else
    {
@@ -723,7 +709,7 @@ function ImportAssetWindow::doRefresh(%this)
    %this.dirty = false;
 }
 
-function ImportAssetWindow::refreshAssetItem(%this, %assetItem)
+function ImportAssetWindow::refreshAssetItem(%this, %assetItem, %parentTreeIdx)
 {
     if(!isObject(%assetItem) || %assetItem.skip)
       return;
@@ -733,7 +719,7 @@ function ImportAssetWindow::refreshAssetItem(%this, %assetItem)
    %assetName = %assetItem.assetName;
    
    //Once validated, attempt any fixes for issues
-   %this.resolveIssue(%assetItem);
+   ImportAssetWindow.importer.resolveAssetItemIssues(%assetItem);
    
    //create!
    %toolTip = "";
@@ -783,16 +769,15 @@ function ImportAssetWindow::refreshAssetItem(%this, %assetItem)
          %iconIdx = 7;
    }
       
-   %parentTreeIdx = %assetItem.parentAssetItem.treeIdx;
    if(%parentTreeIdx $= "")
       %parentTreeIdx = 1;
       
    %assetItem.treeIdx = AssetImportCtrl-->NewAssetsTree.insertItem(%parentTreeIdx, %assetName, %assetItem, "", %iconIdx, %iconIdx+1);
 
-   for(%i=0; %i < %assetItem.childAssetItems.count(); %i++)
+   for(%i=0; %i < ImportAssetWindow.importer.getAssetItemChildCount(%assetItem); %i++)
    {
-      %childAssetItem = %assetItem.childAssetItems.getKey(%i);
-      %this.refreshAssetItem(%childAssetItem);
+      %childAssetItem = ImportAssetWindow.importer.getAssetItemChild(%assetItem, %i);
+      %this.refreshAssetItem(%childAssetItem, %assetItem.treeIdx);
    }
 }
 
@@ -818,6 +803,8 @@ function NewAssetsViewTree::onSelect(%this, %itemId)
    //AssetImportCtrl-->NewAssetsInspector.addField("assetName", "Asset Name", "string", "", %assetItem.assetName, "", %assetItem);
    
    AssetImportCtrl-->NewAssetsInspector.addField("status", "Status", "string", "", %assetItem.status, "", %assetItem);
+   AssetImportCtrl-->NewAssetsInspector.addField("statusInfo", "Status Info", "string", "", %assetItem.statusInfo, "", %assetItem);
+   
    AssetImportCtrl-->NewAssetsInspector.endGroup();
    
    AssetImportCtrl-->NewAssetsInspector.setFieldEnabled("assetType", false);
@@ -890,7 +877,7 @@ function ImportAssetWindow::removeImportingAsset(%this)
 {
    ImportActivityLog.add("Removing Asset from Import");
    
-   %this.deleteImportingAsset(ImportAssetActions.assetItem);
+   %this.importer.deleteImportingAsset(ImportAssetActions.assetItem);
    
    //ImportAssetWindow.refresh();
 }
@@ -937,6 +924,11 @@ function ImportAssetWindow::addNewImportingAsset(%this, %filterType)
    //AssetBrowser.onDropFile( %path );
    
    %fileExt = fileExt( %filePath );
+   %fileName = fileName(%filePath);
+   
+   if(%fileExt $= ".dts" && endsWith(%fileName, ".cached"))
+      return "";
+      
    //add it to our array!
    if(isImageFormat(%fileExt))
       %type = "ImageAsset";
@@ -969,292 +961,9 @@ function ImportAssetWindow::addMaterialMap(%this, %map)
    %newAssetItem.ImageType = %map;
 }
 
-//
-function ImportAssetWindow::importResolution(%this, %assetItem)
-{
-   if(%assetItem.status !$= "Error" && %assetItem.status !$= "Warning")
-   {
-      //If nothing's wrong, we just edit it
-      ImportAssetOptionsWindow.editImportSettings(%assetItem);
-      return;
-   }
-   else
-   {
-      ImportAssetResolutionsPopup.assetItem = %assetItem;
-      if(%assetItem.statusType $= "DuplicateAsset" || %assetItem.statusType $= "DuplicateImportAsset")
-      {
-         ImportAssetResolutionsPopup.enableItem(3, false); //Rename
-         ImportAssetResolutionsPopup.enableItem(5, false); //Find Missing
-      }
-      else if(%assetItem.statusType $= "MissingFile")
-      {
-         ImportAssetResolutionsPopup.enableItem(0, false); //Use Orig
-         ImportAssetResolutionsPopup.enableItem(1, false); //Use Dupe
-         ImportAssetResolutionsPopup.enableItem(3, false); //Rename
-      }
-   }
-   
-   ImportAssetResolutionsPopup.showPopup(Canvas);  
-}
-
-function ImportAssetWindow::validateAssets(%this, %assetItem)
-{
-   ImportAssetWindow.importIssues = false;
-   
-   //Clear any status
-   %this.resetAssetsValidationStatus();
-   
-   for(%i=0; %i < ImportAssetItems.count(); %i++)
-   {
-      %assetItem = ImportAssetItems.getKey(%i);
-      
-      %this.validateAsset(%assetItem);
-   }
-   
-   if(ImportAssetWindow.importIssues == false)
-      return false;
-   else
-      return true;
-}
-
-function ImportAssetWindow::validateAsset(%this, %assetItem)
-{
-   %moduleName = AssetImportTargetModule.getText();
-   
-   if(!isObject(%assetItem) || %assetItem.skip)
-   {
-      return; 
-   }
-   
-   //First, check the obvious: name collisions. We should have no asset that shares a similar name.
-   //If we do, prompt for it be renamed first before continuing
-   %hasCollision = %this.checkAssetsForCollision(%assetItem);
-   
-   //Ran into a problem, so end checks on this one and move on
-   if(%hasCollision)
-      return;
-   
-   //No collisions of for this name in the importing assets. Now, check against the existing assets in the target module
-   if(!AssetBrowser.isAssetReImport)
-   {
-      %assetQuery = new AssetQuery();
-      
-      %numAssetsFound = AssetDatabase.findAllAssets(%assetQuery);
-
-      %foundCollision = false;
-      for( %f=0; %f < %numAssetsFound; %f++)
-      {
-         %assetId = %assetQuery.getAsset(%f);
-          
-         //first, get the asset's module, as our major categories
-         %module = AssetDatabase.getAssetModule(%assetId);
-         
-         %testModuleName = %module.moduleId;
-         
-         //These are core, native-level components, so we're not going to be messing with this module at all, skip it
-         if(%moduleName !$= %testModuleName)
-            continue;
-
-         %testAssetName = AssetDatabase.getAssetName(%assetId);
-         
-         if(%testAssetName $= %assetItem.assetName)
-         {
-            %foundCollision = true;
-            
-            %assetItem.status = "error";
-            %assetItem.statusType = "DuplicateAsset";
-            %assetItem.statusInfo = "Duplicate asset names found with the target module!\nAsset \"" @ 
-            %assetItem.assetName @ "\" of type \"" @ %assetItem.assetType @ "\" has a matching name.\nPlease rename it and try again!";
-               
-            ImportActivityLog.add("Error! Asset " @ %assetItem.assetName @ " has an identically named asset in the target module");
-
-            break;
-         }
-      }
-      
-      if(%foundCollision == true)
-      {
-         //yup, a collision, prompt for the change and bail out
-         /*MessageBoxOK( "Error!", "Duplicate asset names found with the target module!\nAsset \"" @ 
-            %assetItemA.assetName @ "\" of type \"" @ %assetItemA.assetType @ "\" has a matching name.\nPlease rename it and try again!");*/
-            
-         //%assetQuery.delete();
-         //return false;
-      }
-      
-      //Clean up our queries
-      %assetQuery.delete();
-   }
-      
-   //Check if we were given a file path(so not generated) but somehow isn't a valid file
-   if(%assetItem.filePath !$= ""  && !%assetItem.generatedAsset && !isFile(%assetItem.filePath))
-   {
-      %assetItem.status = "error";
-      %assetItem.statusType = "MissingFile";
-      %assetItem.statusInfo = "Unable to find file to be imported. Please select asset file.";
-      
-      ImportActivityLog.add("Error! Asset " @ %assetItem.filePath @ " was not found");
-   }
-   
-   if(%assetItem.status $= "Warning")
-   {
-      if(getAssetImportConfigValue("General/WarningsAsErrors", "0") == 1)
-      {
-         %assetItem.status = "error";
-         
-         ImportActivityLog.add("Warnings treated as errors!");
-      }
-   }
-   
-   if(%assetItem.status $= "error")
-      ImportAssetWindow.importIssues = true;
-      
-   for(%i=0; %i < %assetItem.childAssetItems.count(); %i++)
-   {
-      %childAssetItem = %assetItem.childAssetItems.getKey(%i);
-      
-      %this.validateAsset(%childAssetItem);
-   }
-}
-//
-
-function ImportAssetWindow::resetAssetsValidationStatus(%this, %assetItem)
-{
-   if(!isObject(%assetItem))
-   {
-      for(%i=0; %i < ImportAssetItems.count(); %i++)
-      {
-         %assetItem = ImportAssetItems.getKey(%i);
-         
-         if(!isObject(%assetItem) || %assetItem.skip)
-            continue;
-            
-         %assetItem.status = "";
-         %assetItem.statusType = "";
-         %assetItem.statusInfo = "";
-         
-         if(%assetItem.childAssetItems.count() != 0)
-            %this.resetAssetsValidationStatus(%assetItem);
-      }
-   }
-   else
-   {
-      for(%i=0; %i < %assetItem.childAssetItems.count(); %i++)
-      {
-         %childAssetItem = %assetItem.childAssetItems.getKey(%i);
-         
-         if(!isObject(%childAssetItem) || %childAssetItem.skip)
-            continue;
-            
-         %childAssetItem.status = "";
-         %childAssetItem.statusType = "";
-         %childAssetItem.statusInfo = "";
-         
-         if(%childAssetItem.childAssetItems.count() != 0)
-            %this.resetAssetsValidationStatus(%childAssetItem);
-      }
-   }
-}
-
-function ImportAssetWindow::checkAssetsForCollision(%this, %assetItemToCheck, %assetItem)
-{
-   %result = false;
-   
-   if(!isObject(%assetItem))
-   {
-      for(%i=0; %i < ImportAssetItems.count(); %i++)
-      {
-         %assetItem = ImportAssetItems.getKey(%i);
-         
-         if(!isObject(%assetItem) || %assetItem.skip)
-            continue;
-            
-         if( (%assetItemToCheck.assetName $= %assetItem.assetName) && (%assetItemToCheck.getId() != %assetItem.getId()) )
-         {
-            //yup, a collision, prompt for the change and bail out
-            %assetItemToCheck.status = "Warning";
-            %assetItemToCheck.statusType = "DuplicateImportAsset";
-            %assetItemToCheck.statusInfo = "Duplicate asset names found with importing assets!\nAsset \"" @ 
-               %assetItem.assetName @ "\" of type \"" @ %assetItem.assetType @ "\" and \"" @
-               %assetItemToCheck.assetName @ "\" of type \"" @ %assetItemToCheck.assetType @ "\" have matching names.\nPlease rename one of them and try again!";
-               
-            ImportActivityLog.add("Warning! Asset " @ %assetItemToCheck.assetName @ ", type " @ %assetItemToCheck.assetType @ " has a naming collisions with asset " @ %assetItem.assetName @ ", type " @ %assetItem.assetType);
-
-            return true;
-         }
-         
-         if(%assetItem.childAssetItems.count() != 0)
-         {
-            //recurse!
-            %result = %this.checkAssetsForCollision(%assetItemToCheck, %assetItem); 
-         }
-            
-         if(%result)
-            return %result;
-      }
-   }
-   else
-   {
-      for(%i=0; %i < %assetItem.childAssetItems.count(); %i++)
-      {
-         %childAssetItem = %assetItem.childAssetItems.getKey(%i);
-         
-         if(!isObject(%childAssetItem) || %childAssetItem.skip)
-            continue;
-            
-         if( (%assetItemToCheck.assetName $= %childAssetItem.assetName) && (%assetItemToCheck.getId() != %childAssetItem.getId()) )
-         {
-            //yup, a collision, prompt for the change and bail out
-            %assetItemToCheck.status = "Warning";
-            %assetItemToCheck.statusType = "DuplicateImportAsset";
-            %assetItemToCheck.statusInfo = "Duplicate asset names found with importing assets!\nAsset \"" @ 
-               %childAssetItem.assetName @ "\" of type \"" @ %childAssetItem.assetType @ "\" and \"" @
-               %assetItemToCheck.assetName @ "\" of type \"" @ %assetItemToCheck.assetType @ "\" have matching names.\nPlease rename one of them and try again!";
-               
-            ImportActivityLog.add("Warning! Asset " @ %assetItemToCheck.assetName @ ", type " @ %assetItemToCheck.assetType @ " has a naming collisions with asset " @ %childAssetItem.assetName @ ", type " @ %childAssetItem.assetType);
-
-            return true;
-         }
-         
-         if(%childAssetItem.childAssetItems.count() != 0)
-         {
-            //recurse!
-            %result = %this.checkAssetsForCollision(%assetItemToCheck, %childAssetItem); 
-         }
-         
-         if(%result)
-            return %result;
-      }
-   }
-   
-   return %result;
-}
-
-//
-function ImportAssetWindow::deleteImportingAsset(%this, %assetItem)
-{
-   if(%assetItem.parentAssetItem !$= "")
-   {
-      %idx = %assetItem.parentAssetItem.childAssetItems.getIndexFromKey(%assetItem);
-      %assetItem.parentAssetItem.childAssetItems.erase(%idx);
-      
-      ImportActivityLog.add("Deleting Importing Asset " @ %assetItem.assetName @ " from it's parent item: " @ %assetItem.parentAssetItem);
-   }
-
-   ImportActivityLog.add("Deleting Importing Asset " @ %assetItem.assetName @ " and all it's child items");
-   
-   %idx = ImportAssetItems.getIndexFromKey(%assetItem);
-   ImportAssetItems.erase(%idx);
-   
-   schedule(10, 0, "refreshImportAssetWindow");
-}
-
 //
 function ImportAssetWindow::ImportAssets(%this)
 {
-   //do the actual importing, now!
-   %assetCount = ImportAssetItems.count();
-   
    //get the selected module data
    %moduleName = AssetImportTargetModule.getText();
    
@@ -1266,255 +975,34 @@ function ImportAssetWindow::ImportAssets(%this)
       return;
    }
    
-   %this.doImportAssets();
+   Canvas.pushDialog( EditorLoadingGui );
+   Canvas.repaint();
+   
+   %this.importer.targetModuleId = %moduleName;
+   %this.importer.targetPath = AssetImportTargetAddress.getText();
+   
+   %this.importer.importAssets();
    
    //force an update of any and all modules so we have an up-to-date asset list
    AssetBrowser.refresh();
    Canvas.popDialog(AssetImportCtrl);
    AssetBrowser.isAssetReImport = false;
-}
-
-function ImportAssetWindow::doImportAssets(%this, %assetItem)
-{
-   %moduleName = AssetImportTargetModule.getText();
    
-   if(%assetItem $= "")
-   {
-      for(%i=0; %i < ImportAssetItems.count(); %i++)
-      {
-         %assetItem = ImportAssetItems.getKey(%i);
-         
-         if(!isObject(%assetItem) || %assetItem.skip)
-            continue;  
-         
-         %assetType = %assetItem.AssetType;
-         %filePath = %assetItem.filePath;
-         %assetName = %assetItem.assetName;
-         %assetImportSuccessful = false;
-         %assetId = %moduleName@":"@%assetName;
-         
-         %command = "AssetBrowser.import" @ %assetType @ "(" @ %assetItem @ ");";
-         eval(%command);
-         
-         //recurse if needed
-         %this.doImportAssets(%assetItem);
-      }
-   }
-   else
-   {
-      for(%i=0; %i < %assetItem.childAssetItems.count(); %i++)
-      {
-         %childAssetItem = %assetItem.childAssetItems.getKey(%i);
-         
-         if(!isObject(%childAssetItem) || %childAssetItem.skip)
-            continue;  
-         
-         %assetType = %childAssetItem.AssetType;
-         %filePath = %childAssetItem.filePath;
-         %assetName = %childAssetItem.assetName;
-         %assetImportSuccessful = false;
-         %assetId = %moduleName@":"@%assetName;
-         
-         %command = "AssetBrowser.import" @ %assetType @ "(" @ %childAssetItem @ ");";
-         eval(%command);
-         
-         //recurse if needed
-         %this.doImportAssets(%childAssetItem);
-      }
-   }
-}
-
-function ImportAssetWindow::doImportAsset(%this, %assetItem)
-{
-   %assetItem = ImportAssetTree.getItemObject(%id);
-      
-   if(!isObject(%assetItem) || %assetItem.skip)
-   {
-      %id = ImportAssetTree.getNextSibling(%id);
-      continue;  
-   }
+   %this.importer.resetImportSession(true);
    
-   %assetType = %assetItem.AssetType;
-   %filePath = %assetItem.filePath;
-   %assetName = %assetItem.assetName;
-   %assetImportSuccessful = false;
-   %assetId = %moduleName@":"@%assetName;
+   Canvas.popDialog( EditorLoadingGui );
    
-   if(%assetType $= "ImageAsset")
-   {
-      AssetBrowser.importImageAsset(%assetItem);
-   }
-   else if(%assetType $= "ShapeAsset")
-   {
-      AssetBrowser.importShapeAsset(%assetItem);
-   }
-   else if(%assetType $= "AnimationAsset")
-   {
-      %assetPath = "data/" @ %moduleName @ "/ShapeAnimations";
-      %assetFullPath = %assetPath @ "/" @ fileName(%filePath);
-      
-      %newAsset = new ShapeAnimationAsset()
-      {
-         assetName = %assetName;
-         versionId = 1;
-         fileName = %assetFullPath;
-         originalFilePath = %filePath;
-         animationFile = %assetFullPath;
-         animationName = %assetName;
-         startFrame = 0;
-         endFrame = -1;
-         padRotation = false;
-         padTransforms = false;
-      };
+   //do the actual importing, now!
+   /*%assetCount = ImportAssetItems.count();
 
-      %assetImportSuccessful = TAMLWrite(%newAsset, %assetPath @ "/" @ %assetName @ ".asset.taml"); 
-      
-      //and copy the file into the relevent directory
-      %doOverwrite = !AssetBrowser.isAssetReImport;
-      if(!pathCopy(%filePath, %assetFullPath, %doOverwrite))
-      {
-         error("Unable to import asset: " @ %filePath);
-      }
-   }
-   else if(%assetType $= "SoundAsset")
-   {
-      %assetPath = "data/" @ %moduleName @ "/Sounds";
-      %assetFullPath = %assetPath @ "/" @ fileName(%filePath);
-      
-      %newAsset = new SoundAsset()
-      {
-         assetName = %assetName;
-         versionId = 1;
-         fileName = %assetFullPath;
-         originalFilePath = %filePath;
-      };
-      
-      %assetImportSuccessful = TAMLWrite(%newAsset, %assetPath @ "/" @ %assetName @ ".asset.taml"); 
-      
-      //and copy the file into the relevent directory
-      %doOverwrite = !AssetBrowser.isAssetReImport;
-      if(!pathCopy(%filePath, %assetFullPath, %doOverwrite))
-      {
-         error("Unable to import asset: " @ %filePath);
-      }
-   }
-   else if(%assetType $= "MaterialAsset")
-   {
-      AssetBrowser.importMaterialAsset(%assetItem);
-   }
-   else if(%assetType $= "ScriptAsset")
-   {
-      %assetPath = "data/" @ %moduleName @ "/Scripts";
-      %assetFullPath = %assetPath @ "/" @ fileName(%filePath);
-      
-      %newAsset = new ScriptAsset()
-      {
-         assetName = %assetName;
-         versionId = 1;
-         scriptFilePath = %assetFullPath;
-         isServerSide = true;
-         originalFilePath = %filePath;
-      };
-      
-      %assetImportSuccessful = TAMLWrite(%newAsset, %assetPath @ "/" @ %assetName @ ".asset.taml"); 
-      
-      //and copy the file into the relevent directory
-      %doOverwrite = !AssetBrowser.isAssetReImport;
-      if(!pathCopy(%filePath, %assetFullPath, %doOverwrite))
-      {
-         error("Unable to import asset: " @ %filePath);
-      }
-   }
-   else if(%assetType $= "GUIAsset")
-   {
-      %assetPath = "data/" @ %moduleName @ "/GUIs";
-      %assetFullPath = %assetPath @ "/" @ fileName(%filePath);
-      
-      %newAsset = new GUIAsset()
-      {
-         assetName = %assetName;
-         versionId = 1;
-         GUIFilePath = %assetFullPath;
-         scriptFilePath = "";
-         originalFilePath = %filePath;
-      };
-      
-      %assetImportSuccessful = TAMLWrite(%newAsset, %assetPath @ "/" @ %assetName @ ".asset.taml"); 
-      
-      //and copy the file into the relevent directory
-      %doOverwrite = !AssetBrowser.isAssetReImport;
-      if(!pathCopy(%filePath, %assetFullPath, %doOverwrite))
-      {
-         error("Unable to import asset: " @ %filePath);
-      }
-   }
    
-   if(%assetImportSuccessful)
-   {
-      %moduleDef = ModuleDatabase.findModule(%moduleName,1);
-      
-      if(!AssetBrowser.isAssetReImport)
-         AssetDatabase.addDeclaredAsset(%moduleDef, %assetPath @ "/" @ %assetName @ ".asset.taml");
-      else
-         AssetDatabase.refreshAsset(%assetId);
-   }
    
-   if(ImportAssetTree.isParentItem(%id))
-   {
-      %childItem = ImportAssetTree.getChild(%id);
-      
-      //recurse!
-      %this.doImportAssets(%childItem); 
-   }
-
-   %id = ImportAssetTree.getNextSibling(%id);
-}
-
-function ImportAssetWindow::resolveIssue(%this, %assetItem)
-{
-   //Ok, we actually have a warning, so lets resolve
-   if(%assetItem.statusType $= "DuplicateImportAsset" || %assetItem.statusType $= "DuplicateAsset")
-   {
-      %resolutionAction = getAssetImportConfigValue("General/DuplicatAutoResolution", "AutoPrune");
-      
-      %humanReadableStatus = %assetItem.statusType $= "DuplicateImportAsset" ? "Duplicate Import Asset" : "Duplicate Asset";
-      
-      if(%resolutionAction $= "AutoPrune")
-      {
-         %this.deleteImportingAsset(%assetItem);
-         %this.prunedDuplicateAssets++;
-         
-         ImportActivityLog.add("Asset " @ %assetItem.assetName @ " was Autopruned due to " @ %humanReadableStatus);
-      }
-      else if(%resolutionAction $= "AutoRename")
-      {
-         ImportActivityLog.add("Asset " @ %assetItem.assetName @ " was Auto-Renamed due to " @ %humanReadableStatus);
-         
-         %noNum = stripTrailingNumber(%assetItem.assetName);
-         %num = getTrailingNumber(%assetItem.assetName);
-         
-         if(%num == -1)
-         {
-            %assetItem.assetName = %noNum @ "1";  
-         }
-         else
-         {
-            %num++;
-            %assetItem.assetName = %noNum @ %num; 
-         }
-         
-         ImportActivityLog.add("   New name is " @ %assetItem.assetName);
-         
-         %this.autoRenamedAssets++;
-      }
-   }
-   else if(%assetItem.statusType $= "MissingFile")
-   {
-      if(getAssetImportConfigValue("General/AutomaticallyPromptMissingFiles", "0") == 1)
-      {
-         %this.findMissingFile(%assetItem);
-      }
-   }
+   %this.doImportAssets();
+   
+   //force an update of any and all modules so we have an up-to-date asset list
+   AssetBrowser.refresh();
+   Canvas.popDialog(AssetImportCtrl);
+   AssetBrowser.isAssetReImport = false;*/
 }
 
 function ImportAssetWindow::findMissingFile(%this, %assetItem)

+ 10 - 3
Templates/BaseGame/game/tools/assetBrowser/scripts/assetImportConfig.cs

@@ -10,11 +10,18 @@ function ImportAssetConfigList::onSelect( %this, %id, %text )
    ImportActivityLog.add("");
    
    ImportAssetWindow.activeImportConfigIndex = %id;
-   ImportAssetWindow.activeImportConfig = ImportAssetWindow.importConfigsList.getKey(%id);
+   //ImportAssetWindow.activeImportConfig = ImportAssetWindow.importConfigsList.getKey(%id);
+   
+   if(!isObject(%this.activeImporConfig))
+      %this.activeImporConfig = new AssetImportConfig();
+      
+   %this.activeImporConfig.loadImportConfig(AssetImportSettings, ImportAssetWindow.importConfigsList.getKey(%id));
    
    //If we were trying to import anything, refresh it with the new config
-   if( ImportAssetWindow.importingFilesArray.count() != 0)
-      AssetBrowser.reloadImportingFiles();
+   ImportAssetWindow.importer.resetImportSession();
+   
+   //if( ImportAssetWindow.importingFilesArray.count() != 0)
+   //   AssetBrowser.reloadImportingFiles();
 }
 
 function setupImportConfigSettingsList()

+ 3 - 3
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/cubemap.cs

@@ -95,14 +95,14 @@ function GuiInspectorTypeCubemapAssetPtr::onControlDropped( %this, %payload, %po
    if( !%payload.parentGroup.isInNamespaceHierarchy( "AssetPreviewControlType_AssetDrop" ) )
       return;
 
-   %assetType = %payload.dragSourceControl.parentGroup.assetType;
+   %assetType = %payload.assetType;
    
    if(%assetType $= "CubemapAsset")
    {
       echo("DROPPED A CUBEMAP ON A CUBEMAP ASSET COMPONENT FIELD!");  
       
-      %module = %payload.dragSourceControl.parentGroup.moduleName;
-      %asset = %payload.dragSourceControl.parentGroup.assetName;
+      %module = %payload.moduleName;
+      %asset = %payload.assetName;
       
       %targetComponent = %this.object;
       %targetComponent.CubemapAsset = %module @ ":" @ %asset;

+ 38 - 6
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/datablockObjects.cs

@@ -42,15 +42,26 @@ function AssetBrowser::doCreateNewDatablock(%this)
 
 function AssetBrowser::buildDatablockPreview(%this, %assetDef, %previewData)
 {
-   %previewData.assetName = %assetDef.assetName;
-   %previewData.assetPath = %assetDef.dirPath;
+   %previewData.assetName = %assetDef;
+   %previewData.assetPath = "";
    
-   %previewData.previewImage = "tools/assetBrowser/art/scriptIcon";
+   %previewData.previewImage = "tools/assetBrowser/art/datablockIcon";
    
    //%previewData.assetFriendlyName = %assetDef.assetName;
-   %previewData.assetDesc = %assetDef.description;
-   %previewData.tooltip = %assetDef.dirPath;
-   %previewData.doubleClickCommand = "AssetBrowser.schedule(10, \"navigateTo\",\""@ %assetDef.dirPath @ "/" @ %assetDef.assetName @"\");";//browseTo %assetDef.dirPath / %assetDef.assetName
+   %previewData.assetDesc = %assetDef;
+   %previewData.tooltip = %assetDef;
+   %previewData.doubleClickCommand = "AssetBrowser.schedule(10, \"spawnDatablockObject\",\""@ %assetDef @"\");";//browseTo %assetDef.dirPath / %assetDef.assetName
+}
+
+function spawnDatablockObject(%datablock)
+{
+   %name = %datablock.getName();
+   %class = %datablock.getClassName();
+   %cmd = %class @ "::create(" @ %name @ ");";
+      
+   %shapePath = ( %datablock.shapeFile !$= "" ) ? %datablock.shapeFile : %datablock.shapeName;
+   %createCmd = "EWCreatorWindow.createObject( \\\"" @ %cmd @ "\\\" );";
+   return eval("showImportDialog( \"" @ %shapePath @ "\", \"" @ %createCmd @ "\" );");
 }
 
 function AssetBrowser::renameDatablock(%this, %folderPath, %newFolderName)
@@ -124,4 +135,25 @@ function AssetBrowser::deleteDatablock(%this, %folderPath)
    %this.dirHandler.deleteDatablock(%folderPath);
    
    %this.refresh();
+}
+
+function AssetBrowser::onDatablockEditorDropped(%this, %assetDef, %position)
+{
+   %targetPosition = EWorldEditor.unproject(%position SPC 1000);
+   %camPos = LocalClientConnection.camera.getPosition();
+   %rayResult = containerRayCast(%camPos, %targetPosition, -1);
+   
+   %pos = EWCreatorWindow.getCreateObjectPosition();
+
+   if(%rayResult != 0)
+   {
+      %pos = getWords(%rayResult, 1, 3);
+   }
+   else
+   {
+      %pos = "0 0 0";  
+   }
+   
+   %newObj = spawnDatablockObject(%assetDef);
+   %newObj.position = %pos;
 }

+ 1 - 1
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.cs

@@ -261,7 +261,7 @@ function GuiInspectorTypeImageAssetPtr::onControlDropped( %this, %payload, %posi
    if( !%payload.parentGroup.isInNamespaceHierarchy( "AssetPreviewControlType_AssetDrop" ) )
       return;
 
-   %assetType = %payload.dragSourceControl.parentGroup.assetType;
+   %assetType = %payload.assetType;
    
    if(%assetType $= "ImageAsset")
    {

+ 4 - 0
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/level.cs

@@ -7,6 +7,10 @@ function AssetBrowser::setupCreateNewLevelAsset(%this)
    NewAssetPropertiesInspector.endGroup();
 }
 
+function AssetImporter::importLevelAsset(%this, %assetItem)
+{
+}
+
 function AssetBrowser::createLevelAsset(%this)
 {
    %moduleName = AssetBrowser.newAssetSettings.moduleName;

+ 14 - 0
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/looseFiles.cs

@@ -0,0 +1,14 @@
+function AssetBrowser::buildLooseFilePreview(%this, %assetDef, %previewData)
+{
+   %fullPath = %assetDef.dirPath @ "/" @ %assetDef.assetName;
+   %previewData.assetName = %assetDef.assetName;
+   %previewData.assetPath = %fullPath;
+   
+   %previewData.previewImage = "tools/assetBrowser/art/looseFileIcon";
+   
+   //%previewData.assetFriendlyName = %assetDef.assetName;
+   %previewData.assetDesc = %assetDef.description;
+   %previewData.tooltip = %fullPath;
+   //%previewData.doubleClickCommand = "AssetBrowser.schedule(10, \"navigateTo\",\""@ %assetDef.dirPath @ "/" @ %assetDef.assetName @"\");";//browseTo %assetDef.dirPath / %assetDef.assetName
+   %previewData.doubleClickCommand = "AssetBrowser.autoImportFile(\"" @ %fullPath @ "\");";
+}

+ 4 - 4
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.cs

@@ -432,7 +432,7 @@ function AssetBrowser::importMaterialAsset(%this, %assetItem)
 
 function AssetBrowser::buildMaterialAssetPreview(%this, %assetDef, %previewData)
 {
-   %previewData.assetName = %assetDef.materialDefinitionName;
+   %previewData.assetName = %assetDef.assetName;
    %previewData.assetPath = %assetDef.scriptFile;
 
    //Lotta prepwork
@@ -501,9 +501,9 @@ function GuiInspectorTypeMaterialAssetPtr::onControlDropped( %this, %payload, %p
    if( !%payload.parentGroup.isInNamespaceHierarchy( "AssetPreviewControlType_AssetDrop" ) )
       return;
 
-   %assetType = %payload.dragSourceControl.parentGroup.assetType;
-   %module = %payload.dragSourceControl.parentGroup.moduleName;
-   %assetName = %payload.dragSourceControl.parentGroup.assetName;
+   %assetType = %payload.assetType;
+   %module = %payload.moduleName;
+   %assetName = %payload.assetName;
    
    if(%assetType $= "MaterialAsset")
    {

+ 14 - 0
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/prefab.cs

@@ -0,0 +1,14 @@
+function AssetBrowser::buildPrefabPreview(%this, %assetDef, %previewData)
+{
+   %fullPath = %assetDef.dirPath @ "/" @ %assetDef.assetName;
+   %previewData.assetName = %assetDef.assetName;
+   %previewData.assetPath = %fullPath;
+   
+   %previewData.previewImage = "tools/assetBrowser/art/genericAssetIcon";
+   
+   //%previewData.assetFriendlyName = %assetDef.assetName;
+   %previewData.assetDesc = %assetDef.description;
+   %previewData.tooltip = %fullPath;
+   //%previewData.doubleClickCommand = "AssetBrowser.schedule(10, \"navigateTo\",\""@ %assetDef.dirPath @ "/" @ %assetDef.assetName @"\");";//browseTo %assetDef.dirPath / %assetDef.assetName
+   %previewData.doubleClickCommand = "AssetBrowser.autoImportFile(\"" @ %fullPath @ "\");";
+}

+ 8 - 4
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.cs

@@ -270,6 +270,10 @@ function AssetBrowser::onShapeAssetEditorDropped(%this, %assetDef, %position)
    {
       %pos = getWords(%rayResult, 1, 3);
    }
+   else
+   {
+      %pos = "0 0 0";  
+   }
    
    %assetId = %assetDef.getAssetId();
    
@@ -296,17 +300,17 @@ function GuiInspectorTypeShapeAssetPtr::onControlDropped( %this, %payload, %posi
    if( !%payload.parentGroup.isInNamespaceHierarchy( "AssetPreviewControlType_AssetDrop" ) )
       return;
 
-   %assetType = %payload.dragSourceControl.parentGroup.assetType;
+   %assetType = %payload.assetType;
    
    if(%assetType $= "ShapeAsset")
    {
       //echo("DROPPED A SHAPE ON A SHAPE ASSET COMPONENT FIELD!");  
       
-      %module = %payload.dragSourceControl.parentGroup.moduleName;
-      %asset = %payload.dragSourceControl.parentGroup.assetName;
+      %module = %payload.moduleName;
+      %asset = %payload.assetName;
       
       %targetComponent = %this.targetObject;
-      %targetComponent.MeshAsset = %module @ ":" @ %asset;
+      %targetComponent.shapeAsset = %module @ ":" @ %asset;
       
       //Inspector.refresh();
    }

+ 20 - 4
Templates/BaseGame/game/tools/assetBrowser/scripts/directoryHandling.cs

@@ -58,7 +58,7 @@ function directoryHandler::loadFolders(%this, %path, %parentId)
          //   %iconIdx = 1;
          
          %searchFoldersText = %this.searchFilter;
-         if(%searchFoldersText !$= "Search Folders...")
+         if(%searchFoldersText !$= "")
          {
             if(strstr(strlwr(%folderName), strlwr(%searchFoldersText)) != -1)
             {
@@ -123,7 +123,7 @@ function directoryHandler::navigateTo(%this, %address, %historyNav, %selectionNa
 
    //find our folder tree and action on it tree
    %folderId = %this.getFolderTreeItemFromAddress(%address);
-   
+
    %this.oldAddress = %this.currentAddress;   
    %this.currentAddress = %address;
    %this.selectedItem = %folderId;
@@ -197,7 +197,15 @@ function directoryHandler::getFolderTreeItemFromAddress(%this, %address)
    //break down the address
    %folderCount = getTokenCount(%address, "/");
 
-   %curItem = 0;
+   if(startsWith(%address, "Data/") || startsWith(%address, "Tools/") || startsWith(%address, "Core/"))
+   {
+      %curItem = %this.treeCtrl.findChildItemByName(1, "Modules");
+   }
+   else
+   {
+      %curItem = 1;
+   }
+   
    %rebuiltPath = "";
    for(%f=0; %f < %folderCount; %f++)
    {
@@ -214,7 +222,15 @@ function directoryHandler::expandTreeToAddress(%this, %address)
    %folderCount = getTokenCount(%address, "/");
    %this.treeCtrl.expandItem(0);
 
-   %curItem = 0;
+   if(startsWith(%address, "Data/") || startsWith(%address, "Tools/") || startsWith(%address, "Core/"))
+   {
+      %curItem = %this.treeCtrl.findChildItemByName(1, "Modules");
+   }
+   else
+   {
+      %curItem = 1;
+   }
+   
    %rebuiltPath = "";
    for(%f=0; %f < %folderCount; %f++)
    {

+ 34 - 1
Templates/BaseGame/game/tools/assetBrowser/scripts/editModule.cs

@@ -15,7 +15,40 @@ function AssetBrowser::CreateNewModule(%this)
    Canvas.pushDialog(AssetBrowser_AddModule); 
    AssetBrowser_addModuleWindow.selectWindow();  
    
-   AssetBrowser_addModuleWindow.callbackFunction = "AssetBrowser.loadDirectories();";
+   AssetBrowser_addModuleWindow.callbackFunction = "AssetBrowser.promptNewModuleFolders();";
+}
+
+function AssetBrowser::promptNewModuleFolders(%this)
+{
+   MessageBoxYesNo("Create Folders?", 
+         "Do you want to create some common folders for organization of your new Module?", 
+         "AssetBrowser.makeModuleFolders();",  //if yes, make the foldesr
+         "AssetBrowser.loadDirectories();");  //if no, just refresh
+}
+
+function AssetBrowser::makeModuleFolders(%this)
+{
+   %moduleId = AssetBrowser.newModuleId;
+   %moduleDef = ModuleDatabase.findModule(%moduleId);
+   %modulePath = %moduleDef.ModulePath;
+   
+   %count = 0;
+   %defaultModuleFolders[%count++] = "datablocks";
+   %defaultModuleFolders[%count++] = "terrains";
+   %defaultModuleFolders[%count++] = "postFXs";
+   %defaultModuleFolders[%count++] = "levels";
+   %defaultModuleFolders[%count++] = "shapes";
+   %defaultModuleFolders[%count++] = "guis";
+   %defaultModuleFolders[%count++] = "scripts";
+   %defaultModuleFolders[%count++] = "scripts/client";
+   %defaultModuleFolders[%count++] = "scripts/server";
+   
+   for(%i=0; %i <= %count; %i++)
+   {
+      %this.dirHandler.createFolder(%modulePath @ "/" @ %defaultModuleFolders[%i]);
+   }
+   
+   AssetBrowser.loadDirectories();
 }
 
 function AssetBrowser::createNewEditorTool(%this)

+ 4 - 0
Templates/BaseGame/game/tools/assetBrowser/scripts/looseFileAudit.cs

@@ -215,6 +215,8 @@ function LooseFileAuditWindow::importGUI(%this)
    if(!ImportAssetWindow.isAwake())
       ImportAssetWindow.showDialog();
       
+   ImportAssetWindow.allowAutoImport = false;
+      
    AssetBrowser.addImportingAsset("GUIAsset", LooseFileList.itemPath, "", "");
    LooseFileList.removeItem(LooseFileList.selectedItem, false);
    LooseFileList.buildVisibleTree(true);
@@ -226,6 +228,8 @@ function LooseFileAuditWindow::importLevel(%this)
    if(!ImportAssetWindow.isAwake())
       ImportAssetWindow.showDialog();
       
+   ImportAssetWindow.allowAutoImport = false;
+   
    AssetBrowser.addImportingAsset("LevelAsset", LooseFileList.itemPath, "", "");
    LooseFileList.removeItem(LooseFileList.selectedItem, false);
    LooseFileList.buildVisibleTree(true);

+ 15 - 21
Templates/BaseGame/game/tools/assetBrowser/scripts/popupMenus.cs

@@ -87,9 +87,9 @@ function AssetBrowser::buildPopupMenus(%this)
          class = "EditorWorldMenu";
          //isPopup = true;
 
-         item[ 0 ] = "Create Component" TAB AddNewComponentAssetPopup;
-         item[ 1 ] = "Create Script" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ScriptAsset\", AssetBrowser.selectedModule);";
-         item[ 2 ] = "Create State Machine" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"StateMachineAsset\", AssetBrowser.selectedModule);";
+         //item[ 0 ] = "Create Component" TAB AddNewComponentAssetPopup;
+         item[ 0 ] = "Create Script" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ScriptAsset\", AssetBrowser.selectedModule);";
+         item[ 1 ] = "Create State Machine" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"StateMachineAsset\", AssetBrowser.selectedModule);";
          //item[ 3 ] = "-";
          //item[ 3 ] = "Create Game Object" TAB "" TAB "AssetBrowser.createNewGameObjectAsset(\"NewGameObject\", AssetBrowser.selectedModule);";
       };
@@ -239,22 +239,6 @@ function AssetBrowser::buildPopupMenus(%this)
       };
    }
    
-   //Asset Preview size presets
-   if( !isObject( AssetPreviewSizePopup ) )
-   {
-      new PopupMenu( AssetPreviewSizePopup )
-      {
-         superClass = "MenuBuilder";
-         class = "EditorWorldMenu";
-         
-         item[ 0 ] = "Small" TAB "" TAB "AssetBrowser.setPreviewSize(\"Small\");";
-         item[ 1 ] = "Medium" TAB "" TAB "AssetBrowser.setPreviewSize(\"Medium\");";
-         Item[ 2 ] = "Large" TAB "" TAB "AssetBrowser.setPreviewSize(\"Large\");";
-      };
-      
-      AssetPreviewSizePopup.checkItem(0, true);
-   }
-   
    if( !isObject( AssetTypeListPopup ) )
    {
       new PopupMenu( AssetTypeListPopup )
@@ -295,8 +279,6 @@ function AssetBrowser::buildPopupMenus(%this)
          item[ 7 ] = "Filter by Asset Type" TAB AssetTypeListPopup;
          item[ 8 ] = "-";
          item[ 9 ] = "Enable Auto-refresh" TAB "" TAB "AssetBrowser.toggleAutorefresh();";
-         Item[ 10 ] = "-";
-         Item[ 11 ] = "Asset Preview Size" TAB AssetPreviewSizePopup;
       };
       
       BrowserVisibilityPopup.enableItem(5, false);
@@ -408,6 +390,18 @@ function AssetBrowser::buildPopupMenus(%this)
       
       AddNewModulePopup.enableItem(1, false);
    }
+   
+   if( !isObject( EditCollectionSets ) )
+   {
+      new PopupMenu( EditCollectionSets )
+      {
+         superClass = "MenuBuilder";
+         class = "EditorWorldMenu";
+         //isPopup = true;
+         
+         item[ 0 ] = "Delete Collection Set" TAB "" TAB "AssetBrowser.deleteCollectionSet();";
+      };
+   }
 }
 
 function AddNewScriptAssetPopupMenu::onSelectItem(%this, %id, %text)

+ 27 - 0
Templates/BaseGame/game/tools/assetBrowser/scripts/profiles.cs

@@ -0,0 +1,27 @@
+singleton GuiControlProfile(AssetBrowserPreviewImageAsset : ToolsGuiDefaultProfile)
+{
+   fillColor = "128 128 128 255"; //hovered/selected
+   //fillColorNA = "230 126 0 255"; //fill color default
+   
+   border = true;
+   borderColor   = "230 126 0 255";
+   borderColorNA = "230 126 0 255";
+};
+
+singleton GuiControlProfile(AssetBrowserPreviewMaterialAsset : ToolsGuiDefaultProfile)
+{
+   fillColor = "128 128 128 255"; //hovered/selected
+   
+   border = true;
+   borderColor   = "0 100 0 255";
+   borderColorNA = "0 100 0 255";
+};
+
+singleton GuiControlProfile(AssetBrowserPreviewShapeAsset : ToolsGuiDefaultProfile)
+{
+   fillColor = "128 128 128 255"; //hovered/selected
+   
+   border = true;
+   borderColor   = "0 0 200 255";
+   borderColorNA = "0 0 200 255";
+};

+ 2 - 1
Templates/BaseGame/game/tools/base/menuBar/menuBuilder.ed.cs

@@ -120,6 +120,7 @@ function MenuBuilder::addItem(%this, %pos, %item)
    %name = getField(%item, 0);
    %accel = getField(%item, 1);
    %cmd = getField(%item, 2);
+   %bitmapIdx = getField(%item, 3);
    
    // We replace the [this] token with our object ID
    %cmd = strreplace( %cmd, "[this]", %this );
@@ -132,7 +133,7 @@ function MenuBuilder::addItem(%this, %pos, %item)
    }
    else
    {
-      %this.insertItem(%pos, %name !$= "-" ? %name : "", %accel, %cmd);
+      %this.insertItem(%pos, %name !$= "-" ? %name : "", %accel, %cmd, %bitmapIdx $= "" ? -1 : %bitmapIdx);
    }
 }
 

+ 1 - 0
Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.cs

@@ -485,6 +485,7 @@ function ESettingsWindow::getAssetEditingSettings(%this)
    SettingsInspector.addSettingsField("Assets/Browser/showFolders", "Show Folders in Tiles view in Asset Browser", "bool", "");
    SettingsInspector.addSettingsField("Assets/Browser/showEmptyFolders", "Show Empty Folders in Tiles view in Asset Browser", "bool", "");
    SettingsInspector.addSettingsField("Assets/Browser/previewTileSize", "Asset Preview Tile Size", "bool", "");
+   SettingsInspector.addSettingsField("Assets/Browser/showLooseFiles", "Show Loose Files when viewing in Asset Browser", "bool", "");
    SettingsInspector.addSettingsField("AssetManagement/Assets/promptOnRename", "Prompt on Rename", "bool", "");
    SettingsInspector.endGroup();
 }

BIN
Templates/BaseGame/game/tools/gui/images/stencilIcons/cross.png


BIN
Templates/BaseGame/game/tools/gui/images/stencilIcons/filter.png


BIN
Templates/BaseGame/game/tools/gui/images/stencilIcons/import.png


BIN
Templates/BaseGame/game/tools/gui/images/stencilIcons/menuGrid.png


BIN
Templates/BaseGame/game/tools/gui/images/stencilIcons/phone.png


BIN
Templates/BaseGame/game/tools/gui/images/stencilIcons/plus.png


BIN
Templates/BaseGame/game/tools/gui/images/stencilIcons/previous.png


BIN
Templates/BaseGame/game/tools/gui/images/stencilIcons/return.png


BIN
Templates/BaseGame/game/tools/gui/images/stencilIcons/warning.png


BIN
Templates/BaseGame/game/tools/gui/images/stencilIcons/zoom.png


+ 3 - 1
Templates/BaseGame/game/tools/gui/profiles.ed.cs

@@ -305,7 +305,7 @@ new GuiControlProfile( ToolsGuiTextEditProfile )
    fontColor = EditorSettings.value("Theme/fieldTextColor");
    fontColorSEL = EditorSettings.value("Theme/fieldBGSELColor");
    fontColorHL = EditorSettings.value("Theme/fieldTextSELColor");
-   fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
+   fontColorNA = EditorSettings.value("Theme/fieldTextNAColor");
    textOffset = "4 2";
    autoSizeWidth = false;
    autoSizeHeight = true;
@@ -651,6 +651,8 @@ new GuiControlProfile( ToolsGuiTreeViewProfile )
    opaque = false;
    border = false;
    category = "Tools";
+   
+   fontColors[9] = "0 128 128"; //for active/selection of elements
 };
 
 if( !isObject( ToolsGuiTextPadProfile ) )

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません