소스 검색

Added/Improved some asset type icons
Renamed current default import config to DefaultConfig
Updated Asset Browser UI layout.
Fixed sizing behavior for Edit Asset window
Fixed sizing behavior for Edit Module window
Implemented Collection Sets system
Implemented handling of non-asset loose files for AB
Initial handling logic for prefabs for AB
Updated Asset Importer to hook into C++ AssetImporter
Made Add Module window properly reset module name field when opened
Overhauled entire AB search system so it can use phrases and compound search logic
Overhauled asset previews to utilize single guiIconButtonCtrl for efficiency and stability
Updated Asset Preview Drag-n-drop to work with new previews
Begun initial work with Tags integration into AB - currently only works with datablock categories
Bugin initial work with Creator classes - currently only populates category lists, no items
Added logic for scanning current AB directory for non-asset loose files, and activating an Auto-Import button if any are found
Added ability to drag-n-drop datablocks from AB and spawn requisite object
Stabilized drag-n-drop behavior of ShapeAssets, so when spawned, it'll find a much more sane drop position
Fixed shapeAsset fields for drag-n-drop behavior so it correctly sets field now
Adjusted folder and asset search fields in AB to utilize placeholder text
Added logic when creating new module to prompt auto-populating common default folders
Shifted preview size to slider
Added logic to MenuBuilder so popup menus can utilize bitmap arrays
Added editor setting for if to display loose files in AB
Minor theme color corrections for some profiles

Areloch 5 년 전
부모
커밋
4adcedcf28
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 ) )

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.