ソースを参照

Merge pull request #47 from TorqueGameEngines/development

Merge of Torque2D 4.0 EA2
Peter Robinson 3 年 前
コミット
15ad3e1e97
100 ファイル変更5421 行追加735 行削除
  1. 115 0
      .github/workflows/PR-builds.yml
  2. 13 0
      .gitignore
  3. 1 0
      editor/AssetAdmin/AssetAdmin.cs
  4. 1 0
      editor/AssetAdmin/AssetDictionaryButton.cs
  5. 12 18
      editor/AssetAdmin/AssetInspector.cs
  6. 276 0
      editor/AssetAdmin/ImageEditor/AssetImageFrameEditRow.cs
  7. 246 0
      editor/AssetAdmin/ImageEditor/AssetImageFrameEditTool.cs
  8. 67 0
      editor/AssetAdmin/ImageEditor/AssetImageFrameHeaderRow.cs
  9. 3 0
      editor/AssetAdmin/ImageEditor/exec.cs
  10. 20 3
      editor/AssetAdmin/NewAnimationAssetDialog.cs
  11. 16 0
      editor/AssetAdmin/NewAssetButton.cs
  12. 20 3
      editor/AssetAdmin/NewAudioAssetDialog.cs
  13. 20 3
      editor/AssetAdmin/NewFontAssetDialog.cs
  14. 20 3
      editor/AssetAdmin/NewImageAssetDialog.cs
  15. 20 3
      editor/AssetAdmin/NewParticleAssetDialog.cs
  16. 1 0
      editor/AssetAdmin/ParticleEditor/AssetParticleGraphTool.cs
  17. 5 0
      editor/AssetAdmin/ParticleEditor/AssetParticleGraphUnit.cs
  18. 6 1
      editor/EditorConsole/EditorConsole.cs
  19. 5 0
      editor/EditorCore/EditorButtonBar.cs
  20. 113 4
      editor/EditorCore/EditorCore.cs
  21. 12 2
      editor/EditorCore/EditorForm.cs
  22. 9 0
      editor/EditorCore/EditorIconButton.cs
  23. 262 18
      editor/EditorCore/Themes/BaseTheme/BaseTheme.cs
  24. BIN
      editor/EditorCore/Themes/BaseTheme/images/cursors/defaultCursor.png
  25. BIN
      editor/EditorCore/Themes/BaseTheme/images/cursors/ibeam.png
  26. 9 0
      editor/EditorCore/Themes/BaseTheme/images/displayBox.asset.taml
  27. BIN
      editor/EditorCore/Themes/BaseTheme/images/displayBox.png
  28. 4 0
      editor/EditorCore/Themes/BaseTheme/images/editorBG.asset.taml
  29. BIN
      editor/EditorCore/Themes/BaseTheme/images/editorBG.png
  30. 4 0
      editor/EditorCore/Themes/BaseTheme/images/fixedHeader200x20.asset.taml
  31. BIN
      editor/EditorCore/Themes/BaseTheme/images/fixedHeader200x20.png
  32. 4 0
      editor/EditorCore/Themes/ForestRobe/ForestRobeTheme.cs
  33. 4 0
      editor/EditorCore/Themes/LabCoat/LabCoatTheme.cs
  34. 48 0
      editor/EditorCore/Themes/ThemeManager.cs
  35. 48 2
      editor/EditorCore/Themes/TorqueSuit/TorqueSuitTheme.cs
  36. 547 0
      editor/EditorCore/gui/guiProfiles.cs
  37. BIN
      editor/EditorCore/gui/images/treeView.png
  38. BIN
      editor/EditorCore/images/editorIcons16.png
  39. BIN
      editor/EditorCore/images/headerGlow.png
  40. BIN
      editor/EditorCore/images/newProject.png
  41. 4 0
      editor/EditorCore/images/projectTileShadow.asset.taml
  42. BIN
      editor/EditorCore/images/projectTileShadow.png
  43. BIN
      editor/EditorCore/images/t2d_logo.png
  44. BIN
      editor/EditorCore/images/t2d_logo_med.png
  45. BIN
      editor/EditorCore/images/t2d_rocket_splash.png
  46. BIN
      editor/EditorCore/images/torque_logo.png
  47. 15 0
      editor/EditorCore/scripts/EditorCoreSplash.cs
  48. 124 0
      editor/EditorCore/scripts/EditorProjectCard.cs
  49. 221 0
      editor/EditorCore/scripts/EditorProjectSelector.cs
  50. 168 0
      editor/EditorCore/scripts/NewProjectDialog.cs
  51. 42 53
      editor/EditorCore/scripts/canvas.cs
  52. 0 0
      editor/EditorCore/scripts/constants.cs
  53. 59 0
      editor/EditorCore/scripts/defaultPreferences.cs
  54. 116 20
      editor/ProjectManager/ProjectManager.cs
  55. 29 0
      editor/ProjectManager/scripts/DeclaredAssetForm.cs
  56. 149 0
      editor/ProjectManager/scripts/EditModuleDialog.cs
  57. 117 0
      editor/ProjectManager/scripts/NewDeclaredAssetDialog.cs
  58. 155 0
      editor/ProjectManager/scripts/NewDependencyDialog.cs
  59. 136 0
      editor/ProjectManager/scripts/NewModuleDialog.cs
  60. 219 0
      editor/ProjectManager/scripts/ProjectGamePanel.cs
  61. 136 0
      editor/ProjectManager/scripts/ProjectLibraryPanel.cs
  62. 164 0
      editor/ProjectManager/scripts/ProjectModuleAssetList.cs
  63. 382 0
      editor/ProjectManager/scripts/ProjectModuleCard.cs
  64. 191 0
      editor/ProjectManager/scripts/ProjectModuleDependList.cs
  65. 153 0
      editor/ProjectManager/scripts/ProjectModulePanel.cs
  66. 7 1
      editor/main.cs
  67. 4 4
      engine/Link/Debug/libogg/libogg_DEBUG.lib.recipe
  68. 4 4
      engine/Link/Debug/libvorbis/libvorbis_DEBUG.lib.recipe
  69. 4 4
      engine/Link/Debug/ljpeg/ljpeg_DEBUG.lib.recipe
  70. 4 4
      engine/Link/Debug/lpng/lpng_DEBUG.lib.recipe
  71. 4 4
      engine/Link/Debug/zlib/zlib_DEBUG.lib.recipe
  72. 0 7
      engine/Link/VC2012.Debug.Win32/Torque2D/Torque2D_DEBUG.exe.recipe
  73. 14 0
      engine/compilers/Make-32bit/Dockerfile
  74. 13 1
      engine/compilers/Make-32bit/Makefile
  75. 144 0
      engine/compilers/Make-32bit/Torque2D.mk
  76. 0 0
      engine/compilers/Make-32bit/ljpeg
  77. 0 0
      engine/compilers/Make-32bit/lpng
  78. 0 0
      engine/compilers/Make-32bit/ogg
  79. 0 0
      engine/compilers/Make-32bit/vorbis
  80. 0 0
      engine/compilers/Make-32bit/zlib
  81. 13 0
      engine/compilers/Make-64bit/Dockerfile
  82. 45 0
      engine/compilers/Make-64bit/Makefile
  83. 143 0
      engine/compilers/Make-64bit/Torque2D.mk
  84. 109 0
      engine/compilers/Make-64bit/ljpeg
  85. 78 0
      engine/compilers/Make-64bit/lpng
  86. 64 0
      engine/compilers/Make-64bit/ogg
  87. 89 0
      engine/compilers/Make-64bit/vorbis
  88. 76 0
      engine/compilers/Make-64bit/zlib
  89. 0 492
      engine/compilers/Make/Torque2D
  90. 16 8
      engine/compilers/VisualStudio 2017/Torque 2D.sln
  91. 12 11
      engine/compilers/VisualStudio 2017/Torque 2D.vcxproj
  92. 18 30
      engine/compilers/VisualStudio 2017/Torque 2D.vcxproj.filters
  93. 10 6
      engine/compilers/VisualStudio 2017/libogg.vcxproj
  94. 2 2
      engine/compilers/VisualStudio 2017/libvorbis.vcxproj
  95. 1 1
      engine/compilers/VisualStudio 2017/ljpeg.vcxproj
  96. 1 1
      engine/compilers/VisualStudio 2017/lpng.vcxproj
  97. 1 1
      engine/compilers/VisualStudio 2017/zlib.vcxproj
  98. BIN
      engine/compilers/VisualStudio 2019/Torque 2D.aps
  99. 18 10
      engine/compilers/VisualStudio 2019/Torque 2D.sln
  100. 16 11
      engine/compilers/VisualStudio 2019/Torque 2D.vcxproj

+ 115 - 0
.github/workflows/PR-builds.yml

@@ -0,0 +1,115 @@
+name: Build Packages
+on: [push, pull_request, workflow_dispatch]
+jobs:
+  Build-Windows-32bit-VS2019:
+    name: 32-bit Windows On VS2019
+    runs-on: windows-latest
+    steps:
+      - uses: actions/checkout@v2
+      - uses: microsoft/[email protected]
+      - run: msbuild -m "engine/compilers/VisualStudio 2019/Torque 2D.sln" /p:Configuration=Debug /p:Platform=win32
+      - run: msbuild -m "engine/compilers/VisualStudio 2019/Torque 2D.sln" /p:Configuration=Release /p:Platform=win32
+      - uses: actions/upload-artifact@v2
+        with:
+          name: Torque2D_Windows_x86_32bit_VS2019
+          path: |
+            .
+            ! .git/
+            ! engine/
+  Build-Windows-64bit-VS2019:
+    name: 64-bit Windows On VS2019
+    runs-on: windows-latest
+    steps:
+      - uses: actions/checkout@v2
+      - uses: microsoft/[email protected]
+      - run: msbuild -m "engine/compilers/VisualStudio 2019/Torque 2D.sln" /p:Configuration=Debug /p:Platform=x64
+      - run: msbuild -m "engine/compilers/VisualStudio 2019/Torque 2D.sln" /p:Configuration=Release /p:Platform=x64
+      - uses: actions/upload-artifact@v2
+        with:
+          name: Torque2D_Windows_x86_64bit_VS2019
+          path: |
+            .
+            ! .git/
+            ! engine/
+  Build-Windows-32bit-VS2017:
+    name: 32-bit Windows On VS2017
+    runs-on: windows-latest
+    steps:
+      - uses: actions/checkout@v2
+      - uses: microsoft/[email protected]
+      - run: msbuild -m "engine/compilers/VisualStudio 2017/Torque 2D.sln" /p:Configuration=Debug /p:Platform=win32
+      - run: msbuild -m "engine/compilers/VisualStudio 2017/Torque 2D.sln" /p:Configuration=Release /p:Platform=win32
+      - uses: actions/upload-artifact@v2
+        with:
+          name: Torque2D_Windows_x86_32bit_VS2017
+          path: |
+            .
+            ! .git/
+            ! engine/
+  Build-Windows-64bit-VS2017:
+    name: 64-bit Windows On VS2017
+    runs-on: windows-latest
+    steps:
+      - uses: actions/checkout@v2
+      - uses: microsoft/[email protected]
+      - run: msbuild -m "engine/compilers/VisualStudio 2017/Torque 2D.sln" /p:Configuration=Debug /p:Platform=x64
+      - run: msbuild -m "engine/compilers/VisualStudio 2017/Torque 2D.sln" /p:Configuration=Release /p:Platform=x64
+      - uses: actions/upload-artifact@v2
+        with:
+          name: Torque2D_Windows_x86_64bit_VS2017
+          path: |
+            .
+            ! .git/
+            ! engine/
+  Build-Linux-32Bit:
+    name: Build package for 32-bit x86 Linux
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - run: cd engine/compilers/Make-32bit/ && make
+      - uses: actions/upload-artifact@v2
+        with:
+          name: Torque2D_Linux_x86_32bit
+          path: |
+            .
+            ! .git/
+            ! engine/
+  Build-Linux-64bit:
+    name: Build package for 64-bit x86 Linux
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - run: cd engine/compilers/Make-64bit/ && make
+      - uses: actions/upload-artifact@v2
+        with:
+          name: Torque2D_Linux_x86_64bit
+          path: |
+            .
+            ! .git/
+            ! engine/
+  Build-MacOS:
+    name: Build package for MacOS
+    runs-on: macOS-latest
+    steps:
+      - uses: actions/checkout@v2
+      - run: cd engine/compilers/Xcode && xcodebuild -project Torque2D.xcodeproj
+      - uses: actions/upload-artifact@v2
+        with:
+          name: Torque2D_MacOS
+          path: |
+            .
+            ! .git/
+            ! engine/
+  Build-iOS:
+    name: Build package for iOS
+    runs-on: macOS-latest
+    steps:
+      - uses: actions/checkout@v2
+      - run: cd engine/compilers/Xcode_iOS && xcodebuild CODE_SIGNING_ALLOWED=no -project Torque2D.xcodeproj
+      - uses: actions/upload-artifact@v2
+        with:
+          name: Torque2D_iOS
+          path: |
+            .
+            ! .git/
+            ! engine/

+ 13 - 0
.gitignore

@@ -26,8 +26,12 @@ Torque2D.exe
 Torque2D_DEBUG.exe
 Torque2DGame.app
 Torque2DGame_Debug.app
+Torque2D
+Torque2D_DEBUG
 linkmap.txt
 **/.vs/**
+.vscode/
+*.vcxproj.FileListAbsolute.txt
 
 # Compiled source #
 ###################
@@ -38,6 +42,8 @@ linkmap.txt
 *.so
 *.obj
 *.lib
+*.lib.recipe
+*.exe.recipe
 *.idb
 *.pdb
 *.ilk
@@ -77,3 +83,10 @@ engine/compilers/android-studio/app/src/main/obj/
 engine/compilers/android-studio/app/src/main/libs/
 engine/compilers/android-studio/app/src/main/game/
 engine/compilers/android-studio/app/.externalNativeBuild/
+
+# Linux build files #
+#####################
+engine/compilers/Make-32bit/Debug/
+engine/compilers/Make-32bit/Release/
+engine/compilers/Make-64bit/Debug/
+engine/compilers/Make-64bit/Release/

+ 1 - 0
editor/AssetAdmin/AssetAdmin.cs

@@ -35,6 +35,7 @@ function AssetAdmin::create(%this)
 	exec("./NewAudioAssetDialog.cs");
 	exec("./DeleteAssetDialog.cs");
 	exec("./ParticleEditor/exec.cs");
+	exec("./ImageEditor/exec.cs");
 
 	%this.guiPage = EditorCore.RegisterEditor("Asset Manager", %this);
 	%this.guiPage.add(%this.buildAssetWindow());

+ 1 - 0
editor/AssetAdmin/AssetDictionaryButton.cs

@@ -123,6 +123,7 @@ function AssetDictionaryButton::buildIcon(%this)
 		Position = "0 0";
 		constrainProportions = "1";
 		fullSize = "1";
+		UseInput = false;
 	};
 	ThemeManager.setProfile(%texture, "spriteProfile");
 	return %texture;

+ 12 - 18
editor/AssetAdmin/AssetInspector.cs

@@ -99,10 +99,9 @@ function AssetInspector::onAdd(%this)
 
 	//Inspector Tab
 	%this.insPage = %this.createTabPage("Inspector", "");
-	%this.tabBook.add(%this.insPage);
-
 	%this.insScroller = %this.createScroller();
 	%this.insPage.add(%this.insScroller);
+	%this.tabBook.add(%this.insPage);
 
 	%this.inspector = %this.createInspector();
 	%this.insScroller.add(%this.inspector);
@@ -112,6 +111,9 @@ function AssetInspector::onAdd(%this)
 
 	//Emitter Graph Tool
 	%this.emitterGraphPage = %this.createTabPage("Emitter Graph", "AssetParticleGraphEmitterTool", "AssetParticleGraphTool");
+
+	//Image Frame Edit Tool
+	%this.imageFrameEditPage = %this.createTabPage("Frame Edit", "AssetImageFrameEditTool", "");
 }
 
 function AssetInspector::createTabPage(%this, %name, %class, %superClass)
@@ -201,14 +203,8 @@ function AssetInspector::resetInspector(%this)
 	%this.titleDropDown.visible = false;
 	%this.tabBook.Visible = true;
 	%this.tabBook.selectPage(0);
-	if(%this.tabBook.isMember(%this.scaleGraphPage))
-	{
-		%this.tabBook.remove(%this.scaleGraphPage);
-	}
-	if(%this.tabBook.isMember(%this.emitterGraphPage))
-	{
-		%this.tabBook.remove(%this.emitterGraphPage);
-	}
+	%this.tabBook.removeIfMember(%this.scaleGraphPage);
+	%this.tabBook.removeIfMember(%this.emitterGraphPage);
 
 	%this.emitterButtonBar.visible = false;
 	%this.deleteAssetButton.visible = true;
@@ -217,6 +213,8 @@ function AssetInspector::resetInspector(%this)
 function AssetInspector::loadImageAsset(%this, %imageAsset, %assetID)
 {
 	%this.resetInspector();
+	%this.tabBook.add(%this.imageFrameEditPage);
+	%this.tabBook.selectPage(0);
 	%this.titlebar.setText("Image Asset:" SPC %imageAsset.AssetName);
 
 	%this.inspector.clearHiddenFields();
@@ -227,6 +225,8 @@ function AssetInspector::loadImageAsset(%this, %imageAsset, %assetID)
 	%this.inspector.addHiddenField("ExplicitMode");
 	%this.inspector.inspect(%imageAsset);
 	%this.inspector.openGroupByIndex(0);
+
+	%this.imageFrameEditPage.inspect(%imageAsset);
 }
 
 function AssetInspector::loadAnimationAsset(%this, %animationAsset, %assetID)
@@ -280,10 +280,7 @@ function AssetInspector::onChooseParticleAsset(%this, %particleAsset)
 		%this.inspector.addHiddenField("AssetPrivate");
 		%this.inspector.inspect(%particleAsset);
 
-		if(%this.tabBook.isMember(%this.emitterGraphPage))
-		{
-			%this.tabBook.remove(%this.emitterGraphPage);
-		}
+		%this.tabBook.removeIfMember(%this.emitterGraphPage);
 		%this.tabBook.add(%this.scaleGraphPage);
 		%this.scaleGraphPage.inspect(%particleAsset);
 	}
@@ -293,10 +290,7 @@ function AssetInspector::onChooseParticleAsset(%this, %particleAsset)
 		%this.inspector.addHiddenField("locked");
 		%this.inspector.inspect(%particleAsset.getEmitter(%index - 1));
 
-		if(%this.tabBook.isMember(%this.scaleGraphPage))
-		{
-			%this.tabBook.remove(%this.scaleGraphPage);
-		}
+		%this.tabBook.removeIfMember(%this.scaleGraphPage);
 		%this.tabBook.add(%this.emitterGraphPage);
 		%this.emitterGraphPage.inspect(%particleAsset, %index - 1);
 	}

+ 276 - 0
editor/AssetAdmin/ImageEditor/AssetImageFrameEditRow.cs

@@ -0,0 +1,276 @@
+
+function AssetImageFrameEditRow::onAdd(%this)
+{
+	%this.errorColor = "255 0 0 255";
+	%this.indexBox = new GuiControl()
+	{
+		HorizSizing="width";
+		VertSizing="height";
+		Position="0 0";
+		Extent="20 40";
+		Align = center;
+		vAlign = middle;
+		Text = %this.CellIndex;
+		FontSizeAdjust = 1.4;
+		FontColor = %this.errorColor;
+	};
+	ThemeManager.setProfile(%this.indexBox, "codeProfile");
+	%this.add(%this.indexBox);
+
+	%this.nameBox = new GuiTextEditCtrl()
+	{
+		HorizSizing="width";
+		VertSizing="height";
+		Position="20 3";
+		Extent="200 32";
+		Text = %this.CellName;
+		AltCommand = %this.getID() @ ".CellNameChange();";
+		FontColor = %this.errorColor;
+		InputMode = "AlphaNumeric";
+	};
+	ThemeManager.setProfile(%this.nameBox, "textEditProfile");
+	%this.add(%this.nameBox);
+
+	%this.offsetXBox = new GuiTextEditCtrl()
+	{
+		HorizSizing="width";
+		VertSizing="height";
+		Position="224 3";
+		Extent="80 32";
+		Align = right;
+		Text = getWord(%this.CellOffset, 0);
+		AltCommand = %this.getID() @ ".CellOffsetXChange();";
+		FontColor = %this.errorColor;
+		InputMode = "Number";
+	};
+	ThemeManager.setProfile(%this.offsetXBox, "textEditProfile");
+	%this.add(%this.offsetXBox);
+
+	%this.offsetYBox = new GuiTextEditCtrl()
+	{
+		HorizSizing="width";
+		VertSizing="height";
+		Position="308 3";
+		Extent="80 32";
+		Align = right;
+		Text = getWord(%this.CellOffset, 1);
+		AltCommand = %this.getID() @ ".CellOffsetYChange();";
+		FontColor = %this.errorColor;
+		InputMode = "Number";
+	};
+	ThemeManager.setProfile(%this.offsetYBox, "textEditProfile");
+	%this.add(%this.offsetYBox);
+
+	%this.widthBox = new GuiTextEditCtrl()
+	{
+		HorizSizing="width";
+		VertSizing="height";
+		Position="392 3";
+		Extent="80 32";
+		Align = right;
+		Text = %this.CellWidth;
+		AltCommand = %this.getID() @ ".CellWidthChange();";
+		FontColor = %this.errorColor;
+		InputMode = "Number";
+	};
+	ThemeManager.setProfile(%this.widthBox, "textEditProfile");
+	%this.add(%this.widthBox);
+
+	%this.heightBox = new GuiTextEditCtrl()
+	{
+		HorizSizing="width";
+		VertSizing="height";
+		Position="476 3";
+		Extent="80 32";
+		Align = right;
+		Text = %this.CellHeight;
+		AltCommand = %this.getID() @ ".CellHeightChange();";
+		FontColor = %this.errorColor;
+		InputMode = "Number";
+	};
+	ThemeManager.setProfile(%this.heightBox, "textEditProfile");
+	%this.add(%this.heightBox);
+
+	%this.buttonBar = new GuiChainCtrl()
+	{
+		Class = "EditorButtonBar";
+		Position = "564 5";
+		Extent = "0 24";
+		ChildSpacing = 4;
+		IsVertical = false;
+		Tool = %this;
+	};
+	ThemeManager.setProfile(%this.buttonBar, "emptyProfile");
+	%this.add(%this.buttonBar);
+	%this.buttonBar.addButton("MoveCellUp", 2, "Move Cell Up", "getMoveCellUpEnabled");
+	%this.buttonBar.addButton("MoveCellDown", 6, "Move Cell Down", "getMoveCellDownEnabled");
+	%this.buttonBar.addButton("RemoveCell", 23, "Remove Cell", "getRemoveCellEnabled");
+}
+
+function AssetImageFrameEditRow::CellNameChange(%this)
+{
+	%name = %this.nameBox.getText();
+	%name = stripChars(%name, " ");
+	%this.nameBox.setText(%name);
+	if(%name !$= %this.CellName)
+	{
+		if(%name $= "")
+		{
+			%this.setNameError(true);
+		}
+		else
+		{
+			%this.setNameError(false);
+			%this.postEvent("CellNameChange", %this SPC %name);
+		}
+	}
+}
+
+function AssetImageFrameEditRow::CellOffsetXChange(%this)
+{
+	%x = %this.offsetXBox.getText();
+	%x = stripChars(%x, " ");
+	if(%x $= "")
+	{
+		%x = 0;
+	}
+	%x = mClamp(%x, 0, %this.ImageWidth - 1);
+	%this.offsetXBox.setText(%x);
+
+	if(%x !$= getWord(%this.CellOffset, 0))
+	{
+		%width = %this.CellWidth;
+		if((%x + %width) > %this.ImageWidth)
+		{
+			%width = %this.ImageWidth - %x;
+			%this.widthBox.setText(%width);
+		}
+		%this.postEvent("CellSizeChange", %this SPC %x SPC getWord(%this.CellOffset, 1) SPC %width SPC %this.CellHeight);
+	}
+}
+
+function AssetImageFrameEditRow::CellOffsetYChange(%this)
+{
+	%y = %this.offsetYBox.getText();
+	%y = stripChars(%y, " ");
+	if(%y $= "")
+	{
+		%y = 0;
+	}
+	%y = mClamp(%y, 0, %this.ImageHeight - 1);
+	%this.offsetYBox.setText(%y);
+
+	if(%y !$= getWord(%this.CellOffset, 1))
+	{
+		%height = %this.CellHeight;
+		if((%y + %height) > %this.ImageHeight)
+		{
+			%height = %this.ImageHeight - %y;
+			%this.heightBox.setText(%height);
+		}
+		%this.postEvent("CellSizeChange", %this SPC getWord(%this.CellOffset, 0) SPC %y SPC %this.CellWidth SPC %height);
+	}
+}
+
+function AssetImageFrameEditRow::CellWidthChange(%this)
+{
+	%width = %this.widthBox.getText();
+	%width = stripChars(%width, " ");
+	if(%width $= "")
+	{
+		%width = 1;
+	}
+	%width = mClamp(%width, 1, %this.ImageWidth);
+	%this.widthBox.setText(%width);
+
+	if(%width !$= %this.CellWidth)
+	{
+		%x = getWord(%this.CellOffset, 0);
+		if((%x + %width) > %this.ImageWidth)
+		{
+			%x = %this.ImageWidth - %width;
+			%this.offsetXBox.setText(%x);
+		}
+		%this.postEvent("CellSizeChange", %this SPC %x SPC getWord(%this.CellOffset, 1) SPC %width SPC %this.CellHeight);
+	}
+}
+
+function AssetImageFrameEditRow::CellHeightChange(%this)
+{
+	%height = %this.heightBox.getText();
+	%height = stripChars(%height, " ");
+	if(%height $= "")
+	{
+		%height = 1;
+	}
+	%height = mClamp(%height, 1, %this.ImageHeight);
+	%this.heightBox.setText(%height);
+
+	if(%height !$= %this.CellHeight)
+	{
+		%y = getWord(%this.CellOffset, 1);
+		if((%y + %height) > %this.ImageHeight)
+		{
+			%y = %this.ImageHeight - %height;
+			%this.offsetYBox.setText(%y);
+		}
+		%this.postEvent("CellSizeChange", %this SPC getWord(%this.CellOffset, 0) SPC %y SPC %this.CellWidth SPC %height);
+	}
+}
+
+function AssetImageFrameEditRow::setNameError(%this, %hasError)
+{
+	%this.nameBox.overrideFontColor = %hasError;
+	%this.indexBox.overrideFontColor = %hasError;
+}
+
+function AssetImageFrameEditRow::getMoveCellUpEnabled(%this)
+{
+	return %this.CellIndex != 0;
+}
+
+function AssetImageFrameEditRow::getMoveCellDownEnabled(%this)
+{
+	return %this.CellIndex < (%this.CellCount - 1);
+}
+
+function AssetImageFrameEditRow::getRemoveCellEnabled(%this)
+{
+	return %this.CellCount > 1;
+}
+
+function AssetImageFrameEditRow::updateCellCount(%this, %newCount)
+{
+	%this.CellCount = %newCount;
+	%this.buttonBar.refreshEnabled();
+}
+
+function AssetImageFrameEditRow::MoveCellUp(%this)
+{
+	%this.postEvent("swapCells", (%this.CellIndex - 1) SPC %this.CellIndex);
+}
+
+function AssetImageFrameEditRow::MoveCellDown(%this)
+{
+	%this.postEvent("swapCells", %this.CellIndex SPC (%this.CellIndex + 1));
+}
+
+function AssetImageFrameEditRow::RemoveCell(%this)
+{
+	%this.postEvent("removeCell", %this.CellIndex);
+}
+
+function AssetImageFrameEditRow::refresh(%this)
+{
+	%this.indexBox.setText(%this.CellIndex);
+	%this.nameBox.setText(%this.CellName);
+	%this.offsetXBox.setText(getWord(%this.CellOffset, 0));
+	%this.offsetYBox.setText(getWord(%this.CellOffset, 1));
+	%this.widthBox.setText(%this.CellWidth);
+	%this.heightBox.setText(%this.CellHeight);
+}
+
+function AssetImageFrameEditRow::onRemove(%this)
+{
+	%this.deleteObjects();
+}

+ 246 - 0
editor/AssetAdmin/ImageEditor/AssetImageFrameEditTool.cs

@@ -0,0 +1,246 @@
+
+function AssetImageFrameEditTool::onAdd(%this)
+{
+	%this.explicitModeCheckbox = new GuiCheckboxCtrl()
+	{
+		HorizSizing="right";
+		VertSizing="bottom";
+		Position="10 3";
+		Extent= "285 30";
+		Text = "Use Explicit Frame Mode";
+		TextExtent = "280 30";
+		command = %this.getID() @ ".toggleExplicitMode();";
+	};
+	ThemeManager.setProfile(%this.explicitModeCheckbox, "checkboxProfile");
+	%this.add(%this.explicitModeCheckbox);
+
+	%this.toolScroll = new GuiScrollCtrl()
+	{
+		HorizSizing="width";
+		VertSizing="height";
+		Position="0 40";
+		Extent= getWord(%this.extent, 0) SPC (getWord(%this.extent, 1) - 40);
+		hScrollBar="dynamic";
+		vScrollBar="dynamic";
+		constantThumbHeight="0";
+		showArrowButtons="1";
+		scrollBarThickness="14";
+	};
+	ThemeManager.setProfile(%this.toolScroll, "scrollingPanelProfile");
+	ThemeManager.setProfile(%this.toolScroll, "scrollingPanelThumbProfile", "ThumbProfile");
+	ThemeManager.setProfile(%this.toolScroll, "scrollingPanelTrackProfile", "TrackProfile");
+	ThemeManager.setProfile(%this.toolScroll, "scrollingPanelArrowProfile", "ArrowProfile");
+	%this.add(%this.toolScroll);
+
+	%this.rowChain = new GuiChainCtrl()
+	{
+		HorizSizing="right";
+		VertSizing="bottom";
+		Position="0 0";
+		Extent= "662" SPC getWord(%this.toolScroll.extent, 1);
+		IsVertical="1";
+		ChildSpacing="2";
+	};
+	ThemeManager.setProfile(%this.rowChain, "emptyProfile");
+	%this.toolScroll.add(%this.rowChain);
+
+	%this.addNewCellButton = new GuiButtonCtrl()
+	{
+		HorizSizing="left";
+		VertSizing="bottom";
+		Position="580 5";
+		Extent= "110 26";
+		Text = "Add Cell";
+		command = %this.getID() @ ".addNewCell();";
+	};
+	ThemeManager.setProfile(%this.addNewCellButton, "buttonProfile");
+	%this.add(%this.addNewCellButton);
+}
+
+function AssetImageFrameEditTool::inspect(%this, %asset)
+{
+	%this.asset = %asset;
+	%this.explicitModeCheckbox.setStateOn(%asset.ExplicitMode);
+
+	%this.rowChain.deleteObjects();
+	%this.addHeaderRow();
+
+	%this.toggleExplicitMode();
+}
+
+function AssetImageFrameEditTool::createRows(%this)
+{
+	%cellCount = %this.asset.getExplicitCellCount();
+	for(%i = 0; %i < %cellCount; %i++)
+	{
+		%name = %this.asset.getExplicitCellName(%i);
+		%width = %this.asset.getExplicitCellWidth(%i);
+		%height = %this.asset.getExplicitCellHeight(%i);
+		%offset = %this.asset.getExplicitCellOffset(%i);
+
+		%this.addImageFrameRow(%name, %offset, %width, %height, %i);
+	}
+}
+
+function AssetImageFrameEditTool::toggleExplicitMode(%this)
+{
+	%explicitModeOn = %this.explicitModeCheckbox.getStateOn();
+	%this.toolScroll.setVisible(%explicitModeOn);
+	%this.addNewCellButton.setVisible(%explicitModeOn);
+	%this.asset.setExplicitMode(%explicitModeOn);
+
+	if(%explicitModeOn && %this.asset.getExplicitCellCount() == 0)
+	{
+		%this.addNewCell();
+	}
+	else if(%explicitModeOn)
+	{
+		%this.createRows();
+	}
+	else
+	{
+		%this.rowChain.deleteObjects();
+		%this.addHeaderRow();
+	}
+}
+
+function AssetImageFrameEditTool::addHeaderRow(%this)
+{
+	%row = new GuiControl()
+	{
+		Class = "AssetImageFrameHeaderRow";
+		HorizSizing="right";
+		VertSizing="bottom";
+		Position="0 0";
+		Extent="560 22";
+	};
+	ThemeManager.setProfile(%row, "emptyProfile");
+	%this.rowChain.add(%row);
+}
+
+function AssetImageFrameEditTool::addImageFrameRow(%this, %name, %offset, %width, %height, %index)
+{
+	%row = new GuiControl()
+	{
+		Class = "AssetImageFrameEditRow";
+		HorizSizing="right";
+		VertSizing="bottom";
+		Position="0 0";
+		Extent="662 40";
+		CellName = %name;
+		CellOffset = %offset;
+		CellWidth = %width;
+		CellHeight = %height;
+		CellIndex = %index;
+		ImageWidth = %this.asset.getImageWidth();
+		ImageHeight = %this.asset.getImageHeight();
+		CellCount = %this.asset.getExplicitCellCount();
+	};
+	ThemeManager.setProfile(%row, "emptyProfile");
+	%this.rowChain.add(%row);
+	%this.startListening(%row);
+}
+
+function AssetImageFrameEditTool::addNewCell(%this)
+{
+	%index = %this.asset.getExplicitCellCount();
+	%name = "Frame" @ %index;
+	%x = 0;
+	%y = 0;
+	%width = %this.asset.getImageWidth();
+	%height = %this.asset.getImageHeight();
+
+	%this.rowChain.callOnChildrenNoRecurse("updateCellCount", %index + 1);
+
+	%this.asset.addExplicitCell(%x, %y, %width, %height, %name);
+	%this.addImageFrameRow(%name, %x SPC %y, %width, %height, %index);
+}
+
+function AssetImageFrameEditTool::onCellNameChange(%this, %data)
+{
+	%row = getWord(%data, 0);
+	%name = getWord(%data, 1);
+
+	if(%this.asset.getExplicitCellIndex(%name) != -1)
+	{
+		%row.setNameError(true);
+	}
+	else
+	{
+		%this.asset.setExplicitCell(%row.CellIndex, getWord(%row.CellOffset, 0), getWord(%row.CellOffset, 1), %row.CellWidth, %row.CellHeight, %name);
+		%row.CellName = %name;
+	}
+}
+
+function AssetImageFrameEditTool::onCellSizeChange(%this, %data)
+{
+	%row = getWord(%data, 0);
+	%x = getWord(%data, 1);
+	%y = getWord(%data, 2);
+	%width = getWord(%data, 3);
+	%height = getWord(%data, 4);
+
+	%this.asset.setExplicitCell(%row.CellIndex, %x, %y, %width, %height, %row.CellName);
+	%row.CellOffset = %x SPC %y;
+	%row.CellWidth = %width;
+	%row.CellHeight = %height;
+}
+
+function AssetImageFrameEditTool::onSwapCells(%this, %data)
+{
+	%index1 = getWord(%data, 0);
+	%index2 = getWord(%data, 1);
+
+	%name1 = %this.asset.getExplicitCellName(%index1);
+	%width1 = %this.asset.getExplicitCellWidth(%index1);
+	%height1 = %this.asset.getExplicitCellHeight(%index1);
+	%offset1 = %this.asset.getExplicitCellOffset(%index1);
+
+	%name2 = %this.asset.getExplicitCellName(%index2);
+	%width2 = %this.asset.getExplicitCellWidth(%index2);
+	%height2 = %this.asset.getExplicitCellHeight(%index2);
+	%offset2 = %this.asset.getExplicitCellOffset(%index2);
+
+	%this.asset.setExplicitCell(%index1, getWord(%offset2, 0), getWord(%offset2, 1), %width2, %height2, %name2);
+	%this.asset.setExplicitCell(%index2, getWord(%offset1, 0), getWord(%offset1, 1), %width1, %height1, %name1);
+
+	%row1 = %this.rowChain.getObject(%index1 + 1);
+	%row2 = %this.rowChain.getObject(%index2 + 1);
+
+	%row1.CellOffset = %offset2;
+	%row1.CellWidth = %width2;
+	%row1.CellHeight = %height2;
+	%row1.CellName = %name2;
+
+	%row2.CellOffset = %offset1;
+	%row2.CellWidth = %width1;
+	%row2.CellHeight = %height1;
+	%row2.CellName = %name1;
+
+	%row1.refresh();
+	%row2.refresh();
+}
+
+function AssetImageFrameEditTool::onRemoveCell(%this, %index)
+{
+	%this.schedule(50, "onRemoveCell2", %index);
+}
+
+function AssetImageFrameEditTool::onRemoveCell2(%this, %index)
+{
+	%this.asset.removeExplicitCell(%index);
+	%row = %this.rowChain.getObject(%index + 1);
+	%row.delete();
+
+	%count = %this.asset.getExplicitCellCount();
+	for(%i = 0; %i < %this.rowChain.getCount(); %i++)
+	{
+		%row = %this.rowChain.getObject(%i);
+		if(%row.isMethod("refresh"))
+		{
+			%row.CellIndex = (%i - 1);
+			%row.updateCellCount(%count);
+			%row.refresh();
+		}
+	}
+}

+ 67 - 0
editor/AssetAdmin/ImageEditor/AssetImageFrameHeaderRow.cs

@@ -0,0 +1,67 @@
+
+function AssetImageFrameHeaderRow::onAdd(%this)
+{
+	%this.nameBox = new GuiControl()
+	{
+		HorizSizing="width";
+		VertSizing="height";
+		Position="20 0";
+		Extent="200 25";
+		Text = "Cell Name";
+		vAlign = "Bottom";
+	};
+	ThemeManager.setProfile(%this.nameBox, "LabelProfile");
+	%this.add(%this.nameBox);
+
+	%this.offsetXBox = new GuiControl()
+	{
+		HorizSizing="width";
+		VertSizing="height";
+		Position="224 0";
+		Extent="80 25";
+		Text = "X";
+		Align = "Center";
+		vAlign = "Bottom";
+	};
+	ThemeManager.setProfile(%this.offsetXBox, "LabelProfile");
+	%this.add(%this.offsetXBox);
+
+	%this.offsetYBox = new GuiControl()
+	{
+		HorizSizing="width";
+		VertSizing="height";
+		Position="308 0";
+		Extent="80 25";
+		Text = "Y";
+		Align = "Center";
+		vAlign = "Bottom";
+	};
+	ThemeManager.setProfile(%this.offsetYBox, "LabelProfile");
+	%this.add(%this.offsetYBox);
+
+	%this.widthBox = new GuiControl()
+	{
+		HorizSizing="width";
+		VertSizing="height";
+		Position="392 0";
+		Extent="80 25";
+		Text = "Width";
+		Align = "Center";
+		vAlign = "Bottom";
+	};
+	ThemeManager.setProfile(%this.widthBox, "LabelProfile");
+	%this.add(%this.widthBox);
+
+	%this.heightBox = new GuiControl()
+	{
+		HorizSizing="width";
+		VertSizing="height";
+		Position="476 0";
+		Extent="80 25";
+		Text = "Height";
+		Align = "Center";
+		vAlign = "Bottom";
+	};
+	ThemeManager.setProfile(%this.heightBox, "LabelProfile");
+	%this.add(%this.heightBox);
+}

+ 3 - 0
editor/AssetAdmin/ImageEditor/exec.cs

@@ -0,0 +1,3 @@
+exec("./AssetImageFrameEditTool.cs");
+exec("./AssetImageFrameEditRow.cs");
+exec("./AssetImageFrameHeaderRow.cs");

+ 20 - 3
editor/AssetAdmin/NewAnimationAssetDialog.cs

@@ -40,6 +40,8 @@ function NewAnimationAssetDialog::init(%this, %width, %height)
 		Position = "12 220";
 		Extent = (%width - 24) SPC 80;
 		text = "Select an Image Asset to get started!";
+		textWrap = true;
+		textExtend = true;
 	};
 	ThemeManager.setProfile(%this.feedback, "infoProfile");
 
@@ -103,7 +105,7 @@ function NewAnimationAssetDialog::Validate(%this)
 		%this.moduleNameBox.setText(%modSig);
 		%this.prevFolder = %folderPath;
 	}
-	%assetPath = %folderPath @ %assetName @ ".asset.taml";
+	%assetPath = pathConcat(%folderPath, %assetName @ ".animation.taml");
 	%moduleName = getUnit(%this.moduleNameBox.getText(), 0, "_");
 	%moduleVersion = getUnit(%this.moduleNameBox.getText(), 1, "_");
 	%assetID = %moduleName @ ":" @ %assetName;
@@ -125,6 +127,20 @@ function NewAnimationAssetDialog::Validate(%this)
 		%this.feedback.setText("You can only create an animation asset inside of a module.");
 		return false;
 	}
+	else
+	{
+		%module = ModuleDatabase.findModule(%moduleName, %moduleVersion);
+		if(!isObject(%module))
+		{
+			%this.feedback.setText("There was a problem finding the module for this asset.");
+			return false;
+		}
+		else if(%module.Synchronized)
+		{
+			%this.feedback.setText("You cannot add assets to a library module. Updates to the module would remove your assets. Instead, create your own module and add assets to it. Remember to have your module scan for assets.");
+			return false;
+		}
+	}
 
 	%button = AssetAdmin.Dictionary["AnimationAsset"].getButton(%assetID);
 	if(isObject(%button))
@@ -134,13 +150,14 @@ function NewAnimationAssetDialog::Validate(%this)
 	}
 
 	%this.createButton.active = true;
-	%this.feedback.setText("Press the Create button to open the new asset for editing.");
+	%this.feedback.setText("Press the Create button to open the new asset for editing. Your new asset will have the extension animation.taml. You must have your module scan the asset's folder for this extension.");
 	return true;
 }
 
 function NewAnimationAssetDialog::onClose(%this)
 {
 	Canvas.popDialog(%this);
+	%this.postEvent("DialogClosed", %this);
 }
 
 function NewAnimationAssetDialog::onCreate(%this)
@@ -149,7 +166,7 @@ function NewAnimationAssetDialog::onCreate(%this)
 	{
 		%folderPath = %this.getFolderPath();
 		%assetName = %this.assetNameBox.getText();
-		%assetPath = %folderPath @ %assetName @ ".asset.taml";
+		%assetPath = pathConcat(%folderPath, %assetName @ ".animation.taml");
 		%moduleName = getUnit(%this.moduleNameBox.getText(), 0, "_");
 		%moduleVersion = getUnit(%this.moduleNameBox.getText(), 1, "_");
 		%assetID = %moduleName @ ":" @ %assetName;

+ 16 - 0
editor/AssetAdmin/NewAssetButton.cs

@@ -18,6 +18,7 @@ function NewAssetButton::onNewImageAsset(%this)
 		dialogText = "New Image Asset";
 	};
 	%dialog.init(%width, %height);
+	%this.startListening(%dialog);
 
 	Canvas.pushDialog(%dialog);
 }
@@ -35,6 +36,7 @@ function NewAssetButton::onNewAnimationAsset(%this)
 		dialogText = "New Animation Asset";
 	};
 	%dialog.init(%width, %height);
+	%this.startListening(%dialog);
 
 	Canvas.pushDialog(%dialog);
 }
@@ -52,6 +54,7 @@ function NewAssetButton::onNewParticleAsset(%this)
 		dialogText = "New Particle Asset";
 	};
 	%dialog.init(%width, %height);
+	%this.startListening(%dialog);
 
 	Canvas.pushDialog(%dialog);
 }
@@ -69,6 +72,7 @@ function NewAssetButton::onNewFontAsset(%this)
 		dialogText = "New Bitmap Font Asset";
 	};
 	%dialog.init(%width, %height);
+	%this.startListening(%dialog);
 
 	Canvas.pushDialog(%dialog);
 }
@@ -86,6 +90,18 @@ function NewAssetButton::onNewAudioAsset(%this)
 		dialogText = "New Audio Asset";
 	};
 	%dialog.init(%width, %height);
+	%this.startListening(%dialog);
 
 	Canvas.pushDialog(%dialog);
 }
+
+function NewAssetButton::onDialogClosed(%this, %dialog)
+{
+	%this.dialog = %dialog;
+	%this.schedule(100, "deleteDialog");
+}
+
+function NewAssetButton::deleteDialog(%this)
+{
+	%this.dialog.delete();
+}

+ 20 - 3
editor/AssetAdmin/NewAudioAssetDialog.cs

@@ -36,6 +36,8 @@ function NewAudioAssetDialog::init(%this, %width, %height)
 		Position = "12 170";
 		Extent = (%width - 24) SPC 80;
 		text = "Select an Audio File to get started!";
+		textWrap = true;
+		textExtend = true;
 	};
 	ThemeManager.setProfile(%this.feedback, "infoProfile");
 
@@ -88,7 +90,7 @@ function NewAudioAssetDialog::Validate(%this)
 		%this.moduleNameBox.setText(%modSig);
 		%this.prevFile = %file;
 	}
-	%assetPath = filePath(%file) @ "/" @ %assetName @ ".asset.taml";
+	%assetPath = pathConcat(filePath(%file), %assetName @ ".audio.taml");
 	%moduleName = getUnit(%this.moduleNameBox.getText(), 0, "_");
 	%moduleVersion = getUnit(%this.moduleNameBox.getText(), 1, "_");
 	%assetID = %moduleName @ ":" @ %assetName;
@@ -117,6 +119,20 @@ function NewAudioAssetDialog::Validate(%this)
 		%this.feedback.setText("You can only create an audio asset inside of a module.");
 		return false;
 	}
+	else
+	{
+		%module = ModuleDatabase.findModule(%moduleName, %moduleVersion);
+		if(!isObject(%module))
+		{
+			%this.feedback.setText("There was a problem finding the module for this asset.");
+			return false;
+		}
+		else if(%module.Synchronized)
+		{
+			%this.feedback.setText("You cannot add assets to a library module. Updates to the module would remove your assets. Instead, create your own module and add assets to it. Remember to have your module scan for assets.");
+			return false;
+		}
+	}
 
 	%button = AssetAdmin.Dictionary["AudioAsset"].getButton(%assetID);
 	if(isObject(%button))
@@ -126,13 +142,14 @@ function NewAudioAssetDialog::Validate(%this)
 	}
 
 	%this.createButton.active = true;
-	%this.feedback.setText("Press the Create button to open the new asset for editing.");
+	%this.feedback.setText("Press the Create button to open the new asset for editing. Your new asset will have the extension audio.taml. You must have your module scan the asset's folder for this extension.");
 	return true;
 }
 
 function NewAudioAssetDialog::onClose(%this)
 {
 	Canvas.popDialog(%this);
+	%this.postEvent("DialogClosed", %this);
 }
 
 function NewAudioAssetDialog::onCreate(%this)
@@ -141,7 +158,7 @@ function NewAudioAssetDialog::onCreate(%this)
 	{
 		%file = makeFullPath(%this.imageFileBox.getText());
 		%assetName = %this.assetNameBox.getText();
-		%assetPath = filePath(%file) @ "/" @ %assetName @ ".asset.taml";
+		%assetPath = pathConcat(filePath(%file), %assetName @ ".audio.taml");
 		%moduleName = getUnit(%this.moduleNameBox.getText(), 0, "_");
 		%moduleVersion = getUnit(%this.moduleNameBox.getText(), 1, "_");
 		%assetID = %moduleName @ ":" @ %assetName;

+ 20 - 3
editor/AssetAdmin/NewFontAssetDialog.cs

@@ -36,6 +36,8 @@ function NewFontAssetDialog::init(%this, %width, %height)
 		Position = "12 170";
 		Extent = (%width - 24) SPC 80;
 		text = "Select a Bimap Font File to get started!";
+		textWrap = true;
+		textExtend = true;
 	};
 	ThemeManager.setProfile(%this.feedback, "infoProfile");
 
@@ -88,7 +90,7 @@ function NewFontAssetDialog::Validate(%this)
 		%this.moduleNameBox.setText(%modSig);
 		%this.prevFile = %file;
 	}
-	%assetPath = filePath(%file) @ "/" @ %assetName @ ".asset.taml";
+	%assetPath = pathConcat(filePath(%file), %assetName @ ".font.taml");
 	%moduleName = getUnit(%this.moduleNameBox.getText(), 0, "_");
 	%moduleVersion = getUnit(%this.moduleNameBox.getText(), 1, "_");
 	%assetID = %moduleName @ ":" @ %assetName;
@@ -117,6 +119,20 @@ function NewFontAssetDialog::Validate(%this)
 		%this.feedback.setText("You can only create a font asset inside of a module.");
 		return false;
 	}
+	else
+	{
+		%module = ModuleDatabase.findModule(%moduleName, %moduleVersion);
+		if(!isObject(%module))
+		{
+			%this.feedback.setText("There was a problem finding the module for this asset.");
+			return false;
+		}
+		else if(%module.Synchronized)
+		{
+			%this.feedback.setText("You cannot add assets to a library module. Updates to the module would remove your assets. Instead, create your own module and add assets to it. Remember to have your module scan for assets.");
+			return false;
+		}
+	}
 
 	%button = AssetAdmin.Dictionary["FontAsset"].getButton(%assetID);
 	if(isObject(%button))
@@ -126,13 +142,14 @@ function NewFontAssetDialog::Validate(%this)
 	}
 
 	%this.createButton.active = true;
-	%this.feedback.setText("Press the Create button to open the new asset for editing.");
+	%this.feedback.setText("Press the Create button to open the new asset for editing. Your new asset will have the extension font.taml. You must have your module scan the asset's folder for this extension.");
 	return true;
 }
 
 function NewFontAssetDialog::onClose(%this)
 {
 	Canvas.popDialog(%this);
+	%this.postEvent("DialogClosed", %this);
 }
 
 function NewFontAssetDialog::onCreate(%this)
@@ -141,7 +158,7 @@ function NewFontAssetDialog::onCreate(%this)
 	{
 		%file = makeFullPath(%this.imageFileBox.getText());
 		%assetName = %this.assetNameBox.getText();
-		%assetPath = filePath(%file) @ "/" @ %assetName @ ".asset.taml";
+		%assetPath = pathConcat(filePath(%file), %assetName @ ".font.taml");
 		%moduleName = getUnit(%this.moduleNameBox.getText(), 0, "_");
 		%moduleVersion = getUnit(%this.moduleNameBox.getText(), 1, "_");
 		%assetID = %moduleName @ ":" @ %assetName;

+ 20 - 3
editor/AssetAdmin/NewImageAssetDialog.cs

@@ -36,6 +36,8 @@ function NewImageAssetDialog::init(%this, %width, %height)
 		Position = "12 170";
 		Extent = (%width - 24) SPC 80;
 		text = "Select an Image File to get started!";
+		textWrap = true;
+		textExtend = true;
 	};
 	ThemeManager.setProfile(%this.feedback, "infoProfile");
 
@@ -88,7 +90,7 @@ function NewImageAssetDialog::Validate(%this)
 		%this.moduleNameBox.setText(%modSig);
 		%this.prevFile = %file;
 	}
-	%assetPath = filePath(%file) @ "/" @ %assetName @ ".asset.taml";
+	%assetPath = pathConcat(filePath(%file), %assetName @ ".image.taml");
 	%moduleName = getUnit(%this.moduleNameBox.getText(), 0, "_");
 	%moduleVersion = getUnit(%this.moduleNameBox.getText(), 1, "_");
 	%assetID = %moduleName @ ":" @ %assetName;
@@ -124,6 +126,20 @@ function NewImageAssetDialog::Validate(%this)
 		%this.feedback.setText("You can only create an image asset inside of a module.");
 		return false;
 	}
+	else
+	{
+		%module = ModuleDatabase.findModule(%moduleName, %moduleVersion);
+		if(!isObject(%module))
+		{
+			%this.feedback.setText("There was a problem finding the module for this asset.");
+			return false;
+		}
+		else if(%module.Synchronized)
+		{
+			%this.feedback.setText("You cannot add assets to a library module. Updates to the module would remove your assets. Instead, create your own module and add assets to it. Remember to have your module scan for assets.");
+			return false;
+		}
+	}
 
 	%button = AssetAdmin.Dictionary["ImageAsset"].getButton(%assetID);
 	if(isObject(%button))
@@ -133,13 +149,14 @@ function NewImageAssetDialog::Validate(%this)
 	}
 
 	%this.createButton.active = true;
-	%this.feedback.setText("Press the Create button to open the new asset for editing.");
+	%this.feedback.setText("Press the Create button to open the new asset for editing. Your new asset will have the extension image.taml. You must have your module scan the asset's folder for this extension.");
 	return true;
 }
 
 function NewImageAssetDialog::onClose(%this)
 {
 	Canvas.popDialog(%this);
+	%this.postEvent("DialogClosed", %this);
 }
 
 function NewImageAssetDialog::onCreate(%this)
@@ -148,7 +165,7 @@ function NewImageAssetDialog::onCreate(%this)
 	{
 		%file = makeFullPath(%this.imageFileBox.getText());
 		%assetName = %this.assetNameBox.getText();
-		%assetPath = filePath(%file) @ "/" @ %assetName @ ".asset.taml";
+		%assetPath = pathConcat(filePath(%file), %assetName @ ".image.taml");
 		%moduleName = getUnit(%this.moduleNameBox.getText(), 0, "_");
 		%moduleVersion = getUnit(%this.moduleNameBox.getText(), 1, "_");
 		%assetID = %moduleName @ ":" @ %assetName;

+ 20 - 3
editor/AssetAdmin/NewParticleAssetDialog.cs

@@ -44,6 +44,8 @@ function NewParticleAssetDialog::init(%this, %width, %height)
 		Position = "12 270";
 		Extent = (%width - 24) SPC 80;
 		text = "Select an Image Asset or Animation Assset to get started!";
+		textWrap = true;
+		textExtend = true;
 	};
 	ThemeManager.setProfile(%this.feedback, "infoProfile");
 
@@ -114,7 +116,7 @@ function NewParticleAssetDialog::Validate(%this)
 		%this.moduleNameBox.setText(%modSig);
 		%this.prevFolder = %folderPath;
 	}
-	%assetPath = %folderPath @ %assetName @ ".asset.taml";
+	%assetPath = pathConcat(%folderPath, %assetName @ ".particle.taml");
 	%moduleName = getUnit(%this.moduleNameBox.getText(), 0, "_");
 	%moduleVersion = getUnit(%this.moduleNameBox.getText(), 1, "_");
 	%assetID = %moduleName @ ":" @ %assetName;
@@ -136,6 +138,20 @@ function NewParticleAssetDialog::Validate(%this)
 		%this.feedback.setText("You can only create a particle asset inside of a module.");
 		return false;
 	}
+	else
+	{
+		%module = ModuleDatabase.findModule(%moduleName, %moduleVersion);
+		if(!isObject(%module))
+		{
+			%this.feedback.setText("There was a problem finding the module for this asset.");
+			return false;
+		}
+		else if(%module.Synchronized)
+		{
+			%this.feedback.setText("You cannot add assets to a library module. Updates to the module would remove your assets. Instead, create your own module and add assets to it. Remember to have your module scan for assets.");
+			return false;
+		}
+	}
 
 	%button = AssetAdmin.Dictionary["ParticleAsset"].getButton(%assetID);
 	if(isObject(%button))
@@ -145,13 +161,14 @@ function NewParticleAssetDialog::Validate(%this)
 	}
 
 	%this.createButton.active = true;
-	%this.feedback.setText("Press the Create button to open the new asset for editing.");
+	%this.feedback.setText("Press the Create button to open the new asset for editing. Your new asset will have the extension particle.taml. You must have your module scan the asset's folder for this extension.");
 	return true;
 }
 
 function NewParticleAssetDialog::onClose(%this)
 {
 	Canvas.popDialog(%this);
+	%this.postEvent("DialogClosed", %this);
 }
 
 function NewParticleAssetDialog::onCreate(%this)
@@ -160,7 +177,7 @@ function NewParticleAssetDialog::onCreate(%this)
 	{
 		%folderPath = %this.getFolderPath();
 		%assetName = %this.assetNameBox.getText();
-		%assetPath = %folderPath @ %assetName @ ".asset.taml";
+		%assetPath = pathConcat(%folderPath, %assetName @ ".particle.taml");
 		%moduleName = getUnit(%this.moduleNameBox.getText(), 0, "_");
 		%moduleVersion = getUnit(%this.moduleNameBox.getText(), 1, "_");
 		%assetID = %moduleName @ ":" @ %assetName;

+ 1 - 0
editor/AssetAdmin/ParticleEditor/AssetParticleGraphTool.cs

@@ -152,6 +152,7 @@ function AssetParticleGraphEmitterTool::initEmitter(%this)
 	};
 	ThemeManager.setProfile(%this.variGraph, "labelProfile");
 	%this.toolGrid.add(%this.variGraph);
+	%this.baseGraph.setVarianceGraph(%this.variGraph);
 
 	%this.lifeGraph = new GuiControl()
 	{

+ 5 - 0
editor/AssetAdmin/ParticleEditor/AssetParticleGraphUnit.cs

@@ -270,3 +270,8 @@ function AssetParticleGraphUnit::timeMoveForward(%this)
 	%this.timeController.moveUp();
 	%this.refreshCamera();
 }
+
+function AssetParticleGraphUnit::setVarianceGraph(%this, %variGraph)
+{
+	%this.graph.setVariationGraphInspector(%variGraph.graph);
+}

+ 6 - 1
editor/EditorConsole/EditorConsole.cs

@@ -31,7 +31,7 @@ function EditorConsole::create(%this)
 		Position="0 738";
 		Extent="1024 30";
 		minExtent="120 20";
-		AltCommand="EditorConsole.eval();";
+		ReturnCommand="EditorConsole.eval();";
 		MaxLength="255";
 		active = "1";
 	};
@@ -90,6 +90,11 @@ function EditorConsole::eval(%this)
 {
 	%text = trim(%this.consoleEntry.getValue());
 
+	if(%text $= "")
+	{
+		return;
+	}
+
     if(strpos(%text, "(") == -1 && strpos(%text, "=") == -1 && strpos(%text, " ") == -1 && strpos(%text, "{") == -1 && strpos(%text, "}") == -1)
     {
         %text = %text @ "()";

+ 5 - 0
editor/EditorCore/EditorButtonBar.cs

@@ -36,3 +36,8 @@ function EditorButtonBar::refreshEnabled(%this)
 		}
 	}
 }
+
+function EditorButtonBar::onRemove(%this)
+{
+	%this.deleteObjects();
+}

+ 113 - 4
editor/EditorCore/EditorCore.cs

@@ -22,6 +22,26 @@
 
 function EditorCore::create( %this )
 {
+	%this.editorKeyMap = new ActionMap();
+	if(!isObject(AppCore))
+	{
+		exec("./scripts/constants.cs");
+		exec("./scripts/defaultPreferences.cs");
+		exec("./gui/guiProfiles.cs");
+		%this.createGuiProfiles();
+
+		exec("./scripts/canvas.cs");
+		exec("./scripts/EditorCoreSplash.cs");
+		exec("./scripts/EditorProjectSelector.cs");
+		exec("./scripts/EditorProjectCard.cs");
+		exec("./scripts/NewProjectDialog.cs");
+
+		%this.initializeCanvas("Torque2D: Rocket Edition");
+	}
+	else
+	{
+		%this.editorKeyMap.bindCmd( "keyboard", "ctrl tilde", "EditorCore.toggleEditor();", "");
+	}
 	exec("./Themes/ThemeManager.cs");
 	exec("./EditorDialog.cs");
 	exec("./EditorForm.cs");
@@ -31,9 +51,6 @@ function EditorCore::create( %this )
 	new ScriptObject(ThemeManager);
 
 	%this.initGui();
-
-	%this.editorKeyMap = new ActionMap();
-    %this.editorKeyMap.bindCmd( "keyboard", "ctrl tilde", "EditorCore.toggleEditor();", "");
 	%this.editorKeyMap.push();
 }
 
@@ -57,12 +74,22 @@ function EditorCore::initGui(%this)
 	%this.menuBar = new GuiMenuBarCtrl()
 	{
 		new GuiMenuItemCtrl() {
-			Text = "Tools";
+			Text = "Torque2D";
 
 			new GuiMenuItemCtrl() {
 				Text = "Close Tools";
 				Command = "EditorCore.close();";
 			};
+
+			new GuiMenuItemCtrl() {
+				Text = "Close Project";
+				Command = "restartInstance();";
+			};
+
+			new GuiMenuItemCtrl() {
+				Text = "Exit";
+				Command = "quit();";
+			};
 		};
 		new GuiMenuItemCtrl() {
 			Text = "Theme";
@@ -121,6 +148,54 @@ function EditorCore::initGui(%this)
 	ThemeManager.setProfile(%this.tabBook, "tabProfileTop", "TabProfile");
 
 	%this.baseGui.add(%this.tabBook);
+
+	%this.torqueBackground = new GuiSpriteCtrl()
+	{
+		HorizSizing = width;
+		VertSizing = height;
+		Position = "0 0";
+		Extent = "1024 768";
+		SingleFrameBitmap = "1";
+		ConstrainProportions = "0";
+		FullSize = "1";
+		ImageColor = "255 255 255 255";
+		PositionOffset = "0 0";
+		Visible = false;
+	};
+	ThemeManager.setProfile(%this.torqueBackground, "spriteProfile");
+	ThemeManager.setImage(%this.torqueBackground, "editorBG");
+	%this.baseGui.add(%this.torqueBackground);
+
+	%this.projectSelector = new GuiControl()
+	{
+		Class = EditorProjectSelector;
+		HorizSizing = width;
+		VertSizing = height;
+		Position = "0 0";
+		Extent = "1024 768";
+		Visible = false;
+	};
+	ThemeManager.setProfile(%this.projectSelector, "emptyProfile");
+	%this.baseGui.add(%this.projectSelector);
+
+	%this.splash = new GuiSpriteCtrl()
+	{
+		Class = EditorCoreSplash;
+		HorizSizing = width;
+		VertSizing = height;
+		Position = "0 0";
+		Extent = "1024 768";
+		Bitmap = "./images/t2d_rocket_splash.png";
+		SingleFrameBitmap = "1";
+		constrainProportions = "1";
+		FullSize = "0";
+		ImageSize = "672 480";
+		ImageColor = "255 255 255 0";
+		PositionOffset = "0 20";
+		Visible = false;
+	};
+	ThemeManager.setProfile(%this.splash, "spriteProfile");
+	%this.baseGui.add(%this.splash);
 }
 
 function EditorCore::toggleEditor(%this)
@@ -145,6 +220,7 @@ function EditorCore::open(%this)
     Canvas.pushDialog(%this.baseGui);
 
 	%this.tabBook.selectPage(0);
+	Canvas.setCursor(ThemeManager.activeTheme.defaultCursor);
 }
 
 function EditorCore::close(%this)
@@ -152,6 +228,11 @@ function EditorCore::close(%this)
 	if ( $enableDirectInput )
 		activateKeyboard();
 	Canvas.popDialog(%this.baseGui);
+
+	if(isObject(defaultCursor))
+	{
+		Canvas.setCursor(defaultCursor);
+	}
 }
 
 function EditorCore::RegisterEditor(%this, %name, %editor)
@@ -233,3 +314,31 @@ function EditorCore::flattenPath(%this, %path)
 
 	return %result;
 }
+
+function EditorCore::showProjectSelector(%this)
+{
+	%this.menuBar.setVisible(false);
+	%this.tabBook.setVisible(false);
+	%this.projectSelector.setVisible(true);
+	%this.splash.show();
+	%this.torqueBackground.setVisible(true);
+	%this.projectSelector.schedule(2800, "show");
+	%this.startListening(%this.projectSelector);
+}
+
+function EditorCore::onProjectSelected(%this)
+{
+	%this.close();
+	%this.menuBar.setVisible(true);
+	%this.tabBook.setVisible(true);
+	%this.projectSelector.setVisible(false);
+	%this.torqueBackground.setVisible(false);
+	%this.stopListening(%this.projectSelector);
+	%this.schedule(500, "finishProjectSelection");
+}
+
+function EditorCore::finishProjectSelection(%this)
+{
+	ModuleDatabase.LoadExplicit("AppCore", 1);
+	%this.editorKeyMap.bindCmd( "keyboard", "ctrl tilde", "EditorCore.toggleEditor();", "");
+}

+ 12 - 2
editor/EditorCore/EditorForm.cs

@@ -49,6 +49,8 @@ function EditorForm::createTextEditItem(%this, %label)
 		Position = "10 16";
 		Extent = (getWord(%label.extent, 0) - 24) SPC 30;
 	};
+	%textEdit.Command = %this.getID() @ ".postEvent(\"KeyPressed\", " @ %textEdit.getID() @ ");";
+	%textEdit.ReturnCommand = %this.getID() @ ".postEvent(\"ReturnPressed\", " @ %textEdit.getID() @ ");";
 	ThemeManager.setProfile(%textEdit, "textEditProfile");
 	%label.add(%textEdit);
 	return %textEdit;
@@ -75,13 +77,14 @@ function EditorForm::createFileOpenItem(%this, %label, %filters, %dialogTitle)
 
 function EditorForm::getFilePath(%this, %filter, %title, %textEdit)
 {
+	%path = pathConcat(getMainDotCsDir(), ProjectManager.getProjectFolder());
 	%dialog = new OpenFileDialog()
 	{
 		Filters = %filter;
 		ChangePath = false;
 		MultipleFiles = false;
 		DefaultFile = "";
-		defaultPath = "./";
+		defaultPath = %path;
 		title = %title;
 	};
 	%result = %dialog.execute();
@@ -119,12 +122,13 @@ function EditorForm::createFolderOpenItem(%this, %label, %dialogTitle)
 
 function EditorForm::getFolderPath(%this, %title, %textEdit)
 {
+	%path = pathConcat(getMainDotCsDir(), ProjectManager.getProjectFolder());
 	%dialog = new OpenFolderDialog()
 	{
 		Filters = "All Files|*.*";
 		ChangePath = false;
 		DefaultFile = "";
-		defaultPath = "./";
+		defaultPath = %path;
 		title = %title;
 	};
 	%result = %dialog.execute();
@@ -172,6 +176,7 @@ function EditorForm::createCheckboxItem(%this, %label)
 		Extent = (getWord(%label.extent, 0) - 24) SPC 30;
 		Text = %label.text;
 	};
+	%box.textExtent = getWord(%box.Extent, 0) - getWord(%box.textOffset, 0);
 	ThemeManager.setProfile(%box, "checkboxProfile");
 	%label.add(%box);
 	%label.text = "";
@@ -182,3 +187,8 @@ function EditorFormDropDown::onClose(%this)
 {
 	%this.form.postEvent("DropDownClosed", %this);
 }
+
+function EditorFormDropDown::onSelect(%this)
+{
+	%this.form.postEvent("DropDownSelect", %this);
+}

+ 9 - 0
editor/EditorCore/EditorIconButton.cs

@@ -17,6 +17,7 @@ function EditorIconButton::onAdd(%this)
 		ImageColor = ThemeManager.activeTheme.iconButtonProfile.FontColor;
 		Frame = %this.frame;
 		Tooltip = %this.Tooltip;
+		UseInput = false;
 	};
 	ThemeManager.setProfile(%this.icon, "spriteProfile");
 	%this.add(%this.icon);
@@ -71,3 +72,11 @@ function EditorIconButton::onThemeChange(%this, %theme)
 		%this.icon.setImageColor(ThemeManager.activeTheme.iconButtonProfile.fontColorNA);
 	}
 }
+
+function EditorIconButton::onRemove(%this)
+{
+	if(isObject(%this.icon))
+	{
+		%this.icon.delete();
+	}
+}

+ 262 - 18
editor/EditorCore/Themes/BaseTheme/BaseTheme.cs

@@ -16,9 +16,9 @@ function BaseTheme::onAdd(%this)
 		borderNA = 0;
 		//Default border color
 		borderColor   = $color1;
-	    borderColorHL = AdjustColorValue($color1, 10);
-	    borderColorSL = AdjustColorValue($color1, 10);
-	    borderColorNA = SetColorAlpha($color1, 100);
+	    borderColorHL = %this.adjustValue($color1, 10);
+	    borderColorSL = %this.adjustValue($color1, 10);
+	    borderColorNA = %this.setAlpha($color1, 100);
 		//Default Padding
 		padding = 0;
 		paddingHL = 0;
@@ -45,6 +45,7 @@ function BaseTheme::onAdd(%this)
 		borderDefault = %this.emptyBorder;
 	};
 
+	%this.makeCursors();
 	%this.makeTipProfile();
 	%this.makeGeneralProfiles();
 	%this.makePanelProfile();
@@ -63,6 +64,8 @@ function BaseTheme::onAdd(%this)
 	%this.makeWindowProfile();
 	%this.makeListBoxProfile();
 	%this.makeGraphProfile();
+	%this.makeTextDisplayProfile();
+	%this.makeSubListProfile();
 }
 
 function BaseTheme::init(%this)
@@ -83,6 +86,27 @@ function BaseTheme::init(%this)
 	%this.color5 = "255 133 0 255";//Flavor color that mostly is used on objects during interaction
 
 	%this.borderSize = 3;
+
+	%this.editorBG = "EditorCore:editorBG_BaseTheme";
+	%this.fixedHeader200x20 = "EditorCore:fixedHeader200x20_BaseTheme";
+	%this.displayBox = "EditorCore:displayBox_BaseTheme";
+}
+
+function BaseTheme::makeCursors(%this)
+{
+	%this.defaultCursor = new GuiCursor()
+	{
+	    hotSpot = "1 1";
+	    renderOffset = "0 0";
+	    bitmapName = "^EditorCore/Themes/BaseTheme/images/cursors/defaultCursor.png";
+	};
+
+	%this.editCursor = new GuiCursor()
+	{
+	   hotSpot = "0 0";
+	   renderOffset = "0.5 0.5";
+	   bitmapName = "^EditorCore/Themes/BaseTheme/images/cursors/ibeam.png";
+	};
 }
 
 function BaseTheme::makeTipProfile(%this)
@@ -96,11 +120,11 @@ function BaseTheme::makeTipProfile(%this)
 
 	%this.tipProfile = new GuiControlProfile()
 	{
-		fillColor = %this.setAlpha(%this.color3, 220);
+		fillColor = %this.setAlpha(%this.color3, 240);
 
 		fontType = %this.font[1];
 		fontDirectory = %this.fontDirectory;
-		fontSize = %this.fontSize - 2;
+		fontSize = %this.fontSize - 4;
 		fontColor = %this.color1;
 
 		borderDefault = %tipBorder;
@@ -190,7 +214,29 @@ function BaseTheme::makeGeneralProfiles(%this)
 		vAlign = middle;
 
 		borderDefault = %this.emptyBorder;
-		useInput = false;
+	};
+
+	%displayBorder = new GuiBorderProfile()
+	{
+		margin = 1;
+		marginHL = 0;
+		marginSL = 0;
+		marginNA = 1;
+
+		padding = 4;
+		paddingHL = 5;
+		paddingSL = 5;
+		paddingNA = 4;
+	};
+	//A nice container box with all four states
+	%this.displayBoxProfile = new GuiControlProfile()
+	{
+		ImageAsset = "EditorCore:displayBox_BaseTheme";
+		fillColor = "0 0 0 0";
+		align = center;
+		vAlign = middle;
+
+		borderDefault = %displayBorder;
 	};
 }
 
@@ -378,6 +424,71 @@ function BaseTheme::makeItemSelectProfile(%this)
 	};
 }
 
+function BaseTheme::makeSubListProfile(%this)
+{
+	%vBorder = new GuiBorderProfile()
+	{
+		padding = 1;
+		paddingHL = 1;
+		paddingSL = 1;
+		paddingNA = 1;
+
+		border = 1;
+		borderHL = 1;
+		borderSL = 1;
+		borderNA = 1;
+
+		borderColor = %this.setAlpha(%this.color1, 150);
+		borderColorHL = %this.setAlpha(%this.color1, 240);
+		borderColorSL = %this.setAlpha(%this.color5, 200);
+		borderColorNA = %this.setAlpha(%this.color1, 100);
+
+		underfill = false;
+	};
+
+	%hBorder = new GuiBorderProfile()
+	{
+		padding = 4;
+		paddingHL = 4;
+		paddingSL = 4;
+		paddingNA = 4;
+
+		border = 1;
+		borderHL = 1;
+		borderSL = 1;
+		borderNA = 1;
+
+		borderColor = %this.setAlpha(%this.color1, 150);
+		borderColorHL = %this.setAlpha(%this.color1, 240);
+		borderColorSL = %this.setAlpha(%this.color5, 200);
+		borderColorNA = %this.setAlpha(%this.color1, 100);
+
+		underfill = false;
+	};
+
+	%this.subListProfile = new GuiControlProfile()
+	{
+		fillColor = %this.setAlpha(%this.color1, 100);
+		fillColorHL = %this.setAlpha(%this.color1, 200);
+		fillColorSL = %this.color5;
+		fillColorNA = %this.setAlpha(%this.color1, 10);
+
+		fontType = %this.font[3];
+		fontDirectory = %this.fontDirectory;
+		fontSize = %this.fontSize - 2;
+		fontColor = %this.setAlpha(%this.color4, 150);
+		fontColorHL = %this.adjustValue(%this.color4, 10);
+		fontColorSL = %this.color1;
+		fontColorNA = %this.setAlpha(%this.color4, 50);
+		align = Center;
+		vAlgin = Middle;
+
+		borderDefault = %vBorder;
+		borderLeft = %hBorder;
+		borderRight = %hBorder;
+	};
+}
+
 function BaseTheme::makeButtonProfile(%this)
 {
 	%borderLightH = new GuiBorderProfile()
@@ -489,7 +600,7 @@ function BaseTheme::makeIconButtonProfile(%this)
 		borderColor = "255 255 255 80";
 		borderColorHL = "255 255 255 80";
 		borderColorSL = "0 0 0 80";
-		borderColorNA = "255 255 255 80";
+		borderColorNA = "255 255 255 40";
 
 		underfill = true;
 	};
@@ -504,17 +615,17 @@ function BaseTheme::makeIconButtonProfile(%this)
 		borderColor = "0 0 0 80";
 		borderColorHL = "0 0 0 80";
 		borderColorSL = "255 255 255 80";
-		borderColorNA = "0 0 0 80";
+		borderColorNA = "0 0 0 120";
 
 		underfill = true;
 	};
 
 	%this.iconButtonProfile = new GuiControlProfile()
 	{
-		fillColor = %this.color4;
+		fillColor = %this.setAlpha(%this.color4, 100);
 		fillColorHL = %this.adjustValue(%this.color4, 10);
 		fillColorSL = %this.color5;
-		fillColorNA = %this.setAlpha(%this.color4, 80);
+		fillColorNA = %this.setAlpha(%this.color4, 20);
 
 		fontColor = %this.color1;
 		fontColorHL = %this.adjustValue(%this.color1, 10);
@@ -1005,18 +1116,20 @@ function BaseTheme::makeTextEditProfile(%this)
 		borderDefault = %labelBorder;
 	};
 
-	//border for text boxes never use the HL state.
 	%textBorderV = new GuiBorderProfile()
 	{
 		padding = 2;
+		paddingHL = 2;
 		paddingSL = 2;
 		paddingNA = 2;
 
 		border = %this.borderSize;
+		borderHL = %this.borderSize;
 		borderSL = %this.borderSize;
 		borderNA = %this.borderSize;
 
 		borderColor = %this.color3;
+		borderColorHL = %this.adjustValue(%this.color5, 10);
 		borderColorSL = %this.color5;
 		borderColorNA = %this.setAlpha(%this.color3, 100);
 	};
@@ -1024,14 +1137,17 @@ function BaseTheme::makeTextEditProfile(%this)
 	%textBorderH = new GuiBorderProfile()
 	{
 		padding = 10;
+		paddingHL = 10;
 		paddingSL = 10;
 		paddingNA = 10;
 
 		border = %this.borderSize;
+		borderHL = %this.borderSize;
 		borderSL = %this.borderSize;
 		borderNA = %this.borderSize;
 
 		borderColor = %this.color3;
+		borderColorHL = %this.adjustValue(%this.color5, 10);
 		borderColorSL = %this.color5;
 		borderColorNA = %this.setAlpha(%this.color3, 100);
 	};
@@ -1039,9 +1155,10 @@ function BaseTheme::makeTextEditProfile(%this)
 	%this.textEditProfile = new GuiControlProfile()
 	{
 		fillColor = %this.color4;
-		fillColorHL = %this.color5;//used for selected text
+		fillColorHL = %this.adjustValue(%this.color4, 10);
 		fillColorSL = %this.color4;
 		fillColorNA = %this.setAlpha(%this.color4, 80);
+		fillColorTextSL = %this.color5;
 
 		fontType = %this.font[3];
 		fontDirectory = %this.fontDirectory;
@@ -1050,17 +1167,18 @@ function BaseTheme::makeTextEditProfile(%this)
 		fontColorHL = %this.adjustValue(%this.color1, 10);
 		fontColorSL = %this.color1;
 		fontColorNA = %this.setAlpha(%this.color1, 100);
+		fontColorTextSL = %this.color1;
 		align = left;
-		cursorColor = %this.color1;
+		vAlign = middle;
+		cursorColor = %this.color2;
 
 		borderDefault = %textBorderV;
 		borderRight = %textBorderH;
 		borderLeft = %textBorderH;
 
-		tab = false;
+		tab = true;
 		canKeyFocus = true;
 		returnTab = true;
-		useInput = true;
 	};
 }
 
@@ -1163,9 +1281,49 @@ function BaseTheme::makeScrollProfile(%this)
 	%this.scrollProfile = new GuiControlProfile()
 	{
 	    fillColor = %this.setAlpha(%this.color2, 180);
-
 		borderDefault = %mainBorder;
 	};
+
+	//Tiny scroll profile - for uses when you have little space
+	%this.tinyTrackProfile = new GuiControlProfile()
+	{
+			fillColor = %this.setAlpha(%this.color2, 150);
+			fillColorHL = %this.setAlpha(%this.color2, 150);
+			fillColorSL = %this.setAlpha(%this.adjustValue(%this.color2, 10), 150);
+			fillColorNA = %this.setAlpha(%this.color2, 50);
+			borderDefault = %this.emptyBorder;
+	};
+
+	%this.tinyThumbProfile = new GuiControlProfile()
+	{
+		fillColor = %this.color3;
+		fillColorHL = %this.adjustValue(%this.color3, 10);
+		fillColorSL = %this.color5;
+		fillColorNA = %this.setAlpha(%this.color3, 80);
+		borderDefault = %this.emptyBorder;
+	};
+
+	//probably best to avoid the arrow buttons for very small scroll bars
+	%this.tinyScrollArrowProfile = new GuiControlProfile()
+	{
+		fillColor = %this.color3;
+		fillColorHL = %this.adjustValue(%this.color3, 10);
+		fillColorSL = %this.color5;
+		fillColorNA = %this.setAlpha(%this.color3, 80);
+
+		fontType = %this.font[1];
+		fontDirectory = %this.fontDirectory;
+		fontColor = %this.color2;
+		fontColorHL = %this.color2;
+		fontColorSL = %this.color4;
+		fontColorNA = %this.setAlpha(%this.color2, 80);
+		borderDefault = %this.emptyBorder;
+	};
+	%this.tinyScrollProfile = new GuiControlProfile()
+	{
+	    fillColor = %this.setAlpha(%this.color2, 180);
+		borderDefault = %this.emptyBorder;
+	};
 }
 
 function BaseTheme::makeConsoleProfile(%this)
@@ -1478,9 +1636,9 @@ function BaseTheme::makeDropDownProfile(%this)
 	%this.DropDownItemProfile = new GuiControlProfile()
 	{
 		fillColor = %this.color1;
-	    fillColorHL = AdjustColorValue(%this.color1, 10);
+	    fillColorHL = %this.adjustValue(%this.color1, 10);
 	    fillColorSL = %this.color5;
-	    fillColorNA = SetColorAlpha(%this.color1, 100);
+	    fillColorNA = %this.setAlpha(%this.color1, 100);
 
 		fontType = %this.font[3];
 		fontDirectory = %this.fontDirectory;
@@ -1692,6 +1850,92 @@ function BaseTheme::makeGraphProfile(%this)
 	};
 }
 
+function BaseTheme::makeTextDisplayProfile(%this)
+{
+	%border = new GuiBorderProfile()
+	{
+		padding = 5;
+	};
+
+	%this.titleProfile = new GuiControlProfile()
+	{
+		fillColor = "0 0 0 0";
+		fillColorHL = "0 0 0 0";
+		fillColorSL = "0 0 0 0";
+		fillColorNA = "0 0 0 0";
+
+		fontType = %this.font[2];
+		fontDirectory = %this.fontDirectory;
+		fontSize = 28;
+		fontColor = %this.adjustValue(%this.color4, 10);
+		align = "left";
+		vAlign = "top";
+
+		borderDefault = %border;
+		borderTop = %this.emptyBorder;
+		borderBottom = %this.emptyBorder;
+	};
+
+	%this.codeProfile = new GuiControlProfile()
+	{
+		fillColor = "0 0 0 0";
+		fillColorHL = "0 0 0 0";
+		fillColorSL = "0 0 0 0";
+		fillColorNA = "0 0 0 0";
+
+		fontType = %this.font[3];
+		fontDirectory = %this.fontDirectory;
+		fontSize = 18;
+		fontColor = %this.adjustValue(%this.color2, 10);
+		align = "left";
+		vAlign = "top";
+
+		borderDefault = %border;
+		borderTop = %this.emptyBorder;
+		borderBottom = %this.emptyBorder;
+	};
+
+	%this.normalTextProfile = new GuiControlProfile()
+	{
+		fillColor = "0 0 0 0";
+		fillColorHL = "0 0 0 0";
+		fillColorSL = "0 0 0 0";
+		fillColorNA = "0 0 0 0";
+
+		fontType = %this.font[1];
+		fontDirectory = %this.fontDirectory;
+		fontSize = 20;
+		fontColor = %this.adjustValue(%this.color3, 10);
+		align = "left";
+		vAlign = "top";
+
+		borderDefault = %border;
+		borderTop = %this.emptyBorder;
+		borderBottom = %this.emptyBorder;
+	};
+
+	%spacerBorder = new GuiBorderProfile()
+	{
+		margin = 3;
+	};
+
+	%this.spacerProfile = new GuiControlProfile()
+	{
+		fillColor = %this.color5;
+		fontType = %this.font[1];
+		fontDirectory = %this.fontDirectory;
+		fontSize = 14;
+		fontColor = %this.color1;
+		align = "center";
+		vAlign = "middle";
+
+		borderDefault = %this.emptyBorder;
+		borderLeft = %spacerBorder;
+		borderRight = %spacerBorder;
+		borderBottom = %spacerBorder;
+	};
+}
+
 //Positive values are brighter, negative are darker
 function BaseTheme::adjustValue(%this, %color, %percent)
 {

BIN
editor/EditorCore/Themes/BaseTheme/images/cursors/defaultCursor.png


BIN
editor/EditorCore/Themes/BaseTheme/images/cursors/ibeam.png


+ 9 - 0
editor/EditorCore/Themes/BaseTheme/images/displayBox.asset.taml

@@ -0,0 +1,9 @@
+<ImageAsset
+    AssetName="displayBox_BaseTheme"
+    ImageFile="displayBox.png"
+    CellCountX="9"
+    CellCountY="4"
+    CellWidth="5"
+    CellHeight="5"
+	FilterMode="Nearest"
+	AssetInternal="1" />

BIN
editor/EditorCore/Themes/BaseTheme/images/displayBox.png


+ 4 - 0
editor/EditorCore/Themes/BaseTheme/images/editorBG.asset.taml

@@ -0,0 +1,4 @@
+<ImageAsset
+    AssetName="editorBG_BaseTheme"
+    ImageFile="editorBG.png"
+	AssetInternal="1" />

BIN
editor/EditorCore/Themes/BaseTheme/images/editorBG.png


+ 4 - 0
editor/EditorCore/Themes/BaseTheme/images/fixedHeader200x20.asset.taml

@@ -0,0 +1,4 @@
+<ImageAsset
+    AssetName="fixedHeader200x20_BaseTheme"
+    ImageFile="fixedHeader200x20.png"
+	AssetInternal="1" />

BIN
editor/EditorCore/Themes/BaseTheme/images/fixedHeader200x20.png


+ 4 - 0
editor/EditorCore/Themes/ForestRobe/ForestRobeTheme.cs

@@ -16,4 +16,8 @@ function ForestRobeTheme::init(%this)
 	%this.color5 = "216 114 107 255";
 
 	%this.borderSize = 3;
+
+	%this.editorBG = "EditorCore:editorBG_BaseTheme";
+	%this.fixedHeader200x20 = "EditorCore:fixedHeader200x20_BaseTheme";
+	%this.displayBox = "EditorCore:displayBox_BaseTheme";
 }

+ 4 - 0
editor/EditorCore/Themes/LabCoat/LabCoatTheme.cs

@@ -16,6 +16,10 @@ function LabCoatTheme::init(%this)
 	%this.color5 = "16 162 235 255";
 
 	%this.borderSize = 2;
+
+	%this.editorBG = "EditorCore:editorBG_BaseTheme";
+	%this.fixedHeader200x20 = "EditorCore:fixedHeader200x20_BaseTheme";
+	%this.displayBox = "EditorCore:displayBox_BaseTheme";
 }
 
 function LabCoatTheme::makePanelProfile(%this)

+ 48 - 0
editor/EditorCore/Themes/ThemeManager.cs

@@ -29,6 +29,7 @@ function ThemeManager::onAdd(%this)
 
 	%this.themeList = new SimSet();
 	%this.controlList = new SimSet();
+	%this.spriteList = new SimSet();
 
 	%constructionVest = new ScriptObject()
 	{
@@ -67,6 +68,7 @@ function ThemeManager::setTheme(%this, %i)
 	%theme = %this.themeList.getObject(%i);
 	%this.activeTheme = %theme;
 	%this.refreshProfiles();
+	%this.refreshSprites();
 	%this.postEvent("ThemeChange", %theme);
 }
 
@@ -99,6 +101,30 @@ function ThemeManager::refreshProfiles(%this)
 			}
 
 			%obj.gui.setEditFieldValue(%obj.profileTag, %this.activeTheme.getFieldValue(%obj.profileName));
+
+			if(%obj.profileName $= "textEditProfile")
+			{
+				%obj.gui.editCursor = %this.activeTheme.editCursor;
+			}
+		}
+		else
+		{
+			//let's remove this corpse
+			%this.controlList.remove(%obj);
+			%this.i--;
+		}
+	}
+}
+
+function ThemeManager::refreshSprites(%this)
+{
+	for (%i = 0; %i < %this.spriteList.getCount(); %i++)
+	{
+		%obj = %this.spriteList.getObject(%i);
+
+		if(isObject(%obj.sprite))
+		{
+			%obj.sprite.setImage(%this.activeTheme.getFieldValue(%obj.imageName), %obj.frame);
 		}
 		else
 		{
@@ -130,6 +156,28 @@ function ThemeManager::setProfile(%this, %gui, %profileName, %profileTag)
 			profileName = %profileName;
 		}
 	);
+
+	if(%profileName $= "textEditProfile")
+	{
+		%gui.editCursor = %this.activeTheme.editCursor;
+	}
+}
+
+function ThemeManager::setImage(%this, %sprite, %imageName, %frame)
+{
+	if(%frame $= "")
+	{
+		%frame = 0;
+	}
+	%sprite.setImage(%this.activeTheme.getFieldValue(%imageName), %frame);
+	%this.spriteList.add(
+		new ScriptObject()
+		{
+			sprite = %sprite;
+			frame = %frame;
+			imageName = %imageName;
+		}
+	);
 }
 
 function ThemeManager::createProfile(%this, %profileName, %parentName, %settings)

+ 48 - 2
editor/EditorCore/Themes/TorqueSuit/TorqueSuitTheme.cs

@@ -16,6 +16,10 @@ function TorqueSuitTheme::init(%this)
 	%this.color5 = "33 191 132 255";
 
 	%this.borderSize = 4;
+
+	%this.editorBG = "EditorCore:editorBG_BaseTheme";
+	%this.fixedHeader200x20 = "EditorCore:fixedHeader200x20_BaseTheme";
+	%this.displayBox = "EditorCore:displayBox_BaseTheme";
 }
 
 function TorqueSuitTheme::makeButtonProfile(%this)
@@ -292,7 +296,6 @@ function TorqueSuitTheme::makeTextEditProfile(%this)
 		borderDefault = %labelBorder;
 	};
 
-	//border for text boxes never use the HL state.
 	%textBorderV = new GuiBorderProfile()
 	{
 		padding = 3;
@@ -350,9 +353,10 @@ function TorqueSuitTheme::makeTextEditProfile(%this)
 	%this.textEditProfile = new GuiControlProfile()
 	{
 		fillColor = %this.color1;
-		fillColorHL = %this.adjustValue(%this.color1, 20);//used for selected text
+		fillColorHL = %this.adjustValue(%this.color1, 10);
 		fillColorSL = %this.color1;
 		fillColorNA = %this.setAlpha(%this.color1, 80);
+		fillColorTextSL = %this.adjustValue(%this.color5, -30);
 
 		fontType = %this.font[3];
 		fontDirectory = %this.fontDirectory;
@@ -361,6 +365,7 @@ function TorqueSuitTheme::makeTextEditProfile(%this)
 		fontColorHL = %this.adjustValue(%this.color4, 10);
 		fontColorSL = %this.color4;
 		fontColorNA = %this.setAlpha(%this.color4, 100);
+		fontColorTextSL = %this.color1;
 		align = left;
 		cursorColor = %this.color5;
 
@@ -448,6 +453,47 @@ function TorqueSuitTheme::makeScrollProfile(%this)
 
 		borderDefault = %mainBorder;
 	};
+
+	//Tiny scroll profile - for uses when you have little space
+	%this.tinyTrackProfile = new GuiControlProfile()
+	{
+			fillColor = %this.setAlpha(%this.color2, 150);
+			fillColorHL = %this.setAlpha(%this.color2, 150);
+			fillColorSL = %this.setAlpha(%this.adjustValue(%this.color2, 10), 150);
+			fillColorNA = %this.setAlpha(%this.color2, 50);
+			borderDefault = %this.emptyBorder;
+	};
+
+	%this.tinyThumbProfile = new GuiControlProfile()
+	{
+		fillColor = %this.color3;
+		fillColorHL = %this.adjustValue(%this.color3, 10);
+		fillColorSL = %this.color5;
+		fillColorNA = %this.setAlpha(%this.color3, 80);
+		borderDefault = %this.emptyBorder;
+	};
+
+	//probably best to avoid the arrow buttons for very small scroll bars
+	%this.tinyScrollArrowProfile = new GuiControlProfile()
+	{
+		fillColor = %this.color3;
+		fillColorHL = %this.adjustValue(%this.color3, 10);
+		fillColorSL = %this.color5;
+		fillColorNA = %this.setAlpha(%this.color3, 80);
+
+		fontType = %this.font[1];
+		fontDirectory = %this.fontDirectory;
+		fontColor = %this.color2;
+		fontColorHL = %this.color2;
+		fontColorSL = %this.color4;
+		fontColorNA = %this.setAlpha(%this.color2, 80);
+		borderDefault = %this.emptyBorder;
+	};
+	%this.scrollProfile = new GuiControlProfile()
+	{
+	    fillColor = %this.setAlpha(%this.color2, 180);
+		borderDefault = %this.emptyBorder;
+	};
 }
 
 function TorqueSuitTheme::makeConsoleProfile(%this)

+ 547 - 0
editor/EditorCore/gui/guiProfiles.cs

@@ -0,0 +1,547 @@
+//-----------------------------------------------------------------------------
+// Copyright (c) 2013 GarageGames, LLC
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to
+// deal in the Software without restriction, including without limitation the
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+// sell copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+// IN THE SOFTWARE.
+//-----------------------------------------------------------------------------
+
+function EditorCore::SetProfileColors(%this)
+{
+	%this.color[1] = "43 43 43 255";
+	%this.color[2] = "81 92 102 255";
+	%this.color[3] = "224 224 224 255";
+	%this.color[4] = "54 135 196 255";
+	%this.color[5] = "245 210 50 255";
+	%this.color[6] = "196 54 71 255";
+}
+
+function EditorCore::SetProfileFont(%this)
+{
+	if ($platform $= "windows")
+		%this.platformFontType = "share tech mono";
+	else if ($platform $= "Android")
+		%this.platformFontType = "Droid";
+	else
+		%this.platformFontType = "monaco";
+	if ($platform $= "ios")
+		%this.platformFontSize = 18;
+	else if ($platform $= "Android")
+		%this.platformFontSize = 14;
+	else
+		%this.platformFontSize = 12;
+}
+
+function EditorCore::AdjustColorValue(%this, %color, %percent)
+{
+	%red = getWord(%color, 0);
+	%green = getWord(%color, 1);
+	%blue = getWord(%color, 2);
+	%alpha = getWord(%color, 3);
+
+	%largest = mGetMax(%red, mGetMax(%blue, %green));
+	%currentValue = %largest / 255;
+	%fullRed = %red / %currentValue;
+	%fullGreen = %green / %currentValue;
+	%fullBlue = %blue / %currentValue;
+
+	%newValue = %currentValue += (%percent/100);
+	%newValue = mClamp(%newValue, 0, 100);
+	%newColor = mRound(mClamp((%fullRed * %newValue), 0, 255)) SPC
+		mRound(mClamp((%fullGreen * %newValue), 0, 255)) SPC
+		mRound(mClamp((%fullBlue * %newValue), 0, 255)) SPC %alpha;
+
+	return %newColor;
+}
+
+function EditorCore::SetColorAlpha(%this, %color, %newAlpha)
+{
+	%red = getWord(%color, 0);
+	%green = getWord(%color, 1);
+	%blue = getWord(%color, 2);
+	return %red SPC %green SPC %blue SPC mRound(mClamp(%newAlpha, 0, 255));
+}
+
+function EditorCore::SafeCreateNamedObject(%this, %name, %object)
+{
+	if(isObject(%name))
+	{
+		%originalObject = nameToID(%name);
+		if(%orginalObject.getClassName() !$= %object.getClassName())
+		{
+			warn("Attempted to change the class of the named object " @ %name @ "!");
+			warn("Original Class: " @ %originalObject.getClassName());
+			warn("New Class: " @ %object.getClassName());
+			return;
+		}
+		%originalObject.assignFieldsFrom(%object);
+		%object.delete();
+	}
+	else
+	{
+		%object.setName(%name);
+	}
+}
+
+function EditorCore::createGuiProfiles(%this)
+{
+	%this.SetProfileColors();
+	%this.SetProfileFont();
+
+	//Changing the default gui profile and border profile might cause engine instability! Consider making a new child profile instead.
+	%this.SafeCreateNamedObject("GuiDefaultBorderProfile", new GuiBorderProfile()
+	{
+		// Default margin
+		margin = 0;
+		marginHL = 0;
+		marginSL = 0;
+		marginNA = 0;
+		//Default Border
+		border = 0;
+		borderHL = 0;
+		borderSL = 0;
+		borderNA = 0;
+		//Default border color
+		borderColor   = %this.color1;
+	    borderColorHL = %this.AdjustColorValue(%this.color1, 10);
+	    borderColorSL = %this.AdjustColorValue(%this.color1, 10);
+	    borderColorNA = %this.SetColorAlpha(%this.color1, 100);
+		//Default Padding
+		padding = 0;
+		paddingHL = 0;
+		paddingSL = 0;
+		paddingNA = 0;
+		//Default underfill
+		underfill = true;
+	});
+
+	//See the warning above! You should avoid changing this.
+	%this.SafeCreateNamedObject("GuiDefaultProfile", new GuiControlProfile()
+	{
+	    // fill color
+	    fillColor = "0 0 0 0";
+
+	    // font
+	    fontType = %this.platformFontType;
+		fontDirectory = "^EditorCore/gui/fonts";
+	    fontSize = %this.platformFontSize;
+	    fontColor = "255 255 255 255";
+		align = center;
+		vAlign = middle;
+
+		cursorColor = "0 0 0 255";
+
+		borderDefault = GuiDefaultBorderProfile;
+		category = "default";
+	});
+
+	%this.SafeCreateNamedObject("GuiBrightBorderProfile", new GuiBorderProfile()
+	{
+		border = 2;
+		borderHL = 2;
+		borderSL = 2;
+		borderNA = 2;
+
+		borderColor = "255 255 255 50";
+		borderColorHL = "255 255 255 50";
+		borderColorSL = "255 255 255 50";
+		borderColorNA = "255 255 255 50";
+
+		underfill = true;
+	});
+
+	%this.SafeCreateNamedObject("GuiDarkBorderProfile", new GuiBorderProfile()
+	{
+		border = 2;
+		borderHL = 2;
+		borderSL = 2;
+		borderNA = 2;
+
+		borderColor = "0 0 0 50";
+		borderColorHL = "0 0 0 50";
+		borderColorSL = "0 0 0 50";
+		borderColorNA = "0 0 0 50";
+
+		underfill = true;
+	});
+
+	%this.SafeCreateNamedObject("GuiPanelProfile", new GuiControlProfile()
+	{
+		fillColor = %this.color1;
+	    fillColorHL = %this.AdjustColorValue(%this.color1, 10);
+	    fillColorSL = %this.AdjustColorValue(%this.color1, 15);
+	    fillColorNA = %this.SetColorAlpha(%this.color1, 100);
+		borderDefault = GuiBrightBorderProfile;
+		category = "defaultPanel";
+	});
+
+	%listBorderProfile = new GuiBorderProfile()
+	{
+		margin = 1;
+		marginHL = 1;
+		marginSL = 1;
+		marginNA = 1;
+
+		padding = 4;
+		paddingHL = 4;
+		paddingSL = 4;
+		paddingNA = 4;
+	};
+
+	%this.SafeCreateNamedObject("GuiListBoxProfile", new GuiControlProfile()
+	{
+	    // fill color
+	    fillColor = %this.color1;
+	    fillColorHL = %this.AdjustColorValue(%this.color1, 10);
+	    fillColorSL = %this.color4;
+	    fillColorNA = %this.SetColorAlpha(%this.color1, 100);
+		align = left;
+
+		tab = false;
+		canKeyFocus = true;
+		category = "defaultListBox";
+
+		fontColor = %this.color3;
+		fontColorHL = %this.AdjustColorValue(%this.color3, 20);
+		fontColorSL = %this.AdjustColorValue(%this.color3, 20);
+		fontColorNA = %this.AdjustColorValue(%this.color3, -30);
+
+		borderDefault = %listBorderProfile;
+	});
+
+	%windowBorderProfile = new GuiBorderProfile()
+	{
+		padding = 10;
+		paddingHL = 10;
+		paddingSL = 10;
+		paddingNA = 4;
+	};
+
+	%this.SafeCreateNamedObject("GuiWindowProfile", new GuiControlProfile()
+	{
+	   fillColor = %this.AdjustColorValue(%this.color1, 10);
+	   fillColorHL = %this.AdjustColorValue(%this.color1, 12);
+	   fillColorSL = %this.color4;
+	   fillColorNA = %this.color1;
+	   category = "defaultWindow";
+	   align = "Left";
+
+	   fontColorSL = %this.color5;
+
+	   borderLeft = %windowBorderProfile;
+	});
+
+	%windowContentProfile = new GuiBorderProfile()
+	{
+		borderColor = %this.AdjustColorValue(%this.color1, 10);
+		borderColorSL = %this.AdjustColorValue(%this.color4, -10);
+
+		border = 3;
+		borderSL = 3;
+	};
+
+	%this.SafeCreateNamedObject("GuiWindowContentProfile", new GuiControlProfile()
+	{
+		fillColor = %this.AdjustColorValue(%this.color1, -10);
+		fillColorSL = %this.AdjustColorValue(%this.color1, -10);
+
+		borderDefault = %windowContentProfile;
+		borderTop = GuiDefaultBorderProfile;
+	});
+
+	%windowButtonBorderProfile = new GuiBorderProfile()
+	{
+		margin = 1;
+		marginHL = 1;
+		marginSL = 1;
+		marginNA = 1;
+
+		padding = 3;
+		paddingHL = 3;
+		paddingSL = 3;
+		paddingNA = 3;
+	};
+
+	%this.SafeCreateNamedObject("GuiWindowCloseButtonProfile", new GuiControlProfile()
+	{
+		fillColor = %this.SetColorAlpha(%this.color1, 150);
+		fillColorHL = %this.SetColorAlpha(%this.color6, 150);
+		fillColorSL = %this.AdjustColorValue(%this.color6, 10);
+		fillColorNA = %this.color1;
+
+		fontColor = %this.SetColorAlpha(%this.color3, 150);
+		fontColorHL = %this.SetColorAlpha(%this.color3, 170);
+		fontColorSL = %this.color5;
+		fontColorNA = %this.SetColorAlpha(%this.color3, 150);
+
+		borderDefault = %windowButtonBorderProfile;
+	});
+
+	%this.SafeCreateNamedObject("GuiWindowMinButtonProfile", new GuiControlProfile()
+	{
+		fillColor = %this.SetColorAlpha(%this.color1, 150);
+		fillColorHL = %this.SetColorAlpha(%this.color4, 150);
+		fillColorSL = %this.AdjustColorValue(%this.color4, 10);
+		fillColorNA = %this.color1;
+
+		fontColor = %this.SetColorAlpha(%this.color3, 150);
+		fontColorHL = %this.SetColorAlpha(%this.color3, 170);
+		fontColorSL = %this.color5;
+		fontColorNA = %this.SetColorAlpha(%this.color3, 150);
+
+		borderDefault = %windowButtonBorderProfile;
+	});
+
+	%this.SafeCreateNamedObject("GuiWindowMaxButtonProfile", new GuiControlProfile()
+	{
+		fillColor = %this.SetColorAlpha(%this.color1, 150);
+		fillColorHL = %this.SetColorAlpha(%this.color4, 150);
+		fillColorSL = %this.AdjustColorValue(%this.color4, 10);
+		fillColorNA = %this.color1;
+
+		fontColor = %this.SetColorAlpha(%this.color3, 150);
+		fontColorHL = %this.SetColorAlpha(%this.color3, 170);
+		fontColorSL = %this.color5;
+		fontColorNA = %this.SetColorAlpha(%this.color3, 150);
+
+		borderDefault = %windowButtonBorderProfile;
+	});
+
+	%this.SafeCreateNamedObject("GuiTabProfile", new GuiControlProfile()
+	{
+		fontColor = "255 255 255 255";
+	    fontColorHL = "232 240 248 255";
+	    fontColorSL= "255 255 255 255";
+	    fontColorNA = "0 0 0 255";
+		fillColor = %this.color1;
+		fillColorHL = %this.AdjustColorValue(%this.color1, 10);
+		fillColorSL = %this.AdjustColorValue(%this.color1, 15);
+		fillColorNA = %this.SetColorAlpha(%this.color1, 100);
+		borderDefault = GuiBrightBorderProfile;
+		align = Center;
+		category = "defaultTab";
+	});
+
+	%this.SafeCreateNamedObject("GuiTabPageProfile", new GuiControlProfile()
+	{
+		fillColor = %this.color1;
+		fillColorHL = %this.AdjustColorValue(%this.color1, 10);
+		fillColorSL = %this.AdjustColorValue(%this.color1, 15);
+		fillColorNA = %this.SetColorAlpha(%this.color1, 100);
+		category = "defaultTabPage";
+	});
+
+	%this.SafeCreateNamedObject("GuiToolTipProfile", new GuiControlProfile()
+	{
+		// fill color
+	    fillColor = %this.SetColorAlpha(%this.color1, 220);
+	    fillColorHL = %this.AdjustColorValue(%this.color1, 10);
+	    fillColorSL = %this.AdjustColorValue(%this.color1, 15);
+	    fillColorNA = %this.SetColorAlpha(%this.color1, 100);
+
+		fontColor = %this.color5;
+
+		borderDefault = GuiBrightBorderProfile;
+	});
+
+	%this.SafeCreateNamedObject("GuiScrollTrackProfile", new GuiControlProfile()
+	{
+		fillColor = %this.color1;
+	    fillColorHL = %this.color1;
+	    fillColorSL = %this.color1;
+	    fillColorNA = %this.color1;
+	});
+
+	%this.SafeCreateNamedObject("GuiScrollThumbProfile", new GuiControlProfile()
+	{
+		fillColor = %this.color3;
+	    fillColorHL = %this.AdjustColorValue(%this.color3, 10);
+	    fillColorSL = %this.color4;
+	    fillColorNA = %this.SetColorAlpha(%this.color3, 100);
+
+		borderDefault = GuiBrightBorderProfile;
+		borderRight = GuiDarkBorderProfile;
+		borderBottom = GuiDarkBorderProfile;
+	});
+
+	%this.SafeCreateNamedObject("GuiScrollArrowProfile", new GuiControlProfile()
+	{
+		fontColor = "0 0 0 100";
+	    fontColorHL = "0 0 0 150";
+	    fontColorSL = %this.color5;
+	    fontColorNA = "0 0 0 50";
+
+		borderDefault = GuiBrightBorderProfile;
+		borderRight = GuiDarkBorderProfile;
+		borderBottom = GuiDarkBorderProfile;
+	});
+
+	%this.SafeCreateNamedObject("GuiScrollProfile", new GuiControlProfile()
+	{
+	    fillColor = %this.color2;
+	    borderDefault = GuiDefaultBorderProfile;
+	});
+
+	%this.SafeCreateNamedObject("GuiProgressProfile", new GuiControlProfile()
+	{
+	   fillColor = %this.color1;
+	   fillColorHL = %this.color4;
+	   fillColorSL = %this.AdjustColorValue(%this.color4, 10);
+
+	   fontColorHL = %this.color3;
+	   fontColorSL = %this.color5;
+
+	   borderDefault = GuiBrightBorderProfile;
+	   borderBottom = GuiDarkBorderProfile;
+	   borderRight = GuiDarkBorderProfile;
+	});
+
+	%this.SafeCreateNamedObject("GuiDropDownProfile", new GuiControlProfile()
+	{
+	    // fill color
+	    fillColor = %this.AdjustColorValue(%this.color3, -15);
+		fillColorHL = %this.AdjustColorValue(%this.color3, -8);
+		fillColorSL = %this.color4;
+		fillColorNA = %this.SetColorAlpha(%this.color3, 100);
+
+	    fontColor = %this.color1;
+		fontColorHL = %this.color1;
+		fontColorSL = %this.color3;
+		fontColorNA = %this.SetColorAlpha(%this.color1, 100);
+		align = "left";
+
+		tab = true;
+		canKeyFocus = true;
+
+		borderDefault = GuiBrightBorderProfile;
+		borderRight = GuiDarkBorderProfile;
+		borderBottom = GuiDarkBorderProfile;
+		category = "dropDown";
+	});
+
+	%this.SafeCreateNamedObject("GuiMenuBarProfile", new GuiControlProfile()
+	{
+		fillColor = %this.AdjustColorValue(%this.color1, -7);
+		canKeyFocus = true;
+		category = "defaultMenuBar";
+	});
+
+	%this.SafeCreateNamedObject("GuiMenuProfile", new GuiControlProfile()
+	{
+		fillColor = "0 0 0 0";
+		fillColorHL = "255 255 255 10";
+		fillColorSL = %this.AdjustColorValue(%this.color4, -15);
+		fillColorNA = "0 0 0 0";
+
+		borderDefault = GuiDarkBorderProfile;
+		category = "defaultMenuBar";
+
+		fontColor = %this.color3;
+		fontColorHL = %this.AdjustColorValue(%this.color3, 10);
+		fontColorSL = %this.color3;
+		fontColorNA = %this.SetColorAlpha(%this.color3, 100);
+	});
+
+	%this.SafeCreateNamedObject("GuiMenuContentProfile", new GuiControlProfile()
+	{
+		fillColor = %this.AdjustColorValue(%this.color1, -5);
+
+		borderDefault = GuiDefaultBorderProfile;
+	});
+
+	%this.SafeCreateNamedObject("GuiMenuItemProfile", new GuiControlProfile()
+	{
+		fillColor = %this.AdjustColorValue(%this.color1, -5);
+		fillColorHL = %this.AdjustColorValue(%this.color4, -15);
+		fillColorNA = %this.color1;
+		align = left;
+
+		fontColor = %this.color3;
+		fontColorHL = %this.AdjustColorValue(%this.color3, 10);
+		fontColorNA = %this.SetColorAlpha(%this.color3, 150);
+
+		borderDefault = GuiDefaultBorderProfile;
+	});
+
+	%this.SafeCreateNamedObject("GuiTextEditProfile", new GuiControlProfile()
+	{
+		fillColor = %this.color4;
+		fillColorHL = %this.AdjustColorValue(%this.color4, 10);
+		fillColorSL = %this.color4;
+		fillColorNA = %this.AdjustColorValue(%this.color4, 80);
+		fillColorTextSL = %this.color5;
+
+		fontColor = %this.SetColorAlpha(%this.color1, 220);
+		fontColorHL = %this.AdjustColorValue(%this.color1, 10);
+		fontColorSL = %this.color1;
+		fontColorNA = %this.SetColorAlpha(%this.color1, 100);
+		fontColorTextSL = %this.color1;
+		align = left;
+		vAlign = middle;
+		cursorColor = %this.color2;
+
+		tab = true;
+		canKeyFocus = true;
+		returnTab = true;
+	});
+
+	%this.SafeCreateNamedObject("GuiButtonProfile", new GuiControlProfile()
+	{
+		fillColor = %this.color4;
+		fillColorHL = %this.AdjustColorValue(%this.color4, 10);
+		fillColorSL = %this.color5;
+		fillColorNA = %this.SetColorAlpha(%this.color4, 80);
+
+		fontColor = %this.color1;
+		fontColorHL = %this.AdjustColorValue(%this.color1, 10);
+		fontColorSL = %this.color1;
+		fontColorNA = %this.SetColorAlpha(%this.color1, 100);
+		align = center;
+		vAlign = middle;
+
+		borderLeft = GuiBrightBorderProfile;
+		borderRight = GuiDarkBorderProfile;
+		borderTop = GuiBrightBorderProfile;
+		borderBottom = GuiDarkBorderProfile;
+
+		canKeyFocus = true;
+		tab = true;
+	});
+
+	%this.SafeCreateNamedObject("GuiCheckboxProfile", new GuiControlProfile()
+	{
+		fillColor = %this.color4;
+		fillColorHL = %this.AdjustColorValue(%this.color4, 10);
+		fillColorSL = %this.color5;
+		fillColorNA = %this.SetColorAlpha(%this.color4, 80);
+
+		fontColor = %this.color1;
+		fontColorHL = %this.AdjustColorValue(%this.color1, 10);
+		fontColorSL = %this.color1;
+		fontColorNA = %this.SetColorAlpha(%this.color1, 100);
+		align = center;
+		vAlign = middle;
+
+		borderLeft = GuiBrightBorderProfile;
+		borderRight = GuiDarkBorderProfile;
+		borderTop = GuiBrightBorderProfile;
+		borderBottom = GuiDarkBorderProfile;
+
+		canKeyFocus = true;
+		tab = true;
+	});
+}

BIN
editor/EditorCore/gui/images/treeView.png


BIN
editor/EditorCore/images/editorIcons16.png


BIN
editor/EditorCore/images/headerGlow.png


BIN
editor/EditorCore/images/newProject.png


+ 4 - 0
editor/EditorCore/images/projectTileShadow.asset.taml

@@ -0,0 +1,4 @@
+<ImageAsset
+    AssetName="projectTileShadow"
+    ImageFile="projectTileShadow.png"
+	AssetInternal="1" />

BIN
editor/EditorCore/images/projectTileShadow.png


BIN
editor/EditorCore/images/t2d_logo.png


BIN
editor/EditorCore/images/t2d_logo_med.png


BIN
editor/EditorCore/images/t2d_rocket_splash.png


BIN
editor/EditorCore/images/torque_logo.png


+ 15 - 0
editor/EditorCore/scripts/EditorCoreSplash.cs

@@ -0,0 +1,15 @@
+
+function EditorCoreSplash::show(%this)
+{
+	%this.setVisible(true);
+	%this.fadeTo("255 255 255 255", 1000, "easeInOut");
+	%this.moveTo("0 0", 1000, "easeInOut");
+	%this.schedule(2000, "hide");
+}
+
+function EditorCoreSplash::hide(%this)
+{
+	%this.fadeTo("255 255 255 0", 1000, "easeInOut");
+	%this.moveTo("0 -20", 1000, "easeInOut");
+	%this.schedule(1000, "setVisible", false);
+}

+ 124 - 0
editor/EditorCore/scripts/EditorProjectCard.cs

@@ -0,0 +1,124 @@
+function EditorProjectCard::onAdd(%this)
+{
+	%this.header = new GuiSpriteCtrl()
+	{
+		HorizSizing = width;
+		VertSizing = height;
+		Position = "0 0";
+		Extent = "200 20";
+		SingleFrameBitmap = "1";
+		ConstrainProportions = "0";
+		FullSize = "1";
+		ImageColor = "255 255 255 255";
+		PositionOffset = "0 0";
+		UseInput = false;
+	};
+	ThemeManager.setProfile(%this.header, "spriteProfile");
+	ThemeManager.setImage(%this.header, "fixedHeader200x20");
+	%this.add(%this.header);
+
+	%this.projectIcon = new GuiSpriteCtrl()
+	{
+		Bitmap = %this.bitmap;
+		Extent = "200 160";
+		Position = "0 20";
+		SingleFrameBitmap = "1";
+		constrainProportions = "1";
+		FullSize = "1";
+		ImagePosition = "0 0";
+		UseInput = false;
+	};
+	ThemeManager.setProfile(%this.projectIcon, "spriteProfile");
+	%this.add(%this.projectIcon);
+
+	%this.projectIconShadow = new GuiSpriteCtrl()
+	{
+		Image = "EditorCore:projectTileShadow";
+		Extent = "200 160";
+		Position = "0 20";
+		SingleFrameBitmap = "1";
+		constrainProportions = "1";
+		FullSize = "1";
+		ImagePosition = "0 0";
+		UseInput = false;
+	};
+	ThemeManager.setProfile(%this.projectIconShadow, "spriteProfile");
+	%this.add(%this.projectIconShadow);
+
+	%this.scroller = new GuiScrollCtrl()
+	{
+		class = EditorProjectCardScroller;
+		Position="0 180";
+		Extent="200 120";
+		hScrollBar="alwaysOff";
+		vScrollBar="alwaysOn";
+		constantThumbHeight="0";
+		showArrowButtons="0";
+		scrollBarThickness="6";
+	};
+	ThemeManager.setProfile(%this.scroller, "emptyProfile");
+	ThemeManager.setProfile(%this.scroller, "tinyThumbProfile", "ThumbProfile");
+	ThemeManager.setProfile(%this.scroller, "tinyTrackProfile", "TrackProfile");
+	%this.add(%this.scroller);
+	%this.startListening(%this.scroller);
+
+	%this.chain = new GuiChainCtrl()
+	{
+		Position="0 0";
+		Extent = "194 120";
+		IsVertical = "1";
+		ChildSpacing = -4;
+	};
+	ThemeManager.setProfile(%this.chain, "emptyProfile");
+	%this.scroller.add(%this.chain);
+
+	%this.titleText = new GuiControl()
+	{
+		Position = "0 13";
+		Extent = "200 38";
+		Text = %this.title;
+		TextWrap = 1;
+		TextExtend = 1;
+	};
+	ThemeManager.setProfile(%this.titleText, "titleProfile");
+	%this.chain.add(%this.titleText);
+
+	%this.directoryText = new GuiControl()
+	{
+		Position = "0 77";
+		Extent = "200 128";
+		Text = "\\" @ %this.directory @ "\\";
+		TextWrap = 1;
+		TextExtend = 1;
+	};
+	ThemeManager.setProfile(%this.directoryText, "codeProfile");
+	%this.chain.add(%this.directoryText);
+
+	if(%this.isNew)
+	{
+		%this.directoryText.text = %this.directory;
+	}
+
+	%this.descriptionText = new GuiControl()
+	{
+		Position = "0 43";
+		Extent = "200 70";
+		Text = %this.description;
+		TextWrap = 1;
+		TextExtend = 1;
+	};
+	ThemeManager.setProfile(%this.descriptionText, "normalTextProfile");
+	%this.chain.add(%this.descriptionText);
+}
+
+function EditorProjectCard::onClick(%this)
+{
+	if(!%this.isNew)
+	{
+		%this.postEvent("ProjectSelected", %this.directory);
+	}
+	else
+	{
+		%this.postEvent("NewProject");
+	}
+}

+ 221 - 0
editor/EditorCore/scripts/EditorProjectSelector.cs

@@ -0,0 +1,221 @@
+
+function EditorProjectSelector::onAdd(%this)
+{
+	%this.header = new GuiControl()
+	{
+		HorizSizing="width";
+		VertSizing="bottom";
+		Position="0 0";
+		Extent="1024 84";
+		Visible = false;
+	};
+	ThemeManager.setProfile(%this.header, "panelProfile");
+	%this.add(%this.header);
+
+	%this.headerGlow = new GuiSpriteCtrl()
+	{
+		HorizSizing="width";
+		VertSizing="bottom";
+		Position="0 0";
+		Extent="1024 84";
+		Bitmap = "^EditorCore/images/headerGlow.png";
+		SingleFrameBitmap = "1";
+		ConstrainProportions = "1";
+		FullSize = "0";
+		ImageSize = "532 84";
+		ImageColor = "255 255 255 255";
+		PositionOffset = "0 0";
+		Visible = false;
+	};
+	ThemeManager.setProfile(%this.headerGlow, "spriteProfile");
+	%this.add(%this.headerGlow);
+
+	%this.torque2d = new GuiSpriteCtrl()
+	{
+		HorizSizing="right";
+		VertSizing="bottom";
+		Position="0 0";
+		Extent="512 84";
+		Bitmap = "^EditorCore/images/t2d_logo_med.png";
+		SingleFrameBitmap = "1";
+		ConstrainProportions = "1";
+		FullSize = "0";
+		ImageSize = "438 65";
+		ImageColor = "255 255 255 255";
+		PositionOffset = "-20 0";
+		Visible = false;
+	};
+	ThemeManager.setProfile(%this.torque2d, "spriteProfile");
+	%this.add(%this.torque2d);
+
+	%this.versionText = new GuiControl()
+	{
+		HorizSizing="left";
+		VertSizing="bottom";
+		Position = "824 62";
+		Extent = "200 20";
+		Text = getEngineVersion();
+		Visible = false;
+		FontSizeAdjust = 1.2;
+		Align = "right";
+		OverrideFontColor = true;
+		FontColor = ThemeManager.activeTheme.color5;
+	};
+	ThemeManager.setProfile(%this.versionText, "codeProfile");
+	%this.add(%this.versionText);
+
+	%this.scroller = new GuiScrollCtrl()
+	{
+		HorizSizing="width";
+		VertSizing="height";
+		Position="0 84";
+		Extent="1024 684";
+		hScrollBar="alwaysOff";
+		vScrollBar="dynamic";
+		constantThumbHeight="0";
+		showArrowButtons="1";
+		scrollBarThickness="14";
+	};
+	ThemeManager.setProfile(%this.scroller, "emptyProfile");
+	ThemeManager.setProfile(%this.scroller, "scrollingPanelThumbProfile", ThumbProfile);
+	ThemeManager.setProfile(%this.scroller, "scrollingPanelTrackProfile", TrackProfile);
+	ThemeManager.setProfile(%this.scroller, "scrollingPanelArrowProfile", ArrowProfile);
+	%this.add(%this.scroller);
+
+	%this.grid = new GuiGridCtrl()
+	{
+		HorizSizing="width";
+		VertSizing="height";
+		Position="20 20";
+		Extent = "984 684";
+		CellSizeX = 210;
+		CellSizeY = 310;
+		CellModeX = "fixed";
+		CellSpacingX = 20;
+		CellSpacingY = 20;
+		OrderMode = "LRTB";
+	};
+	ThemeManager.setProfile(%this.grid, "emptyProfile");
+	%this.scroller.add(%this.grid);
+
+	%this.scroller.computeSizes();
+
+	%this.torqueCurtain = new GuiSpriteCtrl()
+	{
+		HorizSizing = width;
+		VertSizing = height;
+		Position = "0 0";
+		Extent = "1024 768";
+		SingleFrameBitmap = "1";
+		ConstrainProportions = "0";
+		FullSize = "1";
+		ImageColor = "255 255 255 255";
+		PositionOffset = "0 0";
+		Visible = false;
+		UseInput = false;
+	};
+	ThemeManager.setProfile(%this.torqueCurtain, "spriteProfile");
+	ThemeManager.setImage(%this.torqueCurtain, "editorBG");
+	%this.add(%this.torqueCurtain);
+}
+
+function EditorProjectSelector::show(%this)
+{
+	%this.torqueCurtain.setVisible(true);
+	%this.header.setVisible(true);
+	%this.versionText.setVisible(true);
+	%this.headerGlow.setVisible(true);
+	%this.torque2d.setVisible(true);
+
+	%folderList = getDirectoryList(getMainDotCsDir());
+	for(%i = 0; %i < getFieldCount(%folderList); %i++)
+	{
+		%folder = getField(%folderList, %i);
+		if(%folder !$= "library" && %folder !$= "editor" && %folder !$= "engine" && getSubStr(%folder, 0, 1) !$= ".")
+		{
+			%this.scanFolder(%folder);
+		}
+	}
+
+	%this.showProject("New Project", pathConcat(getMainDotCsDir(), "editor/EditorCore/images/newProject.png"), "Blast off!", "Time to launch something new?", true);
+
+	%this.torqueCurtain.fadeTo("255 255 255 0", 500, "easeInOut");
+}
+
+function EditorProjectSelector::hide(%this)
+{
+	%this.torqueCurtain.fadeTo("255 255 255 255", 500, "easeOut");
+	%this.schedule(500, "postEvent", "ProjectSelected");
+}
+
+function EditorProjectSelector::scanFolder(%this, %folder)
+{
+	//echo("scanning folder " @ %folder);
+	ModuleDatabase.ScanModules(%folder);
+	%appCore = ModuleDatabase.findModule("AppCore", 1);
+	if(isObject(%appCore))
+	{
+		%this.showProject(%appCore.project, pathConcat(%appCore.getModulePath(), %appCore.icon), %folder, %appCore.projectDescription, false);
+	}
+
+	//Awesome, now unscan everything we just scanned.
+	ModuleDatabase.clearDatabase();
+}
+
+function EditorProjectSelector::showProject(%this, %title, %bitmap, %directory, %description, %isNew)
+{
+	%container = new GuiButtonCtrl()
+	{
+		Class = EditorProjectCard;
+		Extent = "210 310";
+		title = %title;
+		bitmap = %bitmap;
+		directory = %directory;
+		description = %description;
+		isNew = %isNew;
+	};
+	ThemeManager.setProfile(%container, "displayBoxProfile");
+	%this.grid.add(%container);
+
+	%container.addListener(%this);
+}
+
+function EditorProjectSelector::onProjectSelected(%this, %folder)
+{
+	ModuleDatabase.ScanModules(%folder);
+	%this.hide();
+}
+
+function EditorProjectSelector::onNewProject(%this)
+{
+	%width = 700;
+	%height = 340;
+	%dialog = new GuiControl()
+	{
+		class = "NewProjectDialog";
+		superclass = "EditorDialog";
+		dialogSize = (%width + 8) SPC (%height + 8);
+		dialogCanClose = true;
+		dialogText = "New Project";
+	};
+	%dialog.init(%width, %height);
+	%this.startListening(%dialog);
+
+	Canvas.pushDialog(%dialog);
+}
+
+function EditorProjectSelector::onDialogClosed(%this, %dialog)
+{
+	%this.dialog = %dialog;
+	%this.schedule(100, "deleteDialog");
+}
+
+function EditorProjectSelector::deleteDialog(%this)
+{
+	%this.dialog.delete();
+}
+
+function EditorProjectSelector::onProjectCreated(%this, %folder)
+{
+	%this.scanFolder(%folder);
+}

+ 168 - 0
editor/EditorCore/scripts/NewProjectDialog.cs

@@ -0,0 +1,168 @@
+
+function NewProjectDialog::init(%this, %width, %height)
+{
+	//Get the dialog contents
+	%window = %this.getObject(0);
+	%content = %window.getObject(0);
+
+	//Create the file text box
+	%form = new GuiGridCtrl()
+	{
+		class = "EditorForm";
+		extent = %width SPC %height;
+		cellSizeX = %width;
+		cellSizeY = 50;
+	};
+	%form.addListener(%this);
+
+	%item = %form.addFormItem("Title", %width SPC 30);
+	%this.titleBox = %form.createTextEditItem(%item);
+	%this.titleBox.Command = %this.getId() @ ".Validate();";
+
+	%item = %form.addFormItem("Directory", %width SPC 30);
+	%this.dirBox = %form.createTextEditItem(%item);
+	%this.dirBox.Command = %this.getId() @ ".Validate();";
+
+	%item = %form.addFormItem("Description", %width SPC 130);
+	%this.descBox = %form.createTextEditItem(%item);
+	%this.descBox.Command = %this.getId() @ ".Validate();";
+
+	%content.add(%form);
+
+	%this.feedback = new GuiControl()
+	{
+		HorizSizing = "right";
+		VertSizing = "bottom";
+		Position = "12 170";
+		Extent = (%width - 24) SPC 80;
+		text = "";
+		textWrap = true;
+		textExtend = true;
+	};
+	ThemeManager.setProfile(%this.feedback, "infoProfile");
+
+	%this.cancelButton = new GuiButtonCtrl()
+	{
+		HorizSizing = "right";
+		VertSizing = "bottom";
+		Position = "478 270";
+		Extent = "100 30";
+		Text = "Cancel";
+		Command = %this.getID() @ ".onClose();";
+	};
+	ThemeManager.setProfile(%this.cancelButton, "buttonProfile");
+
+	%this.createButton = new GuiButtonCtrl()
+	{
+		HorizSizing = "right";
+		VertSizing = "bottom";
+		Position = "588 268";
+		Extent = "100 34";
+		Text = "Create";
+		Command = %this.getID() @ ".onCreate();";
+	};
+	ThemeManager.setProfile(%this.createButton, "primaryButtonProfile");
+
+	%content.add(%this.feedback);
+	%content.add(%this.cancelButton);
+	%content.add(%this.createButton);
+
+	%this.validate();
+}
+
+function NewProjectDialog::Validate(%this)
+{
+	%this.createButton.active = false;
+
+	%title = %this.titleBox.getText();
+	%directory = %this.dirBox.getText();
+	%description = %this.descBox.getText();
+
+	if(%title $= "")
+	{
+		%this.feedback.setText("Please enter a title for your project.");
+		return false;
+	}
+
+	if(%directory $= "")
+	{
+		%this.feedback.setText("Please select a name for the directory that your project will launch from.");
+		return false;
+	}
+	else
+	{
+		%path = makeFullPath(%directory, getMainDotCsDir());
+		if(isDirectory(%path))
+		{
+			%fileList = getFileList(%path);
+			%dirList = getDirectoryList(%path);
+			if(getWordCount(%fileList) > 0 || getWordCount(%dirList) > 0)
+			{
+				%this.feedback.setText("The directory should be an empty directory or a non-existing directory in the main T2d directory.");
+				return false;
+			}
+		}
+	}
+
+	if(%description $= "")
+	{
+		%this.feedback.setText("Please add a short, meaningful description for your project.");
+		return false;
+	}
+
+	%this.createButton.active = true;
+	%this.feedback.setText("Press the Create button to create your new project!");
+	return true;
+}
+
+function NewProjectDialog::onClose(%this)
+{
+	Canvas.popDialog(%this);
+	%this.postEvent("DialogClosed", %this);
+}
+
+function NewProjectDialog::onCreate(%this)
+{
+	if(%this.validate())
+	{
+		%title = %this.titleBox.getText();
+		%directory = %this.dirBox.getText();
+		%description = %this.descBox.getText();
+
+		%path = makeFullPath(%directory, getMainDotCsDir());
+		%lastChar = getSubStr(%path, strlen(%path) - 1, 1);
+		if(%lastChar !$= "\\" && %lastChar !$= "\/")
+		{
+			%path = %path @ "\\";
+		}
+		createPath(%path);
+
+		ModuleDatabase.scanModules(pathConcat(getMainDotCsDir(), "library"));
+		ModuleDatabase.CopyModule("AppCore", 1, "AppCore", %path, true);
+		ModuleDatabase.CopyModule("Audio", 1, "Audio", %path, true);
+		ModuleDatabase.CopyModule("BlankGame", 1, "BlankGame", pathConcat(%path, "BlankGame"), false);
+		ModuleDatabase.clearDatabase();
+
+		%file = TamlRead(pathConcat(%path, "AppCore", "1", "module.taml"));
+		%file.Project = %title;
+		%file.ProjectDescription = %description;
+		TamlWrite(%file, pathConcat(%path, "AppCore", "1", "module.taml"));
+
+		%file = TamlRead(pathConcat(%path, "BlankGame", "module.taml"));
+		%file.Group = "launch";
+		%file.Type = "Game Module";
+		%file.Author = "";
+		TamlWrite(%file, pathConcat(%path, "BlankGame", "module.taml"));
+
+		%data = new ScriptObject()
+		{
+			title = %title;
+			directory = %directory;
+			description = %description;
+			icon = pathConcat(%path, "AppCore", %file.Icon);
+		};
+
+		%this.postEvent("ProjectCreated", %directory);
+		%this.onClose();
+	}
+}

+ 42 - 53
library/AppCore/1/scripts/canvas.cs → editor/EditorCore/scripts/canvas.cs

@@ -24,74 +24,63 @@
 // initializeCanvas
 // Constructs and initializes the default canvas window.
 //------------------------------------------------------------------------------
-$canvasCreated = false;
-function initializeCanvas(%windowName)
+function EditorCore::initializeCanvas(%this, %windowName)
 {
     // Don't duplicate the canvas.
-    if($canvasCreated)
+    if(!isObject(Canvas))
     {
-        error("Cannot instantiate more than one canvas!");
-        return;
-    }
-
-    videoSetGammaCorrection($pref::OpenGL::gammaCorrection);
-
-    if ( !createCanvas(%windowName) )
-    {
-        error("Canvas creation failed. Shutting down.");
-        quit();
-    }
+	    videoSetGammaCorrection($pref::OpenGL::gammaCorrection);
 
-    $pref::iOS::ScreenDepth = 32;
+	    if ( !createCanvas(%windowName) )
+	    {
+	        error("Canvas creation failed. Shutting down.");
+	        quit();
+	    }
 
-    if ($platform $= "iOS")
-    {
-        %resolution = $pref::iOS::Width SPC $pref::iOS::Height SPC 32;
-    }
-    else if ($platform $= "Android")
-    {
-    	%resolution = GetAndroidResolution();
-    }
-    else
-    {
-        if ( $pref::Video::windowedRes !$= "" )
-            %resolution = $pref::Video::windowedRes;
-        else
-            %resolution = $pref::Video::defaultResolution;
-    }
+	    if ($platform $= "iOS")
+	    {
+	        %resolution = $pref::iOS::Width SPC $pref::iOS::Height SPC $pref::iOS::ScreenDepth;
+	    }
+	    else if ($platform $= "Android")
+	    {
+	    	%resolution = GetAndroidResolution();
+	    }
+	    else
+	    {
+	        if ( $pref::Video::windowedRes !$= "" )
+	            %resolution = $pref::Video::windowedRes;
+	        else
+	            %resolution = $pref::Video::defaultResolution;
+	    }
 
-    if ($platform $= "windows" || $platform $= "macos")
-    {
-        setScreenMode( %resolution._0, %resolution._1, %resolution._2, $pref::Video::fullScreen );
-    }
-    else
-    {
-        setScreenMode( %resolution._0, %resolution._1, %resolution._2, false );
-    }
-
-    $canvasCreated = true;
-}
-
-//------------------------------------------------------------------------------
-// resetCanvas
-// Forces the canvas to redraw itself.
-//------------------------------------------------------------------------------
-function resetCanvas()
-{
-    if (isObject(Canvas))
-        Canvas.repaint();
+	    if ($platform $= "windows" || $platform $= "macos")
+	    {
+	        setScreenMode( %resolution._0, %resolution._1, %resolution._2, $pref::Video::fullScreen );
+	    }
+	    else
+	    {
+	        setScreenMode( %resolution._0, %resolution._1, %resolution._2, false );
+	    }
+	}
+	else
+	{
+		setCanvasTitle(%windowName);
+		Canvas.repaint();
+	}
+    Canvas.UseBackgroundColor = true;
+    Canvas.BackgroundColor = "Black";
 }
 
 //------------------------------------------------------------------------------
 // iOSResolutionFromSetting
 // Helper function that grabs resolution strings based on device type
 //------------------------------------------------------------------------------
-function iOSResolutionFromSetting( %deviceType, %deviceScreenOrientation )
+function EditorCore::iOSResolutionFromSetting( %this, %deviceType, %deviceScreenOrientation )
 {
     // A helper function to get a string based resolution from the settings given.
     %x = 0;
     %y = 0;
-    
+
     %scaleFactor = $pref::iOS::RetinaEnabled ? 2 : 1;
 
     switch(%deviceType)
@@ -132,6 +121,6 @@ function iOSResolutionFromSetting( %deviceType, %deviceScreenOrientation )
                 %y =  $iOS::constant::iPhone5Width;
             }
     }
-   
+
     return %x @ " " @ %y;
 }

+ 0 - 0
library/AppCore/1/scripts/constants.cs → editor/EditorCore/scripts/constants.cs


+ 59 - 0
editor/EditorCore/scripts/defaultPreferences.cs

@@ -0,0 +1,59 @@
+//-----------------------------------------------------------------------------
+// Copyright (c) 2013 GarageGames, LLC
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to
+// deal in the Software without restriction, including without limitation the
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+// sell copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+// IN THE SOFTWARE.
+//-----------------------------------------------------------------------------
+
+/// Game
+$Game::CompanyName              = "Torque Game Engines";
+$Game::ProductName              = "Torque2D";
+
+/// iOS
+$pref::iOS::ScreenOrientation   = $iOS::constant::Landscape;
+$pref::iOS::ScreenDepth		    = 32;
+$pref::iOS::UseGameKit          = 0;
+$pref::iOS::UseMusic            = 0;
+$pref::iOS::UseMoviePlayer      = 0;
+$pref::iOS::UseAutoRotate       = 1;
+$pref::iOS::EnableOrientationRotation = 1;
+$pref::iOS::EnableOtherOrientationRotation = 1;
+$pref::iOS::StatusBarType       = 0;
+
+/// T2D
+$pref::T2D::ParticlePlayerEmissionRateScale = 1.0;
+$pref::T2D::ParticlePlayerSizeScale = 1.0;
+$pref::T2D::ParticlePlayerForceScale = 1.0;
+$pref::T2D::ParticlePlayerTimeScale = 1.0;
+$pref::T2D::warnFileDeprecated = 1;
+$pref::T2D::warnSceneOccupancy = 1;
+$pref::T2D::imageAssetGlobalFilterMode = Bilinear;
+$pref::T2D::TAMLSchema="";
+$pref::T2D::JSONStrict = 1;
+
+/// Video
+$pref::Video::appliedPref = 0;
+$pref::Video::displayDevice = "OpenGL";
+$pref::Video::preferOpenGL = 1;
+$pref::Video::fullScreen = 0;
+$pref::Video::defaultResolution = "1024 768";
+$pref::Video::windowedRes = "1024 768 32";
+$pref::OpenGL::gammaCorrection = 0.5;
+
+/// Fonts.
+$Gui::fontCacheDirectory = expandPath( "^EditorCore/gui/fonts" );

+ 116 - 20
editor/ProjectManager/ProjectManager.cs

@@ -22,44 +22,140 @@
 
 function ProjectManager::create(%this)
 {
+	exec("./scripts/ProjectModulePanel.cs");
+	exec("./scripts/ProjectGamePanel.cs");
+	exec("./scripts/ProjectLibraryPanel.cs");
+	exec("./scripts/ProjectModuleCard.cs");
+	exec("./scripts/ProjectModuleDependList.cs");
+	exec("./scripts/ProjectModuleAssetList.cs");
+	exec("./scripts/NewDependencyDialog.cs");
+	exec("./scripts/DeclaredAssetForm.cs");
+	exec("./scripts/NewDeclaredAssetDialog.cs");
+	exec("./scripts/NewModuleDialog.cs");
+	exec("./scripts/EditModuleDialog.cs");
+
 	%this.guiPage = EditorCore.RegisterEditor("Project Manager", %this);
 
-	%this.comingSoon = new GuiWindowCtrl()
+	%this.scroller = new GuiScrollCtrl()
+	{
+		HorizSizing="width";
+		VertSizing="height";
+		Position="0 0";
+		Extent="1024 768";
+		hScrollBar="dynamic";
+		vScrollBar="dynamic";
+		constantThumbHeight="0";
+		showArrowButtons="1";
+		scrollBarThickness="14";
+	};
+	ThemeManager.setProfile(%this.scroller, "emptyProfile");
+	ThemeManager.setProfile(%this.scroller, "thumbProfile", "ThumbProfile");
+	ThemeManager.setProfile(%this.scroller, "trackProfile", "TrackProfile");
+	ThemeManager.setProfile(%this.scroller, "scrollArrowProfile", "ArrowProfile");
+	%this.guiPage.add(%this.scroller);
+
+	%this.container = new GuiControl()
 	{
-		class = "comingSoonTest";
-		HorizSizing="center";
-		VertSizing="center";
-		Position="412 324";
-		Extent="200 120";
-		Visible="1";
-		Text = "Coming Soon!";
-		canClose = true;
-		canMove = true;
-		Profile = "GuiWindowProfile";
-		CloseButtonProfile = "GuiWindowCloseButtonProfile";
+		HorizSizing="width";
+		VertSizing="height";
+		Position="0 0";
+		Extent="1024 768";
+		MinExtent="1024 500";
 	};
-	//ThemeManager.setProfile(%this.comingSoon, "simpleProfile");
-	%this.guiPage.add(%this.comingSoon);
+	ThemeManager.setProfile(%this.container, "emptyProfile");
+	%this.scroller.add(%this.container);
+
+	%this.libraryPanel = new GuiControl()
+	{
+		Class = "ProjectLibraryPanel";
+		superclass = "ProjectModulePanel";
+		HorizSizing="relative";
+		VertSizing="height";
+		Position="0 0";
+		Extent="512 768";
+	};
+	ThemeManager.setProfile(%this.libraryPanel, "emptyProfile");
+	%this.container.add(%this.libraryPanel);
+	%this.libraryPanel.load();
+	%this.startListening(%this.libraryPanel);
+
+	%this.gamePanel = new GuiControl()
+	{
+		Class = "ProjectGamePanel";
+		superclass = "ProjectModulePanel";
+		HorizSizing="relative";
+		VertSizing="height";
+		Position="512 0";
+		Extent="512 768";
+	};
+	ThemeManager.setProfile(%this.gamePanel, "emptyProfile");
+	%this.container.add(%this.gamePanel);
+	%this.startListening(%this.gamePanel);
 
 	EditorCore.FinishRegistration(%this.guiPage);
 }
 
-function comingSoonTest::onClose(%this)
+function ProjectManager::destroy(%this)
 {
-	echo("comingSoonTest::onClose fired successfully!");
+	%this.postEvent("ShutDown");
 }
 
-function ProjectManager::destroy(%this)
+function ProjectManager::open(%this)
 {
-
+	%allModules = ModuleDatabase.findModules(false);
+	%this.gamePanel.onOpen(%allModules);
+	%this.libraryPanel.onOpen(%allModules);
 }
 
-function ProjectManager::open(%this)
+function ProjectManager::close(%this)
 {
+	%this.libraryPanel.onClose();
+	%this.gamePanel.onClose();
+}
 
+function ProjectManager::setProjectFolder(%this, %folder)
+{
+	%this.projectFolder = %folder;
 }
 
-function ProjectManager::close(%this)
+function ProjectManager::getProjectFolder(%this)
 {
+	if(%this.projectFolder $= "")
+	{
+		%appCore = ModuleDatabase.findModule("AppCore", 1);
+		%appCorePath = %appCore.getModulePath();
+		%mainCsPath = getMainDotCsDir();
+		%mainLen = strLen(%mainCsPath);
+		%lastChar = getSubStr(%mainCsPath, %mainLen-1, 1);
+		if(%lastChar $= "\\" || %lastChar $= "\/")
+		{
+			%relativePath = getSubStr(%appCorePath, strlen(%mainCsPath), strlen(%appCorePath) - %mainLen);
+		}
+		else
+		{
+			%relativePath = getSubStr(%appCorePath, strlen(%mainCsPath) + 1, strlen(%appCorePath) - (%mainLen + 1));
+		}
+		%unwantedPortion1 = strchr(%relativePath, "\\");
+		%unwantedPortion2 = strchr(%relativePath, "\/");
+		if(%unwantedPortion1 !$= "")
+		{
+			%this.projectFolder = getSubStr(%relativePath, 0, strlen(%relativePath) - strlen(%unwantedPortion1));
+		}
+		else if(%unwantedPortion2 !$= "")
+		{
+			%this.projectFolder = getSubStr(%relativePath, 0, strlen(%relativePath) - strlen(%unwantedPortion2));
+		}
+		else
+		{
+			%this.projectFolder = %relativePath;
+		}
+	}
+	return pathConcat(getMainDotCsDir(), %this.projectFolder);
+}
 
+function ProjectManager::onModuleInstalled(%this, %module)
+{
+	%allModules = ModuleDatabase.findModules(false);
+	%this.gamePanel.onOpen(%allModules);
+	%this.libraryPanel.onOpen(%allModules);
 }

+ 29 - 0
editor/ProjectManager/scripts/DeclaredAssetForm.cs

@@ -0,0 +1,29 @@
+
+function DeclaredAssetForm::getFolderPath(%this, %title, %textEdit)
+{
+	%modulePath = pathConcat(getMainDotCsDir(), ProjectManager.getProjectFolder(), %this.module.moduleID);
+	if(isDirectory(pathConcat(%modulePath, %this.module.versionID)))
+	{
+		%modulePath = pathConcat(%modulePath, %this.module.versionID);
+	}
+	%dialog = new OpenFolderDialog()
+	{
+		Filters = "All Files|*.*";
+		ChangePath = false;
+		DefaultFile = "";
+		defaultPath = %modulePath;
+		title = %title;
+	};
+	%result = %dialog.execute();
+
+	if ( %result )
+	{
+		%selectedFile = makeRelativePath(%dialog.fileName, %modulePath);
+		%textEdit.setText(%selectedFile);
+		%textEdit.setCursorPos(999999);//move it to the far right.
+	}
+	// Cleanup
+	%dialog.delete();
+
+	%this.postEvent("FolderOpened", %textEdit);
+}

+ 149 - 0
editor/ProjectManager/scripts/EditModuleDialog.cs

@@ -0,0 +1,149 @@
+
+function EditModuleDialog::init(%this, %width, %height)
+{
+	//Get the dialog contents
+	%window = %this.getObject(0);
+	%content = %window.getObject(0);
+
+	%form = new GuiGridCtrl()
+	{
+		class = "EditorForm";
+		extent = %width SPC %height;
+		cellSizeX = %width;
+		cellSizeY = 50;
+	};
+	%form.addListener(%this);
+
+	%item = %form.addFormItem("Module Name", %width SPC 30);
+	%this.moduleNameBox = %form.createTextEditItem(%item);
+	%this.moduleNameBox.text = %this.module.moduleID;
+
+	%item = %form.addFormItem("Description", %width SPC 30);
+	%this.descriptionBox = %form.createTextEditItem(%item);
+	%this.descriptionBox.text = %this.module.description;
+
+	%item = %form.addFormItem("Version", %width SPC 30);
+	%this.versionBox = %form.createTextEditItem(%item);
+	%this.versionBox.inputMode = "number";
+	%this.versionBox.text = %this.module.versionID;
+
+	%item = %form.addFormItem("Build", %width SPC 30);
+	%this.buildBox = %form.createTextEditItem(%item);
+	%this.buildBox.inputMode = "number";
+	%this.buildBox.text = %this.module.buildID;
+
+	%item = %form.addFormItem("Type", %width SPC 30);
+	%this.typeBox = %form.createTextEditItem(%item);
+	%this.typeBox.text = %this.module.type;
+
+	%item = %form.addFormItem("Author", %width SPC 30);
+	%this.authorBox = %form.createTextEditItem(%item);
+	%this.authorBox.text = %this.module.author;
+
+	%content.add(%form);
+
+	%this.feedback = new GuiControl()
+	{
+		HorizSizing = "right";
+		VertSizing = "bottom";
+		Position = "12 320";
+		Extent = (%width - 24) SPC 80;
+		text = "Saving changes to a module will require the module to be unloaded and will likely require the game to be restarted. Also, changing the name or version of a module may break dependencies. You will need to find and fix these.";
+		textWrap = true;
+		textExtend = true;
+	};
+	ThemeManager.setProfile(%this.feedback, "infoProfile");
+
+	%this.cancelButton = new GuiButtonCtrl()
+	{
+		HorizSizing = "right";
+		VertSizing = "bottom";
+		Position = "278 450";
+		Extent = "100 30";
+		Text = "Cancel";
+		Command = %this.getID() @ ".onClose();";
+	};
+	ThemeManager.setProfile(%this.cancelButton, "buttonProfile");
+
+	%this.saveButton = new GuiButtonCtrl()
+	{
+		HorizSizing = "right";
+		VertSizing = "bottom";
+		Position = "388 448";
+		Extent = "100 34";
+		Text = "Save";
+		Command = %this.getID() @ ".onSave();";
+	};
+	ThemeManager.setProfile(%this.saveButton, "primaryButtonProfile");
+
+	%content.add(%this.feedback);
+	%content.add(%this.cancelButton);
+	%content.add(%this.saveButton);
+
+	%this.validate();
+}
+
+function EditModuleDialog::onKeyPressed(%this, %textBox)
+{
+	%this.validate();
+}
+
+function EditModuleDialog::onReturnPressed(%this, %textBox)
+{
+	%this.onSave();
+}
+
+function EditModuleDialog::Validate(%this)
+{
+	%this.createButton.active = false;
+
+	%name = %this.moduleNameBox.getText();
+	%desc = %this.descriptionBox.getText();
+	%version = %this.versionBox.getText();
+	%build = %this.buildBox.getText();
+	%type = %this.typeBox.getText();
+	%author = %this.authorBox.getText();
+
+	if(%name $= "" || %version $= "" || %build $= "")
+	{
+		return false;
+	}
+
+	%this.moduleNameBox.text = stripChars(%name, " ");
+
+	%this.saveButton.active = true;
+	return true;
+}
+
+function EditModuleDialog::onClose(%this)
+{
+	Canvas.popDialog(%this);
+	%this.postEvent("DialogClosed", %this);
+}
+
+function EditModuleDialog::onSave(%this)
+{
+	if(%this.validate())
+	{
+		%name = %this.moduleNameBox.getText();
+		%desc = %this.descriptionBox.getText();
+		%version = %this.versionBox.getText();
+		%build = %this.buildBox.getText();
+		%type = %this.typeBox.getText();
+		%author = %this.authorBox.getText();
+
+		%data = new ScriptObject()
+		{
+			moduleID = %name;
+			description = %desc;
+			versionID = %version;
+			buildID = %build;
+			type = %type;
+			author = %author;
+		};
+
+		%this.postEvent("ModuleEdited", %data);
+		%data.delete();
+		%this.onClose();
+	}
+}

+ 117 - 0
editor/ProjectManager/scripts/NewDeclaredAssetDialog.cs

@@ -0,0 +1,117 @@
+
+function NewDeclaredAssetDialog::init(%this, %width, %height)
+{
+	//Get the dialog contents
+	%window = %this.getObject(0);
+	%content = %window.getObject(0);
+
+	//Create the file text box
+	%form = new GuiGridCtrl()
+	{
+		class = "DeclaredAssetForm";
+		superclass = "EditorForm";
+		extent = %width SPC %height;
+		cellSizeX = %width;
+		cellSizeY = 50;
+		module = %this.module;
+	};
+	%form.addListener(%this);
+
+	%item = %form.addFormItem("Asset Directory", %width SPC 30);
+	%this.folderBox = %form.createFolderOpenItem(%item, "Select Folder to Scan");
+	%this.folderBox.Command = %this.getId() @ ".Validate();";
+
+	%item = %form.addFormItem("Extension", %width SPC 30);
+	%this.extensionBox = %form.createTextEditItem(%item);
+	%this.extensionBox.text = "asset.taml";
+
+	%item = %form.addFormItem("Scan Sub Directories", %width SPC 30);
+	%this.recursiveCheckBox = %form.createCheckboxItem(%item);
+
+	%content.add(%form);
+
+	%this.cancelButton = new GuiButtonCtrl()
+	{
+		HorizSizing = "right";
+		VertSizing = "bottom";
+		Position = "278 170";
+		Extent = "100 30";
+		Text = "Cancel";
+		Command = %this.getID() @ ".onClose();";
+	};
+	ThemeManager.setProfile(%this.cancelButton, "buttonProfile");
+
+	%this.createButton = new GuiButtonCtrl()
+	{
+		HorizSizing = "right";
+		VertSizing = "bottom";
+		Position = "388 168";
+		Extent = "100 34";
+		Text = "Add";
+		Command = %this.getID() @ ".onCreate();";
+	};
+	ThemeManager.setProfile(%this.createButton, "primaryButtonProfile");
+
+	%content.add(%this.cancelButton);
+	%content.add(%this.createButton);
+
+	%this.validate();
+}
+
+function NewDeclaredAssetDialog::onFolderOpened(%this, %textBox)
+{
+	%this.Validate();
+}
+
+function NewDeclaredAssetDialog::onKeyPressed(%this, %textBox)
+{
+	%this.validate();
+}
+
+function NewDeclaredAssetDialog::onReturnPressed(%this, %textBox)
+{
+	%this.onCreate();
+}
+
+function NewDeclaredAssetDialog::Validate(%this)
+{
+	%this.createButton.active = false;
+
+	%folder = %this.folderBox.getText();
+	%ext = %this.extensionBox.getText();
+	%isRecursive = %this.recursiveCheckBox.getStateOn();
+
+	if(%ext $= "")
+	{
+		return false;
+	}
+
+	%this.createButton.active = true;
+	return true;
+}
+
+function NewDeclaredAssetDialog::onClose(%this)
+{
+	Canvas.popDialog(%this);
+	%this.postEvent("DialogClosed", %this);
+}
+
+function NewDeclaredAssetDialog::onCreate(%this)
+{
+	if(%this.validate())
+	{
+		%folder = %this.folderBox.getText();
+		%ext = %this.extensionBox.getText();
+		%isRecursive = %this.recursiveCheckBox.getStateOn();
+
+		%asset = new DeclaredAssets()
+		{
+			path = %folder;
+			extension = %ext;
+			recurse = %isRecursive;
+		};
+
+		%this.postEvent("DeclaredAssetAdded", %asset);
+		%this.onClose();
+	}
+}

+ 155 - 0
editor/ProjectManager/scripts/NewDependencyDialog.cs

@@ -0,0 +1,155 @@
+
+function NewDependencyDialog::init(%this, %width, %height)
+{
+	//Get the dialog contents
+	%window = %this.getObject(0);
+	%content = %window.getObject(0);
+
+	//Create the file text box
+	%form = new GuiGridCtrl()
+	{
+		class = "EditorForm";
+		extent = %width SPC %height;
+		cellSizeX = %width;
+		cellSizeY = 50;
+	};
+	%form.addListener(%this);
+
+	%item = %form.addFormItem("Dependency", %width SPC 30);
+	%this.moduleDropDown = %form.createDropDownItem(%item);
+
+	%item = %form.addFormItem("Version", %width SPC 30);
+	%this.versionDropDown = %form.createDropDownItem(%item);
+
+	%this.populateModuleDropDown();
+	%this.populateVersionDropDown();
+
+	%content.add(%form);
+
+	%this.cancelButton = new GuiButtonCtrl()
+	{
+		HorizSizing = "right";
+		VertSizing = "bottom";
+		Position = "278 120";
+		Extent = "100 30";
+		Text = "Cancel";
+		Command = %this.getID() @ ".onClose();";
+	};
+	ThemeManager.setProfile(%this.cancelButton, "buttonProfile");
+
+	%this.createButton = new GuiButtonCtrl()
+	{
+		HorizSizing = "right";
+		VertSizing = "bottom";
+		Position = "388 118";
+		Extent = "100 34";
+		Text = "Add";
+		Command = %this.getID() @ ".onCreate();";
+	};
+	ThemeManager.setProfile(%this.createButton, "primaryButtonProfile");
+
+	%content.add(%this.cancelButton);
+	%content.add(%this.createButton);
+
+	%this.validate();
+}
+
+function NewDependencyDialog::populateModuleDropDown(%this)
+{
+	%this.moduleDropDown.clearItems();
+
+	for(%i = 0; %i < getWordCount(%this.dependList); %i++)
+	{
+		%mod = getWord(%this.dependList, %i);
+		if(%mod.ModuleID !$= "AppCore")
+		{
+			if(%this.versionList[%mod.ModuleID] $= "")
+			{
+				%this.moduleDropDown.addItem(%mod.ModuleID);
+				%this.versionList[%mod.ModuleID] = %mod.VersionID;
+			}
+			else
+			{
+				%this.versionList[%mod.ModuleID] = %this.versionList[%mod.ModuleID] SPC %mod.VersionID;
+			}
+		}
+	}
+	%this.moduleDropDown.sortByText();
+	%this.moduleDropDown.insertItem(0, "");
+	%this.moduleDropDown.setSelected(0);
+}
+
+function NewDependencyDialog::onDropDownClosed(%this, %dropDown)
+{
+	%this.validate();
+}
+
+function NewDependencyDialog::onDropDownSelect(%this, %dropDown)
+{
+	if(%dropDown == %this.moduleDropDown)
+	{
+		%this.populateVersionDropDown();
+	}
+}
+
+function NewDependencyDialog::populateVersionDropDown(%this)
+{
+	%this.versionDropDown.clearItems();
+
+	if(%this.moduleDropDown.getText() !$= "")
+	{
+		%versionList = %this.versionList[%this.moduleDropDown.getText()];
+		for(%i = 0; %i < getWordCount(%versionList); %i++)
+		{
+			%version = getWord(%versionList, %i);
+			%this.versionDropDown.addItem(%version);
+		}
+		%this.versionDropDown.sortByText();
+		%this.versionDropDown.insertItem(0, "Latest");
+		%this.versionDropDown.setSelected(0);
+	}
+}
+
+function NewDependencyDialog::Validate(%this)
+{
+	%this.createButton.active = false;
+
+	%module = %this.moduleDropDown.getText();
+
+	if(%module $= "")
+	{
+		return false;
+	}
+
+	%this.createButton.active = true;
+	return true;
+}
+
+function NewDependencyDialog::onClose(%this)
+{
+	Canvas.popDialog(%this);
+	%this.postEvent("DialogClosed", %this);
+}
+
+function NewDependencyDialog::onCreate(%this)
+{
+	if(%this.validate())
+	{
+		%module = %this.moduleDropDown.getText();
+		%version = %this.versionDropDown.getText();
+		if(%version $= "Latest")
+		{
+			%version = "0";
+		}
+
+		%data = new ScriptObject()
+		{
+			module = %module;
+			version = %version;
+		};
+
+		%this.postEvent("DependencyAdded", %data);
+		%data.delete();
+		%this.onClose();
+	}
+}

+ 136 - 0
editor/ProjectManager/scripts/NewModuleDialog.cs

@@ -0,0 +1,136 @@
+
+function NewModuleDialog::init(%this, %width, %height)
+{
+	//Get the dialog contents
+	%window = %this.getObject(0);
+	%content = %window.getObject(0);
+
+	//Create the file text box
+	%form = new GuiGridCtrl()
+	{
+		class = "EditorForm";
+		extent = %width SPC %height;
+		cellSizeX = %width;
+		cellSizeY = 50;
+	};
+	%form.addListener(%this);
+
+	%item = %form.addFormItem("Module Name", %width SPC 30);
+	%this.moduleNameBox = %form.createTextEditItem(%item);
+
+	%item = %form.addFormItem("Template", %width SPC 30);
+	%this.templateDropDown = %form.createDropDownItem(%item);
+	%this.populateModuleDropDown();
+
+	%content.add(%form);
+
+	%this.cancelButton = new GuiButtonCtrl()
+	{
+		HorizSizing = "right";
+		VertSizing = "bottom";
+		Position = "278 120";
+		Extent = "100 30";
+		Text = "Cancel";
+		Command = %this.getID() @ ".onClose();";
+	};
+	ThemeManager.setProfile(%this.cancelButton, "buttonProfile");
+
+	%this.createButton = new GuiButtonCtrl()
+	{
+		HorizSizing = "right";
+		VertSizing = "bottom";
+		Position = "388 118";
+		Extent = "100 34";
+		Text = "Create";
+		Command = %this.getID() @ ".onCreate();";
+	};
+	ThemeManager.setProfile(%this.createButton, "primaryButtonProfile");
+
+	%content.add(%this.cancelButton);
+	%content.add(%this.createButton);
+
+	%this.validate();
+}
+
+function NewModuleDialog::populateModuleDropDown(%this)
+{
+	%manager = new ModuleManager();
+	%manager.EchoInfo = false;
+
+	%manager.ScanModules(pathConcat(getMainDotCsDir(), "library"));
+
+	%allModules = %manager.findModules(false);
+
+	for(%i = 0; %i < getWordCount(%allModules); %i++)
+	{
+		%mod = getWord(%allModules, %i);
+		if(%mod.type $= "template")
+		{
+			%this.templateDropDown.addItem(%mod.ModuleID);
+		}
+	}
+	%this.templateDropDown.sortByText();
+	%this.templateDropDown.insertItem(0, "none");
+	%this.templateDropDown.setSelected(0);
+}
+
+function NewModuleDialog::onDropDownClosed(%this, %dropDown)
+{
+	%this.validate();
+}
+
+function NewModuleDialog::onKeyPressed(%this, %textBox)
+{
+	%this.validate();
+}
+
+function NewModuleDialog::onReturnPressed(%this, %textBox)
+{
+	%this.onCreate();
+}
+
+function NewModuleDialog::Validate(%this)
+{
+	%this.createButton.active = false;
+
+	%module = %this.templateDropDown.getText();
+	%name = %this.moduleNameBox.getText();
+	%path = pathConcat(getMainDotCsDir(), ProjectManager.getProjectFolder(), %name);
+
+	if(%name $= "" || isDirectory(%path))
+	{
+		return false;
+	}
+
+	%this.moduleNameBox.text = stripChars(%name, " ");
+
+	%this.createButton.active = true;
+	return true;
+}
+
+function NewModuleDialog::onClose(%this)
+{
+	Canvas.popDialog(%this);
+	%this.postEvent("DialogClosed", %this);
+}
+
+function NewModuleDialog::onCreate(%this)
+{
+	if(%this.validate())
+	{
+		%module = %this.templateDropDown.getText();
+		%name = %this.moduleNameBox.getText();
+		%path = pathConcat(getMainDotCsDir(), ProjectManager.getProjectFolder(), %name);
+
+		%data = new ScriptObject()
+		{
+			template = %module;
+			moduleName = %name;
+			path = %path;
+		};
+
+		%this.postEvent("ModuleCreated", %data);
+		%data.delete();
+		%this.onClose();
+	}
+}

+ 219 - 0
editor/ProjectManager/scripts/ProjectGamePanel.cs

@@ -0,0 +1,219 @@
+
+function ProjectGamePanel::onAdd(%this)
+{
+	%this.init("Project");
+
+	%this.buttonBar.addButton("createNewModule", 11, "Create Module", "");
+	%this.buttonBar.addButton("editModule", 49, "Edit Module", "editModuleAvailable");
+}
+
+function ProjectGamePanel::onOpen(%this, %allModules)
+{
+	%appCore = ModuleDatabase.findModule("AppCore", 1);
+	if(isObject(%appCore))
+	{
+		%this.setTitle(%appCore.project);
+	}
+
+	%loadedModules = ModuleDatabase.findModules(true);
+
+	%this.clearModules();
+	for(%i = 0; %i < getWordCount(%allModules); %i++)
+	{
+		%mod = getWord(%allModules, %i);
+		%this.addModule(%mod, %loadedModules);
+	}
+	%this.list.sortByText();
+
+	if(%this.card.visible)
+	{
+		%this.refreshCard();
+	}
+	else
+	{
+		%this.buttonBar.refreshEnabled();
+	}
+}
+
+function ProjectGamePanel::addModule(%this, %module, %loadedModules)
+{
+	%color = %this.gray;
+	if(%module.Deprecated)
+	{
+		%color = %this.darkRed;
+	}
+	for(%i = 0; %i < getWordCount(%loadedModules); %i++)
+	{
+		%loadedModule = getWord(%loadedModules, %i);
+		if(%loadedModule == %module)
+		{
+			%color = %this.yellow;
+			if(%module.Deprecated)
+			{
+				%color = %this.darkRed;
+			}
+		}
+	}
+
+	%this.list.addItemWithID(%this.getModuleName(%module), %module);
+	%index = %this.list.findItemID(%module);
+	%this.list.setItemColor(%index, %color);
+}
+
+function ProjectGamePanel::refreshCard(%this)
+{
+	%module = ModuleDatabase.findModule(%this.card.moduleID, %this.card.versionID);
+	%indexList = %this.list.findItemText(%this.getModuleName(%module));
+	%index = getWord(%indexList, 0);
+	if(%index != -1)
+	{
+		%this.list.setCurSel(%index);
+	}
+	%this.card.show(%module);
+}
+
+function ProjectGamePanel::createNewModule(%this)
+{
+	%width = 500;
+	%height = 190;
+	%dialog = new GuiControl()
+	{
+		class = "NewModuleDialog";
+		superclass = "EditorDialog";
+		dialogSize = (%width + 8) SPC (%height + 8);
+		dialogCanClose = true;
+		dialogText = "Create Module";
+	};
+	%dialog.init(%width, %height);
+	%this.startListening(%dialog);
+
+	Canvas.pushDialog(%dialog);
+}
+
+function ProjectGamePanel::onDialogClosed(%this, %dialog)
+{
+	%this.dialog = %dialog;
+	%this.schedule(100, "deleteDialog");
+}
+
+function ProjectGamePanel::deleteDialog(%this)
+{
+	%this.dialog.delete();
+}
+
+function ProjectGamePanel::onModuleCreated(%this, %data)
+{
+	if(%data.template !$= "none")
+	{
+		%templatePath = pathConcat(getMainDotCsDir(), "library", %data.template);
+		if(isDirectory(%templatePath))
+		{
+			pathCopy(%templatePath, %data.path);
+			%obj = TamlRead(pathConcat(%data.path, "module.taml"));
+			%obj.ModuleID = %data.moduleName;
+			%obj.Type = "";
+			TamlWrite(%obj, pathConcat(%data.path, "module.taml"));
+		}
+	}
+	else
+	{
+		%obj = new ModuleDefinition()
+		{
+			ModuleID = %data.moduleName;
+			VersionID = "1";
+			BuildID = "1";
+			Synchronized = false;
+			Description = "";
+			Author = "";
+		};
+		createPath(%data.path);
+		TamlWrite(%obj, pathConcat(%data.path, "module.taml"));
+	}
+	ModuleDatabase.scanModules(%data.path);
+	%this.onOpen(ModuleDatabase.findModules(false));
+}
+
+function ProjectGamePanel::editModule(%this)
+{
+	%width = 500;
+	%height = 520;
+	%dialog = new GuiControl()
+	{
+		class = "EditModuleDialog";
+		superclass = "EditorDialog";
+		dialogSize = (%width + 8) SPC (%height + 8);
+		dialogCanClose = true;
+		dialogText = "Edit Module";
+		module = %this.card.activeModule;
+	};
+	%dialog.init(%width, %height);
+	%this.startListening(%dialog);
+
+	Canvas.pushDialog(%dialog);
+}
+
+function ProjectGamePanel::editModuleAvailable(%this)
+{
+	if(isObject(%this.card.activeModule) && !%this.card.activeModule.Synchronized)
+	{
+		return true;
+	}
+	return false;
+}
+
+function ProjectGamePanel::onModuleEdited(%this, %data)
+{
+	if(%this.moduleHasChanged(%data))
+	{
+		%module = %this.card.activeModule;
+		%moduleID = %this.card.activeModule.moduleID;
+		%projectPath = ProjectManager.getProjectFolder();
+		%modulePath = pathConcat(%projectPath, %module.moduleID);
+		if(ModuleDatabase.isModuleLoaded(%module.moduleID))
+		{
+			if(%module.group !$= "")
+			{
+				ModuleDatabase.unloadGroup(%module.group);
+			}
+			else
+			{
+				ModuleDatabase.unloadExplicit(%module.moduleID);
+			}
+		}
+		ModuleDatabase.unregisterModule(%module.moduleID, %module.versionID);
+		%newModulePath = pathConcat(%projectPath, %data.moduleID);
+		if(%moduleID !$= %data.moduleID && !isDirectory(%newModulePath))
+		{
+			if(pathCopy(%modulePath, %newModulePath))
+			{
+				directoryDelete(%modulePath);
+				%modulePath = %newModulePath;
+			}
+		}
+		echo("Editing Module at " @ %modulePath);
+		%file = TamlRead(pathConcat(%modulePath, "module.taml"));
+		%file.moduleID = %data.moduleID;
+		%file.versionID = %data.versionID;
+		%file.buildID = %data.buildID;
+		%file.description = %data.description;
+		%file.type = %data.type;
+		%file.author = %data.author;
+		TamlWrite(%file, pathConcat(%modulePath, "module.taml"));
+		ModuleDatabase.scanModules(%modulePath, true);
+		%this.card.moduleID = %data.moduleID;
+		%this.card.versionID = %data.versionID;
+		%allModules = ModuleDatabase.findModules(false);
+		%this.onOpen(%allModules);
+	}
+}
+
+function ProjectGamePanel::moduleHasChanged(%this, %data)
+{
+	%module = %this.card.activeModule;
+	return %module.moduleID !$= %data.moduleID ||
+		%module.versionID !$= %data.versionID ||
+		%module.buildID !$= %data.buildID ||
+		%module.description !$= %data.description ||
+		%module.type !$= %data.type ||
+		%module.author !$= %data.author;
+}

+ 136 - 0
editor/ProjectManager/scripts/ProjectLibraryPanel.cs

@@ -0,0 +1,136 @@
+
+function ProjectLibraryPanel::onAdd(%this)
+{
+	%this.init("Library");
+}
+
+function ProjectLibraryPanel::load(%this)
+{
+	%this.manager = new ModuleManager();
+	%this.manager.addListener(AssetDatabase);
+	%this.manager.EchoInfo = false;
+
+	%this.manager.ScanModules(pathConcat(getMainDotCsDir(), "library"));
+
+	%allModules = %this.manager.findModules(false);
+
+	for(%i = 0; %i < getWordCount(%allModules); %i++)
+	{
+		%mod = getWord(%allModules, %i);
+		%this.addModule(%mod);
+	}
+	%this.list.sortByText();
+}
+
+function ProjectLibraryPanel::addModule(%this, %module)
+{
+	if(%module.type !$= "Template")
+	{
+		%this.list.addItemWithID(%this.getModuleName(%module), %module);
+	}
+}
+
+function ProjectLibraryPanel::onOpen(%this, %allModules)
+{
+	%count = %this.list.getItemCount();
+	for(%i = 0; %i < %count; %i++)
+	{
+		%module = %this.list.getItemID(%i);
+		%this.refreshColor(%module, %i, %allModules);
+	}
+
+	if(%this.card.visible)
+	{
+		%this.refreshCard();
+	}
+}
+
+function ProjectLibraryPanel::refreshColor(%this, %module, %index, %projectModules)
+{
+	%color = %this.gray;
+	if(%module.Deprecated)
+	{
+		%color = %this.darkRed;
+	}
+	for(%i = 0; %i < getWordCount(%projectModules); %i++)
+	{
+		%projectModule = getWord(%projectModules, %i);
+		if(%projectModule.ModuleId $= %module.ModuleId && %projectModule.VersionId $= %module.VersionId)
+		{
+			%color = %this.yellow;
+			if(%module.Deprecated)
+			{
+				%color = %this.darkRed;
+			}
+			else if(%module.BuildID > %projectModule.BuildID)
+			{
+				%color = %this.purple;
+			}
+		}
+	}
+
+	%this.list.setItemColor(%index, %color);
+}
+
+function ProjectLibraryPanel::onInstallClick(%this)
+{
+	%index = %this.list.getSelectedItem();
+	%module = %this.list.getItemID(%index);
+
+	if(isObject(%module))
+	{
+		%this.manager.CopyModule(%module.moduleID, %module.versionID, %module.moduleID, ProjectManager.getProjectFolder(), true);
+		%this.manager.synchronizeDependencies(%module, ProjectManager.getProjectFolder());
+
+		ModuleDatabase.ScanModules(ProjectManager.getProjectFolder());
+		%installedModule = ModuleDatabase.findModule(%module.moduleID, %module.versionID);
+		%this.postEvent("ModuleInstalled", %installedModule);
+	}
+	else
+	{
+		warn("Project Manager - Could not install module.");
+	}
+}
+
+function ProjectLibraryPanel::onUpdateClick(%this)
+{
+	%index = %this.list.getSelectedItem();
+	%module = %this.list.getItemID(%index);
+	%installedModule = ModuleDatabase.findModule(%module.moduleID, %module.versionID);
+
+	if(isObject(%module) && isObject(%installedModule))
+	{
+		%path = %installedModule.getModulePath();
+		%wasLoaded = false;
+		if(ModuleDatabase.isModuleLoaded(%installedModule.moduleID))
+		{
+			%wasLoaded = true;
+			ModuleDatabase.UnloadExplicit(%installedModule.moduleID);
+		}
+		ModuleDatabase.unregisterModule(%installedModule.moduleID, %installedModule.versionID);
+
+		directoryDelete(%path);
+		%this.manager.CopyModule(%module.moduleID, %module.versionID, %module.moduleID, ProjectManager.getProjectFolder(), true);
+		%this.manager.synchronizeDependencies(%module, ProjectManager.getProjectFolder());
+
+		ModuleDatabase.ScanModules(ProjectManager.getProjectFolder());
+		%installedModule = ModuleDatabase.findModule(%module.moduleID, %module.versionID);
+
+		if(%wasLoaded)
+		{
+			ModuleDatabase.LoadExplicit(%installedModule.moduleID, %installedModule.versionID);
+		}
+
+		%this.postEvent("ModuleInstalled", %installedModule);
+	}
+	else
+	{
+		warn("Project Manager - Could not update module.");
+	}
+}
+
+function ProjectLibraryPanel::refreshCard(%this)
+{
+	%module = %this.manager.findModule(%this.card.moduleID, %this.card.versionID);
+	%this.card.show(%module);
+}

+ 164 - 0
editor/ProjectManager/scripts/ProjectModuleAssetList.cs

@@ -0,0 +1,164 @@
+
+function ProjectModuleAssetList::onAdd(%this)
+{
+	%this.startListening(ThemeManager);
+}
+
+function ProjectModuleAssetList::onThemeChange(%this, %theme)
+{
+	if(isObject(%this.activeModule))
+	{
+		%this.show(%this.activeModule);
+	}
+}
+
+function ProjectModuleAssetList::show(%this, %module)
+{
+	%this.activeModule = %module;
+	%this.clearItems();
+	%isSynced = %module.Synchronized;
+
+	for(%i = 0; %i < %module.getCount(); %i++)
+	{
+		%asset = %module.getObject(%i);
+		%this.addAssetItem(%asset, %isSynced);
+	}
+
+	if(!%module.Synchronized)
+	{
+		%this.addAddButton();
+	}
+}
+
+function ProjectModuleAssetList::hide(%this)
+{
+	%this.activeModule = 0;
+	%this.clearItems();
+}
+
+function ProjectModuleAssetList::clearItems(%this)
+{
+	for(%i = %this.getCount() - 1; %i >= 0; %i--)
+	{
+		%item = %this.getObject(%i);
+		%item.delete();
+	}
+}
+
+function ProjectModuleAssetList::getDeclaredAssetText(%this, %asset)
+{
+	if(%asset.recurse)
+	{
+		return pathConcat(%asset.path, "*", "*." @ %asset.extension);
+	}
+	return pathConcat(%asset.path, "*." @ %asset.extension);
+}
+
+function ProjectModuleAssetList::addAssetItem(%this, %asset, %isSynced)
+{
+	%width = getWord(%this.extent, 0) - 6;
+	%text = new GuiControl()
+	{
+		HorizSizing="width";
+		Position = "3 0";
+		Extent = %width SPC "26";
+		Text = %this.getDeclaredAssetText(%asset);
+		Align = "Left";
+		VAlign = "Middle";
+	};
+	ThemeManager.setProfile(%text, "subListProfile");
+	%this.add(%text);
+
+	if(!%isSynced)
+	{
+		%deleteButton = new GuiButtonCtrl()
+		{
+			Class="ProjectModuleAssetButton";
+			ButtonEvent = "RemoveAsset";
+			ButtonData = %asset.getID();
+			HorizSizing="left";
+			Position = (%width - 40) SPC "0";
+			Extent = "22 22";
+			MinExtent = "22 22";
+			Text = "X";
+			Align = "Center";
+			VAlign = "Middle";
+			TextExtend = 1;
+		};
+		%deleteButton.position = (%width - (getWord(%deleteButton.extent, 0) + 10)) SPC "0";
+		ThemeManager.setProfile(%deleteButton, "subListProfile");
+		%text.add(%deleteButton);
+		%this.startListening(%deleteButton);
+	}
+}
+
+function ProjectModuleAssetList::addAddButton(%this)
+{
+	%width = 140;
+	%addButton = new GuiButtonCtrl()
+	{
+		Class="ProjectModuleAssetButton";
+		ButtonEvent = "AddAsset";
+		ButtonData = "";
+		HorizSizing="right";
+		Position = "3 0";
+		Extent = %width SPC "26";
+		MinExtent = %width SPC "26";
+		Text = "+Add Declared Asset";
+		Align = "Center";
+		VAlign = "Middle";
+		TextExtend = 1;
+	};
+	ThemeManager.setProfile(%addButton, "subListProfile");
+	%this.add(%addButton);
+	%this.startListening(%addButton);
+}
+
+function ProjectModuleAssetButton::onClick(%this)
+{
+	%this.postEvent(%this.buttonEvent, %this.buttonData);
+}
+
+function ProjectModuleAssetList::onAddAsset(%this)
+{
+	%width = 500;
+	%height = 240;
+	%dialog = new GuiControl()
+	{
+		class = "NewDeclaredAssetDialog";
+		superclass = "EditorDialog";
+		dialogSize = (%width + 8) SPC (%height + 8);
+		dialogCanClose = true;
+		dialogText = "New Declared Asset";
+		module = %this.activeModule;
+	};
+	%dialog.init(%width, %height);
+	%this.startListening(%dialog);
+
+	Canvas.pushDialog(%dialog);
+}
+
+function ProjectModuleAssetList::onDeclaredAssetAdded(%this, %asset)
+{
+	%this.activeModule.add(%asset);
+	%this.activeModule.save();
+	%this.show(%this.activeModule);
+}
+
+function ProjectModuleAssetList::onRemoveAsset(%this, %asset)
+{
+	%this.activeModule.remove(%asset);
+	%this.activeModule.save();
+	%this.schedule(50, "show", %this.activeModule);
+}
+
+function ProjectModuleAssetList::onDialogClosed(%this, %dialog)
+{
+	%this.dialog = %dialog;
+	%this.schedule(100, "deleteDialog");
+}
+
+function ProjectModuleAssetList::deleteDialog(%this)
+{
+	%this.dialog.delete();
+}

+ 382 - 0
editor/ProjectManager/scripts/ProjectModuleCard.cs

@@ -0,0 +1,382 @@
+
+ function ProjectModuleCard::onAdd(%this)
+ {
+	 %this.toggleLaunchGroupCount = 0;
+	 %this.chain = new GuiChainCtrl()
+	 {
+		 HorizSizing="width";
+ 		 VertSizing="height";
+		 Position = "0 0";
+		 Extent = "286 100";
+		 IsVertical = "1";
+		 ChildSpacing = -4;
+	 };
+ 	ThemeManager.setProfile(%this.chain, "emptyProfile");
+ 	%this.add(%this.chain);
+
+	%this.titleText = new GuiControl()
+	{
+		HorizSizing="width";
+		Position = "0 13";
+		Extent = "286 38";
+		Text = "";
+		FontSizeAdjust = "1.4";
+	};
+	ThemeManager.setProfile(%this.titleText, "titleProfile");
+	%this.chain.add(%this.titleText);
+
+	%this.authorText = new GuiControl()
+	{
+		HorizSizing="width";
+		Position = "0 0";
+		Extent = "180 22";
+		MinExtent = "180 22";
+		Text = "Module by Torque2D";
+		TextWrap = 1;
+		TextExtend = 1;
+		FontSizeAdjust = "1.1";
+		FontColor = ThemeManager.activeTheme.color5;
+		OverrideFontColor = true;
+	};
+	ThemeManager.setProfile(%this.authorText, "codeProfile");
+	%this.chain.add(%this.authorText);
+
+	%this.versionText = new GuiControl()
+	{
+		HorizSizing="width";
+		Position = "0 0";
+		Extent = "180 26";
+		Text = "Version: 1     Build: 1";
+		FontColor = ThemeManager.activeTheme.setAlpha(ThemeManager.activeTheme.color4, 150);
+		OverrideFontColor = true;
+	};
+	ThemeManager.setProfile(%this.versionText, "codeProfile");
+	%this.chain.add(%this.versionText);
+
+	%this.addSpacer(%this.chain);
+
+	%this.descriptionText = new GuiControl()
+	{
+		HorizSizing="width";
+		Position = "0 10";
+		Extent = "286 80";
+		MinExtent = "250 80";
+		Text = "";
+		TextWrap = 1;
+		TextExtend = 1;
+	};
+	ThemeManager.setProfile(%this.descriptionText, "normalTextProfile");
+	%this.chain.add(%this.descriptionText);
+
+	%this.optionGroup = %this.addSubSection("Module Options");
+
+	%this.launchGroupCheckBox = new GuiCheckBoxCtrl()
+	{
+		Class="ProjectManagerLaunchGroupCheckBox";
+		HorizSizing="width";
+		Position = "0 0";
+		Extent = "286 26";
+		Text = "Start on Project Launch";
+		BoxOffset = "0 2";
+		TextOffset = "22 0";
+		TextExtent = "264 26";
+		vAlign = "Middle";
+		Tooltip = "This change will be applied after restarting.";
+	};
+	ThemeManager.setProfile(%this.launchGroupCheckBox, "checkboxProfile");
+	ThemeManager.setProfile(%this.launchGroupCheckBox, "tipProfile", "TooltipProfile");
+	%this.optionGroup.add(%this.launchGroupCheckBox);
+	%this.launchGroupCheckBox.addListener(%this);
+
+	%this.addEmptySpace(30, %this.optionGroup);
+
+	%this.addSubSection("Dependencies");
+
+	%this.dependList = new GuiChainCtrl()
+	{
+		Class = ProjectModuleDependList;
+		HorizSizing="width";
+		VertSizing="height";
+		Position = "0 0";
+		Extent = "286 100";
+		IsVertical = "1";
+		ChildSpacing = 2;
+	};
+   ThemeManager.setProfile(%this.dependList, "emptyProfile");
+   %this.chain.add(%this.dependList);
+
+   %this.addEmptySpace(30, %this.chain);
+
+	%this.addSubSection("Declared Assets");
+
+	%this.assetList = new GuiChainCtrl()
+	{
+		Class = ProjectModuleAssetList;
+		HorizSizing="width";
+		VertSizing="height";
+		Position = "0 0";
+		Extent = "286 100";
+		IsVertical = "1";
+		ChildSpacing = 2;
+	};
+   ThemeManager.setProfile(%this.assetList, "emptyProfile");
+   %this.chain.add(%this.assetList);
+
+   %this.button = new GuiButtonCtrl()
+   {
+	   Class="ProjectModuleCardButton";
+	   HorizSizing="left";
+	   VertSizing="bottom";
+	   Position = "184 40";
+	   Extent = "100 30";
+	   MinExtent = "100 30";
+	   Text = "";
+   };
+   ThemeManager.setProfile(%this.button, "primaryButtonProfile");
+   %this.add(%this.button);
+   %this.startListening(%this.button);
+
+	%this.startListening(ThemeManager);
+ }
+
+function ProjectModuleCard::addSubSection(%this, %name)
+{
+	%chain = new GuiChainCtrl()
+	{
+		HorizSizing="width";
+		VertSizing="height";
+		Position = "0 0";
+		Extent = "286 0";
+		IsVertical = "1";
+		ChildSpacing = -4;
+	};
+	ThemeManager.setProfile(%chain, "emptyProfile");
+	%this.chain.add(%chain);
+
+	%subSection = new GuiControl()
+	{
+		HorizSizing="width";
+		Extent = "286 24";
+		Text = %name;
+		FontSizeAdjust = "0.8";
+	};
+	ThemeManager.setProfile(%subSection, "titleProfile");
+	%chain.add(%subSection);
+
+	%this.addSpacer(%chain);
+	%this.addEmptySpace(8, %chain);
+
+	return %chain;
+}
+
+function ProjectModuleCard::addSpacer(%this, %chain)
+{
+   %spacer = new GuiControl()
+   {
+	   HorizSizing="width";
+	   Position = "0 0";
+	   Extent = "286 6";
+   };
+   ThemeManager.setProfile(%spacer, "spacerProfile");
+   %chain.add(%spacer);
+
+   return %spacer;
+}
+
+function ProjectModuleCard::addEmptySpace(%this, %size, %chain)
+{
+	%empty = new GuiControl()
+	{
+		HorizSizing="width";
+		Position = "0 0";
+		Extent = "286" SPC %size;
+	};
+	ThemeManager.setProfile(%empty, "emptyProfile");
+	%chain.add(%empty);
+
+	return %empty;
+}
+
+function ProjectModuleCard::onThemeChange(%this, %theme)
+{
+	%this.authorText.FontColor = %theme.color5;
+	%this.versionText.FontColor = %theme.setAlpha(%theme.color4, 150);
+}
+
+function ProjectModuleCard::show(%this, %module)
+{
+	if(isObject(%module))
+	{
+		%this.activeModule = %module;
+		%this.moduleID = %module.moduleID;
+		%this.versionID = %module.versionID;
+
+		%this.titleText.setText(%module.moduleID);
+		%this.setAuthor(%module);
+		%this.setVersion(%module);
+		%this.descriptionText.setText(%module.description);
+
+		%this.button.visible = false;
+		%projectModule = %this.getInstalledModule(%module.moduleID, %module.versionID);
+		if(%projectModule != %module)
+		{
+			if(!isObject(%projectModule))
+			{
+				%this.button.setText("Install");
+				%this.button.visible = true;
+			}
+			else if(%projectmodule.buildID < %module.buildID)
+			{
+				%this.button.setText("Update");
+				%this.button.visible = true;
+			}
+		}
+		else
+		{
+
+		}
+
+		%this.optionGroup.visible = false;
+		if(!%module.Synchronized)
+		{
+			%this.optionGroup.visible = true;
+			%this.launchGroupCheckBox.setStateOn(%module.Group $= "launch");
+			for(%i = 0; %i < %this.toggleLaunchGroupCount; %i++)
+			{
+				if(%this.toggleLaunchGroup[%i] $= %this.activeModule.getModulePath())
+				{
+					%this.launchGroupCheckBox.setStateOn(!%this.launchGroupCheckBox.getStateOn());
+					break;
+				}
+			}
+		}
+
+		%this.visible = true;
+		%this.dependList.show(%module);
+		%this.assetList.show(%module);
+		%this.postEvent("ModuleShown", %module);
+	}
+}
+
+function ProjectModuleCard::hide(%this)
+{
+	%this.activeModule = 0;
+	%this.moduleID = "";
+	%this.versionID = 0;
+	%this.visible = false;
+}
+
+function ProjectModuleCard::setAuthor(%this, %module)
+{
+	%author = %module.author;
+	if(%author $= "")
+	{
+		%author = "Torque2D";
+	}
+
+	%type = %module.type;
+	if(%type $= "")
+	{
+		%type = "Module";
+	}
+
+	%this.authorText.setText(%type SPC "by" SPC %author);
+}
+
+function ProjectModuleCard::setVersion(%this, %module)
+{
+	%version = %module.versionID;
+	if(%version $= "")
+	{
+		%version = 1;
+	}
+
+	%build = %module.buildID;
+	if(%build $= "")
+	{
+		%build = 0;
+	}
+
+	%this.versionText.setText("Version:" SPC %version @ "     Build:" SPC %build);
+}
+
+function ProjectModuleCard::getInstalledModule(%this, %moduleID, %versionID)
+{
+	%allModules = ModuleDatabase.findModules(false);
+	%count = getWordCount(%allModules);
+	for(%i = 0; %i < %count; %i++)
+	{
+		%projectModule = getWord(%allModules, %i);
+		if(%moduleID $= %projectModule.ModuleID && %versionID == %projectModule.VersionID)
+		{
+			return %projectModule;
+		}
+	}
+	return 0;
+}
+
+function ProjectModuleCardButton::onClick(%this)
+{
+	%this.postEvent("ButtonClick");
+}
+
+function ProjectModuleCard::onButtonClick(%this)
+{
+	%this.postEvent(%this.button.getText() @ "Click");
+}
+
+function ProjectManagerLaunchGroupCheckBox::onClick(%this)
+{
+	%state = %this.getStateOn();
+	%this.postEvent("LauchGroupClick", %state);
+}
+
+function ProjectModuleCard::onLauchGroupClick(%this, %state)
+{
+	%this.startListening(ProjectManager);
+	if(isObject(%this.activeModule))
+	{
+		if((%state && %this.activeModule.group $= "launch") || (!%state && %this.activeModule.group !$= "launch"))
+		{
+			%path = %this.activeModule.getModulePath();
+			for(%i = 0; %i < %this.toggleLaunchGroupCount; %i++)
+			{
+				if(%this.toggleLaunchGroup[%i] $= %path)
+				{
+					%this.toggleLaunchGroup[%i] = "";
+				}
+			}
+		}
+		else
+		{
+			%this.toggleLaunchGroup[%this.toggleLaunchGroupCount] = %this.activeModule.getModulePath();
+			%this.toggleLaunchGroupCount++;
+		}
+	}
+}
+
+function ProjectModuleCard::onShutDown(%this)
+{
+	for(%i = 0; %i < %this.toggleLaunchGroupCount; %i++)
+	{
+		%path = pathConcat(%this.toggleLaunchGroup[%i], "module.taml");
+		if(%path !$= "" && isFile(%path))
+		{
+			%this.toggleLaunchGroupForPath(%path);
+		}
+	}
+}
+
+function ProjectModuleCard::toggleLaunchGroupForPath(%this, %path)
+{
+	%module = TamlRead(%path);
+	if(%module.group $= "launch")
+	{
+		%module.group = "";
+	}
+	else
+	{
+		%module.group = "launch";
+	}
+	TamlWrite(%module, %path);
+}

+ 191 - 0
editor/ProjectManager/scripts/ProjectModuleDependList.cs

@@ -0,0 +1,191 @@
+
+function ProjectModuleDependList::onAdd(%this)
+{
+	%this.startListening(ThemeManager);
+}
+
+function ProjectModuleDependList::onThemeChange(%this, %theme)
+{
+	if(isObject(%this.activeModule))
+	{
+		%this.show(%this.activeModule);
+	}
+}
+
+function ProjectModuleDependList::show(%this, %module)
+{
+	%this.activeModule = %module;
+	%this.clearItems();
+	%isSynced = %module.Synchronized;
+
+	for(%i = 0; %i < %module.getdependencyCount(); %i++)
+	{
+		%dep = %module.getDependency(%i);
+		%name = getWord(%dep, 0);
+		%version = getWord(%dep, 1);
+		if(%version $= "*" || %version $= "0")
+		{
+			%version = "Latest";
+		}
+		%this.addDependItem(%name, %version, %isSynced);
+	}
+
+	if(!%module.Synchronized)
+	{
+		%this.addAddButton();
+	}
+}
+
+function ProjectModuleDependList::hide(%this)
+{
+	%this.activeModule = 0;
+	%this.clearItems();
+}
+
+function ProjectModuleDependList::clearItems(%this)
+{
+	for(%i = %this.getCount() - 1; %i >= 0; %i--)
+	{
+		%item = %this.getObject(%i);
+		%item.delete();
+	}
+}
+
+function ProjectModuleDependList::addDependItem(%this, %name, %version, %isSynced)
+{
+	%width = getWord(%this.extent, 0) - 6;
+	%text = new GuiControl()
+	{
+		HorizSizing="width";
+		Position = "3 0";
+		Extent = %width SPC "26";
+		Text = %name @ ":" @ %version;
+		Align = "Left";
+		VAlign = "Middle";
+	};
+	ThemeManager.setProfile(%text, "subListProfile");
+	%this.add(%text);
+
+	if(!%isSynced)
+	{
+		%deleteButton = new GuiButtonCtrl()
+		{
+			Class="ProjectModuleDependButton";
+			ButtonEvent = "RemoveDepend";
+			ButtonData = %name;
+			HorizSizing="left";
+			Position = (%width - 40) SPC "0";
+			Extent = "22 22";
+			MinExtent = "22 22";
+			Text = "X";
+			Align = "Center";
+			VAlign = "Middle";
+			TextExtend = 1;
+		};
+		%deleteButton.position = (%width - (getWord(%deleteButton.extent, 0) + 10)) SPC "0";
+		ThemeManager.setProfile(%deleteButton, "subListProfile");
+		%text.add(%deleteButton);
+		%this.startListening(%deleteButton);
+	}
+}
+
+function ProjectModuleDependList::addAddButton(%this)
+{
+	%this.dependList = %this.buildPossibleDependList();
+	%width = 140;
+	%addButton = new GuiButtonCtrl()
+	{
+		Class="ProjectModuleDependButton";
+		ButtonEvent = "AddDepend";
+		ButtonData = "";
+		HorizSizing="right";
+		Position = "3 0";
+		Extent = %width SPC "26";
+		MinExtent = %width SPC "26";
+		Text = "+Add Dependency";
+		Align = "Center";
+		VAlign = "Middle";
+		TextExtend = 1;
+		Active = (getWordCount(%this.dependList) > 0);
+	};
+	ThemeManager.setProfile(%addButton, "subListProfile");
+	%this.add(%addButton);
+	%this.startListening(%addButton);
+}
+
+function ProjectModuleDependButton::onClick(%this)
+{
+	%this.postEvent(%this.buttonEvent, %this.buttonData);
+}
+
+function ProjectModuleDependList::onAddDepend(%this)
+{
+	%width = 500;
+	%height = 190;
+	%dialog = new GuiControl()
+	{
+		class = "NewDependencyDialog";
+		superclass = "EditorDialog";
+		dialogSize = (%width + 8) SPC (%height + 8);
+		dialogCanClose = true;
+		dialogText = "New Dependency";
+		dependList = %this.dependList;
+	};
+	%dialog.init(%width, %height);
+	%this.startListening(%dialog);
+
+	Canvas.pushDialog(%dialog);
+}
+
+function ProjectModuleDependList::onDependencyAdded(%this, %data)
+{
+	%this.activeModule.addDependency(%data.module, %data.version);
+	%this.activeModule.save();
+	%this.show(%this.activeModule);
+}
+
+function ProjectModuleDependList::onRemoveDepend(%this, %data)
+{
+	%this.activeModule.removeDependency(%data);
+	%this.activeModule.save();
+	%this.schedule(50, "show", %this.activeModule);
+}
+
+function ProjectModuleDependList::onDialogClosed(%this, %dialog)
+{
+	%this.dialog = %dialog;
+	%this.schedule(100, "deleteDialog");
+}
+
+function ProjectModuleDependList::deleteDialog(%this)
+{
+	%this.dialog.delete();
+}
+
+function ProjectModuleDependList::buildPossibleDependList(%this)
+{
+	%allModules = ModuleDatabase.findModules(false);
+	%list = "";
+	for(%i = 0; %i < getWordCount(%allModules); %i++)
+	{
+		%mod = getWord(%allModules, %i);
+		if(%mod.ModuleID !$= "AppCore" && %mod.ModuleID !$= %this.activeModule.ModuleID)
+		{
+			%hasDep = false;
+			for(%j = 0; %j < %this.activeModule.getdependencyCount(); %j++)
+			{
+				%dep = %this.activeModule.getDependency(%j);
+				if(getWord(%dep, 0) $= %mod.ModuleID)
+				{
+					%hasDep = true;
+				}
+			}
+
+			if(!%hasDep)
+			{
+				%list = %list SPC %mod;
+			}
+		}
+	}
+	return trim(%list);
+}

+ 153 - 0
editor/ProjectManager/scripts/ProjectModulePanel.cs

@@ -0,0 +1,153 @@
+
+function ProjectModulePanel::init(%this, %title)
+{
+	%this.leftPanel = new GuiControl()
+	{
+		HorizSizing="right";
+		VertSizing="height";
+		Position="0 0";
+		Extent="200 768";
+	};
+	ThemeManager.setProfile(%this.leftPanel, "overlayProfile");
+	%this.add(%this.leftPanel);
+
+	%this.title = new GuiControl()
+	{
+		Position = "0 4";
+		Extent = "200 34";
+		Text = %title;
+	};
+	ThemeManager.setProfile(%this.title, "titleProfile");
+	%this.leftPanel.add(%this.title);
+
+	%this.buttonBarContainer = new GuiControl()
+	{
+		Position = "0 38";
+		Extent = "200 34";
+	};
+	ThemeManager.setProfile(%this.buttonBarContainer, "panelProfile");
+	%this.leftPanel.add(%this.buttonBarContainer);
+
+	%this.buttonBar = new GuiChainCtrl()
+	{
+		Class = "EditorButtonBar";
+		Position = "0 4";
+		Extent = "0 30";
+		ChildSpacing = 4;
+		IsVertical = false;
+		Tool = %this;
+	};
+	ThemeManager.setProfile(%this.buttonBar, "emptyProfile");
+	%this.buttonBarContainer.add(%this.buttonBar);
+
+	%this.scroller = new GuiScrollCtrl()
+	{
+		HorizSizing="width";
+		VertSizing="height";
+		Position="0 72";
+		Extent="200 696";
+		hScrollBar="alwaysOff";
+		vScrollBar="dynamic";
+		constantThumbHeight="0";
+		showArrowButtons="0";
+		scrollBarThickness="6";
+	};
+	ThemeManager.setProfile(%this.scroller, "emptyProfile");
+	ThemeManager.setProfile(%this.scroller, "tinyThumbProfile", "ThumbProfile");
+	ThemeManager.setProfile(%this.scroller, "tinyTrackProfile", "TrackProfile");
+	ThemeManager.setProfile(%this.scroller, "tinyScrollArrowProfile", "ArrowProfile");
+	%this.leftPanel.add(%this.scroller);
+
+	%this.list = new GuiListBoxCtrl()
+	{
+		Class = "ProjectModulePanelList";
+		HorizSizing="width";
+		VertSizing="height";
+		Position="0 0";
+		Extent="200 10";
+		AllowMultipleSelections=true;
+		FitParentWidth=true;
+		FontSizeAdjust="0.9";
+	};
+	ThemeManager.setProfile(%this.list, "listBoxProfile");
+	%this.scroller.add(%this.list);
+	%this.startListening(%this.list);
+
+	%this.card = new GuiScrollCtrl()
+	{
+		Class="ProjectModuleCard";
+		HorizSizing="width";
+		VertSizing="height";
+		Position="200 0";
+		Extent="312 768";
+		hScrollBar="alwaysOff";
+		vScrollBar="dynamic";
+		constantThumbHeight="0";
+		showArrowButtons="1";
+		scrollBarThickness="14";
+		visible = false;
+	};
+	ThemeManager.setProfile(%this.card, "scrollProfile");
+	ThemeManager.setProfile(%this.card, "thumbProfile", "ThumbProfile");
+	ThemeManager.setProfile(%this.card, "trackProfile", "TrackProfile");
+	ThemeManager.setProfile(%this.card, "scrollArrowProfile", "ArrowProfile");
+	%this.add(%this.card);
+	%this.startListening(%this.card);
+
+	%this.gray = "80 80 80 150";
+	%this.yellow = "255 255 100 255";
+	%this.red = "255 80 80 255";
+	%this.darkRed = "200 0 0 200";
+	%this.purple = "255 100 255 255";
+}
+
+function ProjectModulePanel::setTitle(%this, %title)
+{
+	%this.title.setText(%title);
+}
+
+function ProjectModulePanel::clearModules(%this)
+{
+	%this.list.clearItems();
+}
+
+function ProjectModulePanel::getModuleName(%this, %module)
+{
+	%name = %module.ModuleId;
+	if(%module.VersionId !$= "1")
+	{
+		%name = %module.ModuleId @ ":" @ %module.VersionId;
+	}
+	return %name;
+}
+
+function ProjectModulePanelList::onSelect(%this)
+{
+	%index = %this.getSelectedItem();
+	if(%index != -1)
+	{
+		%module = %this.getItemID(%index);
+		%this.postEvent("ModuleSelected", %module);
+	}
+}
+
+function ProjectModulePanel::onModuleSelected(%this, %module)
+{
+	%this.card.show(%module);
+}
+
+function ProjectModulePanel::onClose(%this)
+{
+	%this.list.clearSelection();
+	%this.card.visible = false;
+}
+
+function ProjectModulePanel::sortModules(%this)
+{
+	%this.list.sortByText();
+}
+
+function ProjectModulePanel::onModuleShown(%this, %module)
+{
+	%this.buttonBar.refreshEnabled();
+}

+ 7 - 1
editor/main.cs

@@ -29,5 +29,11 @@ EditorManager.scanModules( "./" );
 
 // Load various editors
 EditorManager.LoadExplicit("EditorConsole");
-//Editormanager.LoadExplicit("ProjectManager");//Someday...
+Editormanager.LoadExplicit("ProjectManager");
 EditorManager.LoadExplicit("AssetAdmin");
+
+if(!isObject(AppCore))
+{
+	EditorCore.open();
+	EditorCore.showProjectSelector();
+}

+ 4 - 4
engine/Link/Debug/libogg/libogg_DEBUG.lib.recipe

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project>
-  <ProjectOutputs></ProjectOutputs>
-  <ContentFiles></ContentFiles>
-  <SatelliteDlls></SatelliteDlls>
-  <NonRecipeFileRefs></NonRecipeFileRefs>
+  <ProjectOutputs />
+  <ContentFiles />
+  <SatelliteDlls />
+  <NonRecipeFileRefs />
 </Project>

+ 4 - 4
engine/Link/Debug/libvorbis/libvorbis_DEBUG.lib.recipe

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project>
-  <ProjectOutputs></ProjectOutputs>
-  <ContentFiles></ContentFiles>
-  <SatelliteDlls></SatelliteDlls>
-  <NonRecipeFileRefs></NonRecipeFileRefs>
+  <ProjectOutputs />
+  <ContentFiles />
+  <SatelliteDlls />
+  <NonRecipeFileRefs />
 </Project>

+ 4 - 4
engine/Link/Debug/ljpeg/ljpeg_DEBUG.lib.recipe

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project>
-  <ProjectOutputs></ProjectOutputs>
-  <ContentFiles></ContentFiles>
-  <SatelliteDlls></SatelliteDlls>
-  <NonRecipeFileRefs></NonRecipeFileRefs>
+  <ProjectOutputs />
+  <ContentFiles />
+  <SatelliteDlls />
+  <NonRecipeFileRefs />
 </Project>

+ 4 - 4
engine/Link/Debug/lpng/lpng_DEBUG.lib.recipe

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project>
-  <ProjectOutputs></ProjectOutputs>
-  <ContentFiles></ContentFiles>
-  <SatelliteDlls></SatelliteDlls>
-  <NonRecipeFileRefs></NonRecipeFileRefs>
+  <ProjectOutputs />
+  <ContentFiles />
+  <SatelliteDlls />
+  <NonRecipeFileRefs />
 </Project>

+ 4 - 4
engine/Link/Debug/zlib/zlib_DEBUG.lib.recipe

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project>
-  <ProjectOutputs></ProjectOutputs>
-  <ContentFiles></ContentFiles>
-  <SatelliteDlls></SatelliteDlls>
-  <NonRecipeFileRefs></NonRecipeFileRefs>
+  <ProjectOutputs />
+  <ContentFiles />
+  <SatelliteDlls />
+  <NonRecipeFileRefs />
 </Project>

+ 0 - 7
engine/Link/VC2012.Debug.Win32/Torque2D/Torque2D_DEBUG.exe.recipe

@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project>
-  <ProjectOutputs>C:\Users\Peter\Documents\GitHub\TorqueGameEngines\Torque2D\Torque2D_DEBUG.exe</ProjectOutputs>
-  <ContentFiles></ContentFiles>
-  <SatelliteDlls></SatelliteDlls>
-  <NonRecipeFileRefs></NonRecipeFileRefs>
-</Project>

+ 14 - 0
engine/compilers/Make-32bit/Dockerfile

@@ -0,0 +1,14 @@
+FROM ubuntu:20.04
+ARG DEBIAN_FRONTEND=noninteractive
+RUN dpkg --add-architecture i386  &&\
+    apt-get update && \
+    apt-get -y install \
+        build-essential \
+        gcc-multilib \
+        g++-multilib \
+        nasm \
+        libsdl-dev:i386 \
+        libxft-dev:i386 \
+        libopenal-dev:i386 && \
+    rm -rf /var/lib/{apt,dpkg,cache,log}/
+RUN mkdir /torque2d-engine-build/

+ 13 - 1
engine/compilers/Make/Makefile → engine/compilers/Make-32bit/Makefile

@@ -6,8 +6,20 @@ SHARED_LIB_TARGETS_DEBUG :=
 APP_TARGETS :=
 APP_TARGETS_DEBUG :=
 
+build-in-docker: docker-buildenv
+	docker run  \
+		--rm \
+		--user $(shell id -u):$(shell id -g) \
+		-v $(shell readlink -e ../../../ ):/torque2d-engine-build/ \
+		-w /torque2d-engine-build/engine/compilers/Make-32bit/ \
+		torque2d-linux32-build-env \
+			make -j all
+
 all: debug release
 
+docker-buildenv: Dockerfile
+	docker build -t torque2d-linux32-build-env .
+
 clean:
 	rm -rf Debug
 	rm -rf Release
@@ -15,7 +27,7 @@ clean:
 
 .PHONY: all debug release clean
 
--include x Torque2D
+-include x Torque2D.mk
 -include x zlib
 -include x lpng
 -include x ljpeg

+ 144 - 0
engine/compilers/Make-32bit/Torque2D.mk

@@ -0,0 +1,144 @@
+APPNAME := ../../../Torque2D
+
+2D_SOURCES :=            $(shell find ../../source/2d/ -name "*.cc") + \
+						 $(shell find ../../source/2d/ -name "*.cpp")
+ALGORITHM_SOURCES :=     $(shell find ../../source/algorithm/ -name "*.cc")
+ASSETS_SOURCES :=        $(shell find ../../source/assets/ -name "*.cc")
+AUDIO_SOURCES :=         $(shell find ../../source/audio/ -name "*.cc")
+BITMAPFONT_SOURCES :=    $(shell find ../../source/bitmapFont/ -name "*.cc")
+BOX2D_SOURCES :=         $(shell find ../../source/Box2D/ -name "*.cpp")
+COLLECTION_SOURCES :=    $(shell find ../../source/collection/ -name "*.cc")
+COMPONENT_SOURCES :=     $(shell find ../../source/component/ -name "*.cpp")
+CONSOLE_SOURCES :=       $(shell find ../../source/console/ -name "*.cc")
+DEBUG_SOURCES :=         $(shell find ../../source/debug/ -name "*.cc")
+DELEGATES_SOURCES :=     $(shell find ../../source/delegates/ -name "*.cc")
+GAME_SOURCES :=          $(shell find ../../source/game/ -name "*.cc")
+GRAPHICS_SOURCES :=      $(shell find ../../source/graphics/ -name "*.cc")
+GUI_SOURCES :=           $(shell find ../../source/gui/ -name "*.cc")
+INPUT_SOURCES :=         $(shell find ../../source/input/ -name "*.cc")
+IO_SOURCES :=            $(shell find ../../source/io/ -name "*.cc") 
+MATH_SOURCES :=          $(shell find ../../source/math/ -name "*.cc") + \
+                         $(shell find ../../source/math/ -name "*.cpp") + \
+                         $(shell find ../../source/math/ -name "*.asm")
+MEMORY_SOURCES :=        $(shell find ../../source/memory/ -name "*.cc")
+MESSAGING_SOURCES :=     $(shell find ../../source/messaging/ -name "*.cc")
+MODULE_SOURCES :=        $(shell find ../../source/module/ -name "*.cc")
+NETWORK_SOURCES :=       $(shell find ../../source/network/ -name "*.cc")
+PERSISTENCE_SOURCES :=   $(shell find ../../source/persistence/ -name "*.cc") + \
+                         $(shell find ../../source/persistence/ -name "*.cpp")
+PLATFORM_SOURCES :=      $(shell find ../../source/platform/ -name "*.cc") + \
+                         $(shell find ../../source/platform/ -name "*.cpp") + \
+						 $(shell find ../../source/platform/ -name "*.asm")
+PLATFORM_UNIX_SOURCES := $(shell find ../../source/platformX86UNIX/ -name "*.cc")
+SIM_SOURCES :=           $(shell find ../../source/sim/ -name "*.cc") + \
+                         $(shell find ../../source/sim/ -name "*.cpp")
+STRING_SOURCES :=        $(shell find ../../source/string/ -name "*.cc") + \
+                         $(shell find ../../source/string/ -name "*.cpp") 
+
+SOURCES := $(2D_SOURCES) + \
+	$(ALGORITHM_SOURCES) + \
+	$(ASSETS_SOURCES) + \
+	$(AUDIO_SOURCES) + \
+	$(BITMAPFONT_SOURCES) + \
+	$(BOX2D_SOURCES) + \
+	$(COLLECTION_SOURCES) + \
+	$(COMPONENT_SOURCES) + \
+	$(CONSOLE_SOURCES) + \
+	$(DEBUG_SOURCES) + \
+	$(DELEGATES_SOURCES) + \
+	$(GAME_SOURCES) + \
+	$(GRAPHICS_SOURCES) + \
+	$(GUI_SOURCES) + \
+	$(INPUT_SOURCES) + \
+	$(IO_SOURCES) + \
+	$(MATH_SOURCES) + \
+	$(MEMORY_SOURCES) + \
+	$(MESSAGING_SOURCES) + \
+	$(MODULE_SOURCES) + \
+	$(NETWORK_SOURCES) + \
+	$(PERSISTENCE_SOURCES) + \
+	$(PLATFORM_SOURCES) + \
+	$(PLATFORM_UNIX_SOURCES) + \
+	$(SIM_SOURCES) + \
+	$(STRING_SOURCES)
+
+LDFLAGS := -g -m32
+LDLIBS := -lstdc++ -lm -ldl -lpthread -lrt -lX11 -lXft -lSDL -lopenal
+
+CFLAGS := -std=c++14 -MMD -I. -Wfatal-errors -Wunused -m32 -msse -march=i686 -pipe
+
+CFLAGS += -I/usr/include
+CFLAGS += -I/usr/include/freetype2
+CFLAGS += -I../../source
+CFLAGS += -I../../source/persistence/rapidjson/include
+CFLAGS += -I../../lib/ljpeg
+CFLAGS += -I../../lib/zlib
+CFLAGS += -I../../lib/lpng
+CFLAGS += -I../../lib/freetype
+CFLAGS += -I../../lib/libvorbis/include
+CFLAGS += -I../../lib/libogg/include
+CFLAGS += -I../../lib/openal/LINUX/
+
+CFLAGS += -DLINUX
+CFLAGS += -Di386
+
+
+CFLAGS_DEBUG := $(CFLAGS) -ggdb
+CFLAGS_DEBUG += -DTORQUE_DEBUG
+CFLAGS_DEBUG += -DTORQUE_DEBUG_GUARD
+CFLAGS_DEBUG += -DTORQUE_NET_STATS
+
+CFLAGS += -Og
+
+NASMFLAGS := -f elf -D LINUX
+
+CC := gcc
+LD := gcc
+
+APP_TARGETS += $(APPNAME)
+APP_TARGETS_DEBUG += $(APPNAME)_DEBUG
+
+OBJS := $(patsubst ../../source/%,Release/%.o,$(SOURCES))
+OBJS := $(filter %.o, $(OBJS))
+
+OBJS_DEBUG := $(patsubst ../../source/%,Debug/%.o,$(SOURCES))
+OBJS_DEBUG := $(filter %.o,$(OBJS_DEBUG))
+
+$(APP_TARGETS): $(OBJS) $(LIB_TARGETS)
+	@echo Linking release
+	$(LD) $(LDFLAGS) -o $@ $(OBJS) $(LIB_TARGETS) $(LDLIBS)
+
+$(APP_TARGETS_DEBUG): $(OBJS_DEBUG) $(LIB_TARGETS_DEBUG)
+	@echo Linking debug
+	$(LD) $(LDFLAGS) -o $@ $(OBJS_DEBUG) $(LIB_TARGETS_DEBUG) $(LDLIBS)
+
+Release/%.asm.o:	../../source/%.asm
+	@echo Building release asm $@
+	@mkdir -p $(dir $@)
+	nasm $(NASMFLAGS) $< -o $@
+
+Release/%.o:	../../source/%
+	@echo Building release object $@
+	@mkdir -p $(dir $@)
+	$(CC) -c $(CFLAGS) $< -o $@
+
+Debug/%.asm.o:	../../source/%.asm
+	@echo Building debug asm $@
+	@mkdir -p $(dir $@)
+	nasm $(NASMFLAGS) $< -o $@
+
+Debug/%.o:	../../source/%
+	@echo Building debug object $@
+	@mkdir -p $(dir $@)
+	$(CC) -c $(CFLAGS_DEBUG) $< -o $@
+
+release: $(APP_TARGETS)
+debug: $(APP_TARGETS_DEBUG)
+
+.PHONY: $(APP_TARGETS) $(APP_TARGETS_DEBUG)
+
+DEPS += $(patsubst %.o,%.d,$(OBJS))
+DEPS += $(patsubst %.o,%.d,$(OBJS_DEBUG))
+
+APPNAME :=
+SOURCES :=

+ 0 - 0
engine/compilers/Make/ljpeg → engine/compilers/Make-32bit/ljpeg


+ 0 - 0
engine/compilers/Make/lpng → engine/compilers/Make-32bit/lpng


+ 0 - 0
engine/compilers/Make/ogg → engine/compilers/Make-32bit/ogg


+ 0 - 0
engine/compilers/Make/vorbis → engine/compilers/Make-32bit/vorbis


+ 0 - 0
engine/compilers/Make/zlib → engine/compilers/Make-32bit/zlib


+ 13 - 0
engine/compilers/Make-64bit/Dockerfile

@@ -0,0 +1,13 @@
+FROM ubuntu:20.04
+ARG DEBIAN_FRONTEND=noninteractive
+RUN apt-get update && \
+    apt-get -y install \
+        build-essential \
+        gcc-multilib \
+        g++-multilib \
+        nasm \
+        libsdl-dev \
+        libxft-dev \
+        libopenal-dev && \
+    rm -rf /var/lib/{apt,dpkg,cache,log}/
+RUN mkdir /torque2d-engine-build/

+ 45 - 0
engine/compilers/Make-64bit/Makefile

@@ -0,0 +1,45 @@
+DEPS :=
+LIB_TARGETS :=
+LIB_TARGETS_DEBUG :=
+SHARED_LIB_TARGETS :=
+SHARED_LIB_TARGETS_DEBUG :=
+APP_TARGETS :=
+APP_TARGETS_DEBUG :=
+
+build-in-docker: docker-buildenv
+	docker run  \
+		--rm \
+		--user $(shell id -u):$(shell id -g) \
+		-v $(shell readlink -e ../../../ ):/torque2d-engine-build/ \
+		-w /torque2d-engine-build/engine/compilers/Make-64bit/ \
+		torque2d-linux64-build-env \
+			make -j all
+
+all: debug release
+
+docker-buildenv: Dockerfile
+	docker build -t torque2d-linux64-build-env .
+
+clean:
+	rm -rf Debug
+	rm -rf Release
+	rm -rf lib
+
+.PHONY: all debug release clean
+
+-include x Torque2D.mk
+-include x zlib
+-include x lpng
+-include x ljpeg
+-include x vorbis
+-include x ogg
+
+release: $(LIB_TARGETS) $(SHARED_LIB_TARGETS) $(APP_TARGETS)
+	@echo Built libraries: $(LIB_TARGETS)
+	@echo Built shared libraries: $(SHARED_LIB_TARGETS)
+	@echo Built apps: $(APP_TARGETS)
+
+debug: $(LIB_TARGETS_DEBUG) $(SHARED_LIB_TARGETS_DEBUG) $(APP_TARGETS_DEBUG)
+	@echo Built libraries: $(LIB_TARGETS_DEBUG)
+	@echo Built shared libraries: $(SHARED_LIB_TARGETS_DEBUG)
+	@echo Built apps: $(APP_TARGETS_DEBUG)

+ 143 - 0
engine/compilers/Make-64bit/Torque2D.mk

@@ -0,0 +1,143 @@
+APPNAME := ../../../Torque2D
+
+2D_SOURCES :=            $(shell find ../../source/2d/ -name "*.cc") + \
+						 $(shell find ../../source/2d/ -name "*.cpp")
+ALGORITHM_SOURCES :=     $(shell find ../../source/algorithm/ -name "*.cc")
+ASSETS_SOURCES :=        $(shell find ../../source/assets/ -name "*.cc")
+AUDIO_SOURCES :=         $(shell find ../../source/audio/ -name "*.cc")
+BITMAPFONT_SOURCES :=    $(shell find ../../source/bitmapFont/ -name "*.cc")
+BOX2D_SOURCES :=         $(shell find ../../source/Box2D/ -name "*.cpp")
+COLLECTION_SOURCES :=    $(shell find ../../source/collection/ -name "*.cc")
+COMPONENT_SOURCES :=     $(shell find ../../source/component/ -name "*.cpp")
+CONSOLE_SOURCES :=       $(shell find ../../source/console/ -name "*.cc")
+DEBUG_SOURCES :=         $(shell find ../../source/debug/ -name "*.cc")
+DELEGATES_SOURCES :=     $(shell find ../../source/delegates/ -name "*.cc")
+GAME_SOURCES :=          $(shell find ../../source/game/ -name "*.cc")
+GRAPHICS_SOURCES :=      $(shell find ../../source/graphics/ -name "*.cc")
+GUI_SOURCES :=           $(shell find ../../source/gui/ -name "*.cc")
+INPUT_SOURCES :=         $(shell find ../../source/input/ -name "*.cc")
+IO_SOURCES :=            $(shell find ../../source/io/ -name "*.cc") 
+MATH_SOURCES :=          $(shell find ../../source/math/ -name "*.cc") + \
+                         $(shell find ../../source/math/ -name "*.cpp") 
+MEMORY_SOURCES :=        $(shell find ../../source/memory/ -name "*.cc")
+MESSAGING_SOURCES :=     $(shell find ../../source/messaging/ -name "*.cc")
+MODULE_SOURCES :=        $(shell find ../../source/module/ -name "*.cc")
+NETWORK_SOURCES :=       $(shell find ../../source/network/ -name "*.cc")
+PERSISTENCE_SOURCES :=   $(shell find ../../source/persistence/ -name "*.cc") + \
+                         $(shell find ../../source/persistence/ -name "*.cpp")
+PLATFORM_SOURCES :=      $(shell find ../../source/platform/ -name "*.cc") + \
+                         $(shell find ../../source/platform/ -name "*.cpp")
+PLATFORM_UNIX_SOURCES := $(shell find ../../source/platformX86UNIX/ -name "*.cc")
+SIM_SOURCES :=           $(shell find ../../source/sim/ -name "*.cc") + \
+                         $(shell find ../../source/sim/ -name "*.cpp")
+STRING_SOURCES :=        $(shell find ../../source/string/ -name "*.cc") + \
+                         $(shell find ../../source/string/ -name "*.cpp") 
+
+SOURCES := $(2D_SOURCES) + \
+	$(ALGORITHM_SOURCES) + \
+	$(ASSETS_SOURCES) + \
+	$(AUDIO_SOURCES) + \
+	$(BITMAPFONT_SOURCES) + \
+	$(BOX2D_SOURCES) + \
+	$(COLLECTION_SOURCES) + \
+	$(COMPONENT_SOURCES) + \
+	$(CONSOLE_SOURCES) + \
+	$(DEBUG_SOURCES) + \
+	$(DELEGATES_SOURCES) + \
+	$(GAME_SOURCES) + \
+	$(GRAPHICS_SOURCES) + \
+	$(GUI_SOURCES) + \
+	$(INPUT_SOURCES) + \
+	$(IO_SOURCES) + \
+	$(MATH_SOURCES) + \
+	$(MEMORY_SOURCES) + \
+	$(MESSAGING_SOURCES) + \
+	$(MODULE_SOURCES) + \
+	$(NETWORK_SOURCES) + \
+	$(PERSISTENCE_SOURCES) + \
+	$(PLATFORM_SOURCES) + \
+	$(PLATFORM_UNIX_SOURCES) + \
+	$(SIM_SOURCES) + \
+	$(STRING_SOURCES)
+
+LDFLAGS := -g -m64
+LDLIBS := -lstdc++ -lm -ldl -lpthread -lrt -lX11 -lXft -lSDL -lopenal
+
+CFLAGS := -std=c++14 -MMD -I. -Wfatal-errors -Wunused -m64 -msse -march=x86-64 -pipe
+
+CFLAGS += -I/usr/include
+CFLAGS += -I/usr/include/freetype2
+CFLAGS += -I../../source
+CFLAGS += -I../../source/persistence/rapidjson/include
+CFLAGS += -I../../lib/ljpeg
+CFLAGS += -I../../lib/zlib
+CFLAGS += -I../../lib/lpng
+CFLAGS += -I../../lib/freetype
+CFLAGS += -I../../lib/libvorbis/include
+CFLAGS += -I../../lib/libogg/include
+CFLAGS += -I../../lib/openal/LINUX/
+
+CFLAGS += -DLINUX
+CFLAGS += -D__amd64__
+CFLAGS += -DTORQUE_64
+
+
+CFLAGS_DEBUG := $(CFLAGS) -ggdb
+CFLAGS_DEBUG += -DTORQUE_DEBUG
+CFLAGS_DEBUG += -DTORQUE_DEBUG_GUARD
+CFLAGS_DEBUG += -DTORQUE_NET_STATS
+
+CFLAGS += -Og
+
+NASMFLAGS := -f elf64 -D LINUX
+
+CC := gcc
+LD := gcc
+
+APP_TARGETS += $(APPNAME)
+APP_TARGETS_DEBUG += $(APPNAME)_DEBUG
+
+OBJS := $(patsubst ../../source/%,Release/%.o,$(SOURCES))
+OBJS := $(filter %.o, $(OBJS))
+
+OBJS_DEBUG := $(patsubst ../../source/%,Debug/%.o,$(SOURCES))
+OBJS_DEBUG := $(filter %.o,$(OBJS_DEBUG))
+
+$(APP_TARGETS): $(OBJS) $(LIB_TARGETS)
+	@echo Linking release
+	$(LD) $(LDFLAGS) -o $@ $(OBJS) $(LIB_TARGETS) $(LDLIBS)
+
+$(APP_TARGETS_DEBUG): $(OBJS_DEBUG) $(LIB_TARGETS_DEBUG)
+	@echo Linking debug
+	$(LD) $(LDFLAGS) -o $@ $(OBJS_DEBUG) $(LIB_TARGETS_DEBUG) $(LDLIBS)
+
+Release/%.asm.o:	../../source/%.asm
+	@echo Building release asm $@
+	@mkdir -p $(dir $@)
+	nasm $(NASMFLAGS) $< -o $@
+
+Release/%.o:	../../source/%
+	@echo Building release object $@
+	@mkdir -p $(dir $@)
+	$(CC) -c $(CFLAGS) $< -o $@
+
+Debug/%.asm.o:	../../source/%.asm
+	@echo Building debug asm $@
+	@mkdir -p $(dir $@)
+	nasm $(NASMFLAGS) $< -o $@
+
+Debug/%.o:	../../source/%
+	@echo Building debug object $@
+	@mkdir -p $(dir $@)
+	$(CC) -c $(CFLAGS_DEBUG) $< -o $@
+
+release: $(APP_TARGETS)
+debug: $(APP_TARGETS_DEBUG)
+
+.PHONY: $(APP_TARGETS) $(APP_TARGETS_DEBUG)
+
+DEPS += $(patsubst %.o,%.d,$(OBJS))
+DEPS += $(patsubst %.o,%.d,$(OBJS_DEBUG))
+
+APPNAME :=
+SOURCES :=

+ 109 - 0
engine/compilers/Make-64bit/ljpeg

@@ -0,0 +1,109 @@
+# I release this sample under the MIT license: free for any use, provided 
+# you hold me harmless from any such use you make, and you retain my
+# copyright on the actual sources.
+# Copyright 2005 Jon Watte.
+
+LIBNAME := ljpeg
+SOURCES := ../../lib/ljpeg/jidctint.c \
+../../lib/ljpeg/jcmainct.c \
+../../lib/ljpeg/jfdctfst.c \
+../../lib/ljpeg/jdatadst.c \
+../../lib/ljpeg/jdsample.c \
+../../lib/ljpeg/jmemmgr.c \
+../../lib/ljpeg/jidctred.c \
+../../lib/ljpeg/jcphuff.c \
+../../lib/ljpeg/jchuff.c \
+../../lib/ljpeg/jdapistd.c \
+../../lib/ljpeg/jdpostct.c \
+../../lib/ljpeg/jquant2.c \
+../../lib/ljpeg/jdmerge.c \
+../../lib/ljpeg/jfdctflt.c \
+../../lib/ljpeg/jcprepct.c \
+../../lib/ljpeg/jccolor.c \
+../../lib/ljpeg/jfdctint.c \
+../../lib/ljpeg/jdhuff.c \
+../../lib/ljpeg/jcomapi.c \
+../../lib/ljpeg/jcinit.c \
+../../lib/ljpeg/jccoefct.c \
+../../lib/ljpeg/jdinput.c \
+../../lib/ljpeg/jutils.c \
+../../lib/ljpeg/jcapimin.c \
+../../lib/ljpeg/jdcoefct.c \
+../../lib/ljpeg/jidctflt.c \
+../../lib/ljpeg/jcmaster.c \
+../../lib/ljpeg/jddctmgr.c \
+../../lib/ljpeg/jidctfst.c \
+../../lib/ljpeg/jcparam.c \
+../../lib/ljpeg/jcapistd.c \
+../../lib/ljpeg/jdmaster.c \
+../../lib/ljpeg/jcdctmgr.c \
+../../lib/ljpeg/jctrans.c \
+../../lib/ljpeg/jdmainct.c \
+../../lib/ljpeg/jdtrans.c \
+../../lib/ljpeg/jcsample.c \
+../../lib/ljpeg/jdmarker.c \
+../../lib/ljpeg/jdatasrc.c \
+../../lib/ljpeg/jerror.c \
+../../lib/ljpeg/jquant1.c \
+../../lib/ljpeg/jdphuff.c \
+../../lib/ljpeg/jcmarker.c \
+../../lib/ljpeg/jdapimin.c \
+../../lib/ljpeg/jdcolor.c \
+../../lib/ljpeg/jmemnobs.c \
+
+LDFLAGS_ljpeg := -g -m64
+
+CFLAGS_ljpeg := -MMD -I. -m64 -msse -mmmx -march=x86-64
+
+CFLAGS_ljpeg += -I../../lib/ljpeg
+
+CFLAGS_ljpeg += -DUNICODE
+CFLAGS_ljpeg += -DLINUX
+
+CFLAGS_DEBUG_ljpeg := $(CFLAGS_ljpeg) -ggdb
+CFLAGS_DEBUG_ljpeg += -DTORQUE_DEBUG
+CFLAGS_DEBUG_ljpeg += -DTORQUE_DEBUG_GUARD
+CFLAGS_DEBUG_ljpeg += -DTORQUE_NET_STATS
+
+CFLAGS_ljpeg += -O3
+
+CC := gcc
+LD := gcc
+
+TARGET_ljpeg := lib/ljpeg.a
+TARGET_ljpeg_DEBUG := lib/ljpeg_DEBUG.a
+
+LIB_TARGETS += $(TARGET_ljpeg)
+LIB_TARGETS_DEBUG += $(TARGET_ljpeg_DEBUG)
+
+OBJS_ljpeg := $(patsubst ../../lib/ljpeg/%,Release/ljpeg/%.o,$(SOURCES))
+OBJS_ljpeg_DEBUG := $(patsubst ../../lib/ljpeg/%,Debug/ljpeg/%.o,$(SOURCES))
+
+# Deriving the variable name from the target name is the secret sauce
+# of the build system.
+#
+$(TARGET_ljpeg):	$(OBJS_ljpeg)
+	@echo Linking library ljpng
+	@mkdir -p $(dir $@)
+	ar cr $@ $(OBJS_ljpeg)
+
+$(TARGET_ljpeg_DEBUG):	$(OBJS_ljpeg_DEBUG)
+	@echo Linking debug library ljpng
+	@mkdir -p $(dir $@)
+	ar cr $@ $(OBJS_ljpeg_DEBUG)
+
+Release/ljpeg/%.o:	../../lib/ljpeg/%
+	@mkdir -p $(dir $@)
+	$(CC) -c $(CFLAGS_ljpeg) $< -o $@
+
+Debug/ljpeg/%.o:	../../lib/ljpeg/%
+	@mkdir -p $(dir $@)
+	$(CC) -c $(CFLAGS_DEBUG_ljpeg) $< -o $@
+
+release_ljpeg: $(TARGET_ljpeg)
+debug_ljpeg: $(TARGET_ljpeg_DEBUG)
+
+.PHONY: debug_ljpeg release_ljpeg
+
+DEPS += $(patsubst %.o,%.d,$(OBJS_ljpeg))
+DEPS += $(patsubst %.o,%.d,$(OBJS_ljpeg_DEBUG))

+ 78 - 0
engine/compilers/Make-64bit/lpng

@@ -0,0 +1,78 @@
+# I release this sample under the MIT license: free for any use, provided 
+# you hold me harmless from any such use you make, and you retain my 
+# copyright on the actual sources.
+# Copyright 2005 Jon Watte.
+
+LIBNAME := lpng
+SOURCES := ../../lib/lpng/pngerror.c \
+../../lib/lpng/pngwrite.c \
+../../lib/lpng/pngread.c \
+../../lib/lpng/pngmem.c \
+../../lib/lpng/pngset.c \
+../../lib/lpng/pngwio.c \
+../../lib/lpng/pngrtran.c \
+../../lib/lpng/pngtrans.c \
+../../lib/lpng/pngrutil.c \
+../../lib/lpng/pngwtran.c \
+../../lib/lpng/png.c \
+../../lib/lpng/pngrio.c \
+../../lib/lpng/pngwutil.c \
+../../lib/lpng/pngget.c \
+../../lib/lpng/pngpread.c \
+
+LDFLAGS_lpng := -g -m64
+#LDLIBS_lpng := -lstdc++
+CFLAGS_lpng := -MMD -I. -m64 -msse -mmmx -march=x86-64
+
+CFLAGS_lpng += -I../../lib/zlib
+CFLAGS_lpng += -I../../lib/lpng
+
+CFLAGS_lpng += -DUNICODE
+CFLAGS_lpng += -DLINUX
+
+
+CFLAGS_DEBUG_lpng := $(CFLAGS_lpng) -ggdb
+CFLAGS_DEBUG_lpng += -DTORQUE_DEBUG
+CFLAGS_DEBUG_lpng += -DTORQUE_DEBUG_GUARD
+CFLAGS_DEBUG_lpng += -DTORQUE_NET_STATS
+
+CFLAGS_lpng += -O3
+
+CC := gcc
+LD := gcc
+
+TARGET_lpng := lib/lpng.a
+TARGET_lpng_DEBUG := lib/lpng_DEBUG.a
+
+LIB_TARGETS += $(TARGET_lpng)
+LIB_TARGETS_DEBUG += $(TARGET_lpng_DEBUG)
+
+OBJS_lpng := $(patsubst ../../lib/lpng/%,Release/lpng/%.o,$(SOURCES))
+OBJS_lpng_DEBUG := $(patsubst ../../lib/lpng/%,Debug/lpng/%.o,$(SOURCES))
+
+# Deriving the variable name from the target name is the secret sauce 
+# of the build system.
+#
+$(TARGET_lpng):	$(OBJS_lpng)
+	@mkdir -p $(dir $@)
+	ar cr $@ $(OBJS_lpng)
+   
+$(TARGET_lpng_DEBUG):	$(OBJS_lpng_DEBUG)
+	@mkdir -p $(dir $@)
+	ar cr $@ $(OBJS_lpng_DEBUG)
+
+Release/lpng/%.o:	../../lib/lpng/%
+	@mkdir -p $(dir $@)
+	$(CC) -c $(CFLAGS_lpng) $< -o $@
+   
+Debug/lpng/%.o:	../../lib/lpng/%
+	@mkdir -p $(dir $@)
+	$(CC) -c $(CFLAGS_DEBUG_lpng) $< -o $@
+   
+release_lpng: $(TARGET_lpng)
+debug_lpng: $(TARGET_lpng_DEBUG)
+
+.PHONY: debug_lpng release_lpng
+
+DEPS += $(patsubst %.o,%.d,$(OBJS_lpng))
+DEPS += $(patsubst %.o,%.d,$(OBJS_lpng_DEBUG))

+ 64 - 0
engine/compilers/Make-64bit/ogg

@@ -0,0 +1,64 @@
+# I release this sample under the MIT license: free for any use, provided
+# you hold me harmless from any such use you make, and you retain my
+# copyright on the actual sources.
+# Copyright 2005 Jon Watte.
+
+LIBNAME := ogg
+SOURCES := \
+../../lib/libogg/src/bitwise.c \
+../../lib/libogg/src/framing.c \
+
+LDFLAGS_ogg := -g -m64
+
+CFLAGS_ogg := -MMD -I. -m64 -msse -mmmx -march=x86-64
+
+CFLAGS_ogg += -I../../lib/libogg/include
+
+CFLAGS_ogg += -DUNICODE
+CFLAGS_ogg += -DLINUX
+
+CFLAGS_DEBUG_ogg := $(CFLAGS_ogg) -ggdb
+CFLAGS_DEBUG_ogg += -DTORQUE_DEBUG
+CFLAGS_DEBUG_ogg += -DTORQUE_DEBUG_GUARD
+CFLAGS_DEBUG_ogg += -DTORQUE_NET_STATS
+
+CFLAGS_ogg += -O3
+
+CC := gcc
+LD := gcc
+
+TARGET_ogg := lib/libogg.a
+TARGET_ogg_DEBUG := lib/libogg_DEBUG.a
+
+LIB_TARGETS += $(TARGET_ogg)
+LIB_TARGETS_DEBUG += $(TARGET_ogg_DEBUG)
+
+OBJS_ogg := $(patsubst ../../lib/libogg/%,Release/ogg/%.o,$(SOURCES))
+OBJS_ogg_DEBUG := $(patsubst ../../lib/libogg/%,Debug/ogg/%.o,$(SOURCES))
+
+# Deriving the variable name from the target name is the secret sauce
+# of the build system.
+#
+$(TARGET_ogg):	$(OBJS_ogg)
+	@mkdir -p $(dir $@)
+	ar cr $@ $(OBJS_ogg)
+
+$(TARGET_ogg_DEBUG):	$(OBJS_ogg_DEBUG)
+	@mkdir -p $(dir $@)
+	ar cr $@ $(OBJS_ogg_DEBUG)
+
+Release/ogg/%.o:	../../lib/libogg/%
+	@mkdir -p $(dir $@)
+	$(CC) -c $(CFLAGS_ogg) $< -o $@
+
+Debug/ogg/%.o:	../../lib/libogg/%
+	@mkdir -p $(dir $@)
+	$(CC) -c $(CFLAGS_DEBUG_ogg) $< -o $@
+
+release_ogg: $(TARGET_ogg)
+debug_ogg: $(TARGET_ogg_DEBUG)
+
+.PHONY: debug_ogg release_ogg
+
+DEPS += $(patsubst %.o,%.d,$(OBJS_ogg))
+DEPS += $(patsubst %.o,%.d,$(OBJS_ogg_DEBUG))

+ 89 - 0
engine/compilers/Make-64bit/vorbis

@@ -0,0 +1,89 @@
+# I release this sample under the MIT license: free for any use, provided
+# you hold me harmless from any such use you make, and you retain my
+# copyright on the actual sources.
+# Copyright 2005 Jon Watte.
+
+LIBNAME := vorbis
+SOURCES := \
+../../lib/libvorbis/analysis.c \
+../../lib/libvorbis/barkmel.c \
+../../lib/libvorbis/bitrate.c \
+../../lib/libvorbis/block.c \
+../../lib/libvorbis/codebook.c \
+../../lib/libvorbis/envelope.c \
+../../lib/libvorbis/floor0.c \
+../../lib/libvorbis/floor1.c \
+../../lib/libvorbis/info.c \
+../../lib/libvorbis/lookup.c \
+../../lib/libvorbis/lpc.c \
+../../lib/libvorbis/lsp.c \
+../../lib/libvorbis/mapping0.c \
+../../lib/libvorbis/mdct.c \
+../../lib/libvorbis/psy.c \
+../../lib/libvorbis/registry.c \
+../../lib/libvorbis/res0.c \
+../../lib/libvorbis/sharedbook.c \
+../../lib/libvorbis/smallft.c \
+../../lib/libvorbis/synthesis.c \
+../../lib/libvorbis/tone.c \
+../../lib/libvorbis/vorbisenc.c \
+../../lib/libvorbis/vorbisfile.c \
+../../lib/libvorbis/window.c \
+
+LDFLAGS_vorbis := -g -m64
+
+CFLAGS_vorbis := -MMD -I. -m64 -msse -mmmx -march=x86-64
+
+CFLAGS_vorbis += -I../../lib/libvorbis
+CFLAGS_vorbis += -I../../lib/libvorbis/lib
+CFLAGS_vorbis += -I../../lib/libvorbis/include
+CFLAGS_vorbis += -I../../lib/libogg/include
+
+CFLAGS_vorbis += -DUNICODE
+CFLAGS_vorbis += -DLINUX
+
+CFLAGS_DEBUG_vorbis := $(CFLAGS_vorbis) -ggdb
+CFLAGS_DEBUG_vorbis += -DTORQUE_DEBUG
+CFLAGS_DEBUG_vorbis += -DTORQUE_DEBUG_GUARD
+CFLAGS_DEBUG_vorbis += -DTORQUE_NET_STATS
+
+CFLAGS_vorbis += -O3
+
+CC := gcc
+LD := gcc
+
+TARGET_vorbis := lib/libvorbis.a
+TARGET_vorbis_DEBUG := lib/libvorbis_DEBUG.a
+
+LIB_TARGETS += $(TARGET_vorbis)
+LIB_TARGETS_DEBUG += $(TARGET_vorbis_DEBUG)
+
+OBJS_vorbis := $(patsubst ../../lib/libvorbis/%,Release/vorbis/%.o,$(SOURCES))
+OBJS_vorbis_DEBUG := $(patsubst ../../lib/libvorbis/%,Debug/vorbis/%.o,$(SOURCES))
+
+# Deriving the variable name from the target name is the secret sauce
+# of the build system.
+#
+$(TARGET_vorbis):	$(OBJS_vorbis)
+	@mkdir -p $(dir $@)
+	ar cr $@ $(OBJS_vorbis)
+
+$(TARGET_vorbis_DEBUG):	$(OBJS_vorbis_DEBUG)
+	@mkdir -p $(dir $@)
+	ar cr $@ $(OBJS_vorbis_DEBUG)
+
+Release/vorbis/%.o:	../../lib/libvorbis/%
+	@mkdir -p $(dir $@)
+	$(CC) -c $(CFLAGS_vorbis) $< -o $@
+
+Debug/vorbis/%.o:	../../lib/libvorbis/%
+	@mkdir -p $(dir $@)
+	$(CC) -c $(CFLAGS_DEBUG_vorbis) $< -o $@
+
+release_vorbis: $(TARGET_vorbis)
+debug_vorbis: $(TARGET_vorbis_DEBUG)
+
+.PHONY: debug_vorbis release_vorbis
+
+DEPS += $(patsubst %.o,%.d,$(OBJS_vorbis))
+DEPS += $(patsubst %.o,%.d,$(OBJS_vorbis_DEBUG))

+ 76 - 0
engine/compilers/Make-64bit/zlib

@@ -0,0 +1,76 @@
+# I release this sample under the MIT license: free for any use, provided 
+# you hold me harmless from any such use you make, and you retain my 
+# copyright on the actual sources.
+# Copyright 2005 Jon Watte.
+
+LIBNAME := zlib
+SOURCES := ../../lib/zlib/adler32.c \
+../../lib/zlib/zutil.c \
+../../lib/zlib/crc32.c \
+../../lib/zlib/trees.c \
+../../lib/zlib/inflate.c \
+../../lib/zlib/inftrees.c \
+../../lib/zlib/gzclose.c \
+../../lib/zlib/gzread.c \
+../../lib/zlib/infback.c \
+../../lib/zlib/uncompr.c \
+../../lib/zlib/deflate.c \
+../../lib/zlib/inffast.c \
+../../lib/zlib/gzwrite.c \
+../../lib/zlib/compress.c \
+../../lib/zlib/gzlib.c \
+
+LDFLAGS_zlib := -g -m
+
+CFLAGS_zlib := -MMD -I. -m64 -msse -mmmx -march=x86-64
+
+CFLAGS_zlib += -I../../lib/zlib
+
+CFLAGS_zlib += -DUNICODE
+CFLAGS_zlib += -DLINUX
+
+CFLAGS_DEBUG_zlib := $(CFLAGS_zlib) -ggdb
+CFLAGS_DEBUG_zlib += -DTORQUE_DEBUG
+CFLAGS_DEBUG_zlib += -DTORQUE_DEBUG_GUARD
+CFLAGS_DEBUG_zlib += -DTORQUE_NET_STATS
+
+CFLAGS_zlib += -O3
+
+CC := gcc
+LD := gcc
+
+TARGET_zlib := lib/zlib.a
+TARGET_zlib_DEBUG := lib/zlib_DEBUG.a
+
+LIB_TARGETS += $(TARGET_zlib)
+LIB_TARGETS_DEBUG += $(TARGET_zlib_DEBUG)
+
+OBJS_zlib := $(patsubst ../../lib/zlib/%,Release/zlib/%.o,$(SOURCES))
+OBJS_zlib_DEBUG := $(patsubst ../../lib/zlib/%,Debug/zlib/%.o,$(SOURCES))
+
+# Deriving the variable name from the target name is the secret sauce 
+# of the build system.
+#
+$(TARGET_zlib):	$(OBJS_zlib)
+	@mkdir -p $(dir $@)
+	ar cr $@ $(OBJS_zlib)
+   
+$(TARGET_zlib_DEBUG):	$(OBJS_zlib_DEBUG)
+	@mkdir -p $(dir $@)
+	ar cr $@ $(OBJS_zlib_DEBUG)
+
+Release/zlib/%.o:	../../lib/zlib/%
+	@mkdir -p $(dir $@)
+	$(CC) -c $(CFLAGS_zlib) $< -o $@
+   
+Debug/zlib/%.o:	../../lib/zlib/%
+	@mkdir -p $(dir $@)
+	$(CC) -c $(CFLAGS_DEBUG_zlib) $< -o $@
+   
+release_zlib: $(TARGET_zlib)
+debug_zlib: $(TARGET_zlib_DEBUG)
+
+.PHONY: debug_zlib release_zlib
+
+DEPS += $(patsubst %.o,%.d,$(OBJS_zlib))
+DEPS += $(patsubst %.o,%.d,$(OBJS_zlib_DEBUG))

+ 0 - 492
engine/compilers/Make/Torque2D

@@ -1,492 +0,0 @@
-APPNAME := ../../../Torque2D
-
-SOURCES := ../../source/2d/assets/AnimationAsset.cc \
-	../../source/2d/assets/FontAsset.cc \
-	../../source/2d/assets/ImageAsset.cc \
-	../../source/2d/assets/ParticleAsset.cc \
-	../../source/2d/assets/ParticleAssetEmitter.cc \
-	../../source/2d/assets/ParticleAssetField.cc \
-	../../source/2d/assets/ParticleAssetFieldCollection.cc \
-	../../source/2d/assets/SkeletonAsset.cc \
-	../../source/2d/controllers/AmbientForceController.cc \
-	../../source/2d/controllers/BuoyancyController.cc \
-	../../source/2d/controllers/core/GroupedSceneController.cc \
-	../../source/2d/controllers/core/PickingSceneController.cc \
-	../../source/2d/controllers/PointForceController.cc \
-	../../source/2d/core/BatchRender.cc \
-	../../source/2d/core/CoreMath.cc \
-	../../source/2d/core/ImageFrameProvider.cc \
-	../../source/2d/core/ImageFrameProviderCore.cc \
-	../../source/2d/core/ParticleSystem.cc \
-	../../source/2d/core/RenderProxy.cc \
-	../../source/2d/core/SpriteBase.cc \
-	../../source/2d/core/SpriteBatch.cc \
-	../../source/2d/core/SpriteBatchItem.cc \
-	../../source/2d/core/SpriteBatchQuery.cc \
-	../../source/2d/core/Utility.cc \
-	../../source/2d/core/Vector2.cc \
-	../../source/2d/experimental/composites/WaveComposite.cc \
-	../../source/2d/gui/guiImageButtonCtrl.cc \
-	../../source/2d/gui/guiSceneObjectCtrl.cc \
-	../../source/2d/gui/guiSpriteCtrl.cc \
-	../../source/2d/gui/SceneWindow.cc \
-	../../source/2d/sceneobject/CompositeSprite.cc \
-	../../source/2d/sceneobject/ParticlePlayer.cc \
-	../../source/2d/sceneobject/SceneObject.cc \
-	../../source/2d/sceneobject/SceneObjectList.cc \
-	../../source/2d/sceneobject/SceneObjectSet.cc \
-	../../source/2d/sceneobject/Scroller.cc \
-	../../source/2d/sceneobject/ShapeVector.cc \
-	../../source/2d/sceneobject/SkeletonObject.cc \
-	../../source/2d/sceneobject/Sprite.cc \
-	../../source/2d/sceneobject/TextSprite.cc \
-	../../source/2d/sceneobject/Trigger.cc \
-	../../source/2d/scene/ContactFilter.cc \
-	../../source/2d/scene/DebugDraw.cc \
-	../../source/2d/scene/Scene.cc \
-	../../source/2d/scene/SceneRenderFactories.cpp \
-	../../source/2d/scene/SceneRenderQueue.cpp \
-	../../source/2d/scene/WorldQuery.cc \
-	../../source/algorithm/crc.cc \
-	../../source/algorithm/hashFunction.cc \
-	../../source/assets/assetBase.cc \
-	../../source/assets/assetFieldTypes.cc \
-	../../source/assets/assetManager.cc \
-	../../source/assets/assetQuery.cc \
-	../../source/assets/assetTagsManifest.cc \
-	../../source/assets/declaredAssets.cc \
-	../../source/assets/referencedAssets.cc \
-	../../source/audio/audio.cc \
-	../../source/audio/audioDataBlock.cc \
-	../../source/audio/audioDescriptions.cc \
-	../../source/audio/audio_ScriptBinding.cc \
-	../../source/audio/audioStreamSourceFactory.cc \
-	../../source/audio/wavStreamSource.cc \
-	../../source/audio/AudioAsset.cc \
-	../../source/audio/audioBuffer.cc \
-	../../source/audio/vorbisStreamSource.cc \
-	../../source/bitmapFont/BitmapFont.cc \
-	../../source/bitmapFont/BitmapFontCharacter.cc \
-	../../source/Box2D/Collision/b2BroadPhase.cpp \
-	../../source/Box2D/Collision/b2CollideCircle.cpp \
-	../../source/Box2D/Collision/b2CollideEdge.cpp \
-	../../source/Box2D/Collision/b2CollidePolygon.cpp \
-	../../source/Box2D/Collision/b2Collision.cpp \
-	../../source/Box2D/Collision/b2Distance.cpp \
-	../../source/Box2D/Collision/b2DynamicTree.cpp \
-	../../source/Box2D/Collision/b2TimeOfImpact.cpp \
-	../../source/Box2D/Collision/Shapes/b2ChainShape.cpp \
-	../../source/Box2D/Collision/Shapes/b2CircleShape.cpp \
-	../../source/Box2D/Collision/Shapes/b2EdgeShape.cpp \
-	../../source/Box2D/Collision/Shapes/b2PolygonShape.cpp \
-	../../source/Box2D/Common/b2BlockAllocator.cpp \
-	../../source/Box2D/Common/b2Draw.cpp \
-	../../source/Box2D/Common/b2FreeList.cpp \
-	../../source/Box2D/Common/b2Math.cpp \
-	../../source/Box2D/Common/b2Settings.cpp \
-	../../source/Box2D/Common/b2StackAllocator.cpp \
-	../../source/Box2D/Common/b2Timer.cpp \
-	../../source/Box2D/Common/b2TrackedBlock.cpp \
-	../../source/Box2D/Dynamics/b2Body.cpp \
-	../../source/Box2D/Dynamics/b2ContactManager.cpp \
-	../../source/Box2D/Dynamics/b2Fixture.cpp \
-	../../source/Box2D/Dynamics/b2Island.cpp \
-	../../source/Box2D/Dynamics/b2World.cpp \
-	../../source/Box2D/Dynamics/b2WorldCallbacks.cpp \
-	../../source/Box2D/Dynamics/Contacts/b2ChainAndCircleContact.cpp \
-	../../source/Box2D/Dynamics/Contacts/b2ChainAndPolygonContact.cpp \
-	../../source/Box2D/Dynamics/Contacts/b2CircleContact.cpp \
-	../../source/Box2D/Dynamics/Contacts/b2Contact.cpp \
-	../../source/Box2D/Dynamics/Contacts/b2ContactSolver.cpp \
-	../../source/Box2D/Dynamics/Contacts/b2EdgeAndCircleContact.cpp \
-	../../source/Box2D/Dynamics/Contacts/b2EdgeAndPolygonContact.cpp \
-	../../source/Box2D/Dynamics/Contacts/b2PolygonAndCircleContact.cpp \
-	../../source/Box2D/Dynamics/Contacts/b2PolygonContact.cpp \
-	../../source/Box2D/Dynamics/Joints/b2DistanceJoint.cpp \
-	../../source/Box2D/Dynamics/Joints/b2FrictionJoint.cpp \
-	../../source/Box2D/Dynamics/Joints/b2GearJoint.cpp \
-	../../source/Box2D/Dynamics/Joints/b2Joint.cpp \
-	../../source/Box2D/Dynamics/Joints/b2MotorJoint.cpp \
-	../../source/Box2D/Dynamics/Joints/b2MouseJoint.cpp \
-	../../source/Box2D/Dynamics/Joints/b2PrismaticJoint.cpp \
-	../../source/Box2D/Dynamics/Joints/b2PulleyJoint.cpp \
-	../../source/Box2D/Dynamics/Joints/b2RevoluteJoint.cpp \
-	../../source/Box2D/Dynamics/Joints/b2RopeJoint.cpp \
-	../../source/Box2D/Dynamics/Joints/b2WeldJoint.cpp \
-	../../source/Box2D/Dynamics/Joints/b2WheelJoint.cpp \
-	../../source/Box2D/Particle/b2Particle.cpp \
-	../../source/Box2D/Particle/b2ParticleAssembly.cpp \
-	../../source/Box2D/Particle/b2ParticleGroup.cpp \
-	../../source/Box2D/Particle/b2ParticleSystem.cpp \
-	../../source/Box2D/Particle/b2VoronoiDiagram.cpp \
-	../../source/Box2D/Rope/b2Rope.cpp \
-	../../source/collection/bitTables.cc \
-	../../source/collection/hashTable.cc \
-	../../source/collection/nameTags.cpp \
-	../../source/collection/undo.cc \
-	../../source/collection/vector.cc \
-	../../source/console/consoleBaseType.cc \
-	../../source/console/consoleDictionary.cc \
-	../../source/console/consoleExprEvalState.cc \
-	../../source/console/consoleNamespace.cc \
-	../../source/console/ConsoleTypeValidators.cc \
-	../../source/console/metaScripting_ScriptBinding.cc \
-	../../source/debug/profiler.cc \
-	../../source/debug/remote/RemoteDebugger1.cc \
-	../../source/debug/remote/RemoteDebuggerBase.cc \
-	../../source/debug/remote/RemoteDebuggerBridge.cc \
-	../../source/debug/telnetDebugger.cc \
-	../../source/delegates/delegateSignal.cpp \
-	../../source/game/defaultGame.cc \
-	../../source/game/gameInterface.cc \
-	../../source/graphics/bitmapBmp.cc \
-	../../source/graphics/bitmapJpeg.cc \
-	../../source/graphics/bitmapPng.cc \
-	../../source/graphics/color.cc \
-	../../source/graphics/dgl.cc \
-	../../source/graphics/dglMatrix.cc \
-	../../source/graphics/DynamicTexture.cc \
-	../../source/graphics/gBitmap.cc \
-	../../source/graphics/gFont.cc \
-	../../source/graphics/gPalette.cc \
-	../../source/graphics/PNGImage.cpp \
-	../../source/graphics/splineUtil.cc \
-	../../source/graphics/TextureDictionary.cc \
-	../../source/graphics/TextureHandle.cc \
-	../../source/graphics/TextureManager.cc \
-	../../source/gui/containers/guiGridCtrl.cc \
-	../../source/gui/guiArrayCtrl.cc \
-	../../source/gui/guiBackgroundCtrl.cc \
-	../../source/gui/guiBitmapBorderCtrl.cc \
-	../../source/gui/guiBitmapCtrl.cc \
-	../../source/gui/guiBubbleTextCtrl.cc \
-	../../source/gui/guiCanvas.cc \
-	../../source/gui/guiColorPicker.cc \
-	../../source/gui/guiConsole.cc \
-	../../source/gui/guiConsoleEditCtrl.cc \
-	../../source/gui/guiConsoleTextCtrl.cc \
-	../../source/gui/guiControl.cc \
-	../../source/gui/guiDefaultControlRender.cc \
-	../../source/gui/guiFadeinBitmapCtrl.cc \
-	../../source/gui/guiInputCtrl.cc \
-	../../source/gui/guiListBoxCtrl.cc \
-	../../source/gui/guiMessageVectorCtrl.cc \
-	../../source/gui/guiMLTextCtrl.cc \
-	../../source/gui/guiMLTextEditCtrl.cc \
-	../../source/gui/guiMouseEventCtrl.cc \
-	../../source/gui/guiPopUpCtrl.cc \
-	../../source/gui/guiPopUpCtrlEx.cc \
-	../../source/gui/guiProgressCtrl.cc \
-	../../source/gui/guiScriptNotifyControl.cc \
-	../../source/gui/guiSliderCtrl.cc \
-	../../source/gui/guiTabPageCtrl.cc \
-	../../source/gui/guiTextCtrl.cc \
-	../../source/gui/guiTextEditCtrl.cc \
-	../../source/gui/guiTextEditSliderCtrl.cc \
-	../../source/gui/guiTextListCtrl.cc \
-	../../source/gui/guiTickCtrl.cc \
-	../../source/gui/guiTreeViewCtrl.cc \
-	../../source/gui/guiTypes.cc \
-	../../source/gui/language/lang.cc \
-	../../source/gui/messageVector.cc \
-	../../source/input/actionMap.cc \
-	../../source/io/byteBuffer.cpp \
-	../../source/io/bitStream.cc \
-	../../source/io/bufferStream.cc \
-	../../source/io/fileObject.cc \
-	../../source/io/fileStream.cc \
-	../../source/io/fileStreamObject.cc \
-	../../source/io/fileSystem_ScriptBinding.cc \
-	../../source/io/filterStream.cc \
-	../../source/io/memStream.cc \
-	../../source/io/nStream.cc \
-	../../source/io/resizeStream.cc \
-	../../source/io/resource/resourceDictionary.cc \
-	../../source/io/resource/resourceManager.cc \
-	../../source/io/streamObject.cc \
-	../../source/io/zip/centralDir.cc \
-	../../source/io/zip/compressor.cc \
-	../../source/io/zip/deflate.cc \
-	../../source/io/zip/extraField.cc \
-	../../source/io/zip/fileHeader.cc \
-	../../source/io/zip/stored.cc \
-	../../source/io/zip/zipArchive.cc \
-	../../source/io/zip/zipCryptStream.cc \
-	../../source/io/zip/zipObject.cc \
-	../../source/io/zip/zipSubStream.cc \
-	../../source/io/zip/zipTempStream.cc \
-	../../source/math/rectClipper.cpp \
-	../../source/memory/dataChunker.cc \
-	../../source/memory/frameAllocator_ScriptBinding.cc \
-	../../source/messaging/dispatcher.cc \
-	../../source/messaging/eventManager.cc \
-	../../source/messaging/message.cc \
-	../../source/messaging/messageForwarder.cc \
-	../../source/messaging/scriptMsgListener.cc \
-	../../source/module/moduleDefinition.cc \
-	../../source/module/moduleManager.cc \
-	../../source/module/moduleMergeDefinition.cc \
-	../../source/network/connectionProtocol.cc \
-	../../source/network/connectionStringTable.cc \
-	../../source/network/httpObject.cc \
-	../../source/network/netConnection.cc \
-	../../source/network/netDownload.cc \
-	../../source/network/netEvent.cc \
-	../../source/network/netGhost.cc \
-	../../source/network/netInterface.cc \
-	../../source/network/netObject.cc \
-	../../source/network/netStringTable.cc \
-	../../source/network/netTest.cc \
-	../../source/network/networkProcessList.cc \
-	../../source/network/RemoteCommandEvent.cc \
-	../../source/network/serverQuery.cc \
-	../../source/network/tcpObject.cc \
-	../../source/network/telnetConsole.cc \
-	../../source/persistence/taml/binary/tamlBinaryReader.cc \
-	../../source/persistence/taml/binary/tamlBinaryWriter.cc \
-	../../source/persistence/taml/json/tamlJSONParser.cc \
-	../../source/persistence/taml/json/tamlJSONReader.cc \
-	../../source/persistence/taml/json/tamlJSONWriter.cc \
-	../../source/persistence/taml/taml.cc \
-	../../source/persistence/taml/tamlCustom.cc \
-	../../source/persistence/taml/tamlWriteNode.cc \
-	../../source/persistence/taml/xml/tamlXmlParser.cc \
-	../../source/persistence/taml/xml/tamlXmlReader.cc \
-	../../source/persistence/taml/xml/tamlXmlWriter.cc \
-	../../source/persistence/tinyXML/tinystr.cpp \
-	../../source/persistence/tinyXML/tinyxml.cpp \
-	../../source/persistence/tinyXML/tinyxmlerror.cpp \
-	../../source/persistence/tinyXML/tinyxmlparser.cpp \
-	../../source/component/dynamicConsoleMethodComponent.cpp \
-	../../source/component/simComponent.cpp \
-	../../source/component/behaviors/behaviorComponent.cpp \
-	../../source/component/behaviors/behaviorInstance.cpp \
-	../../source/component/behaviors/behaviorTemplate.cpp \
-	../../source/console/astAlloc.cc \
-	../../source/console/astNodes.cc \
-	../../source/console/cmdgram.cc \
-	../../source/console/CMDscan.cc \
-	../../source/console/codeBlock.cc \
-	../../source/console/compiledEval.cc \
-	../../source/console/compiler.cc \
-	../../source/console/console.cc \
-	../../source/console/consoleDoc.cc \
-	../../source/console/consoleFunctions.cc \
-	../../source/console/consoleLogger.cc \
-	../../source/console/consoleObject.cc \
-	../../source/console/consoleParser.cc \
-	../../source/console/consoleTypes.cc \
-	../../source/game/gameConnection.cc \
-	../../source/game/version.cc \
-	../../source/math/math_ScriptBinding.cc \
-	../../source/math/mathTypes.cc \
-	../../source/math/mathUtils.cc \
-	../../source/math/mBox.cc \
-	../../source/math/mMath_C.cc \
-	../../source/math/mMathAltivec.cc \
-	../../source/math/mMathAMD.cc \
-	../../source/math/mMathAMD_ASM.asm \
-	../../source/math/mMathSSE.cc \
-	../../source/math/mMathSSE_ASM.asm \
-	../../source/math/mMath_ASM.asm \
-	../../source/math/mMathFn.cc \
-	../../source/math/mMatrix.cc \
-	../../source/math/mPlaneTransformer.cc \
-	../../source/math/mPoint.cpp \
-	../../source/math/mQuadPatch.cc \
-	../../source/math/mQuat.cc \
-	../../source/math/mRandom.cc \
-	../../source/math/mSolver.cc \
-	../../source/math/mSplinePatch.cc \
-	../../source/persistence/SimXMLDocument.cpp \
-	../../source/platform/CursorManager.cc \
-	../../source/platform/platformCPUInfo.asm \
-	../../source/platform/nativeDialogs/fileDialog.cc \
-	../../source/platform/platform.cc \
-	../../source/platform/platformAssert.cc \
-	../../source/platform/platformCPU.cc \
-	../../source/platform/platformFileIO.cc \
-	../../source/platform/platformFont.cc \
-	../../source/platform/platformMemory.cc \
-	../../source/platform/platformNet.cpp \
-	../../source/platform/platformNetAsync.cpp \
-	../../source/platform/platformNet_ScriptBinding.cc \
-	../../source/platform/platformString.cc \
-	../../source/platform/platformVideo.cc \
-	../../source/platform/menus/popupMenu.cc \
-	../../source/platform/nativeDialogs/msgBox.cpp \
-	../../source/platform/Tickable.cc \
-	../../source/platformX86UNIX/x86UNIXAsmBlit.cc \
-	../../source/platformX86UNIX/x86UNIXConsole.cc \
-	../../source/platformX86UNIX/x86UNIXCPUInfo.cc \
-	../../source/platformX86UNIX/x86UNIXFileio.cc \
-	../../source/platformX86UNIX/x86UNIXFont.cc \
-	../../source/platformX86UNIX/x86UNIXGL.cc \
-	../../source/platformX86UNIX/x86UNIXInput.cc \
-	../../source/platformX86UNIX/x86UNIXInputManager.cc \
-	../../source/platformX86UNIX/x86UNIXIO.cc \
-	../../source/platformX86UNIX/x86UNIXMath.cc \
-	../../source/platformX86UNIX/x86UNIXMath_ASM.cc \
-	../../source/platformX86UNIX/x86UNIXMemory.cc \
-	../../source/platformX86UNIX/x86UNIXMessageBox.cc \
-	../../source/platformX86UNIX/x86UNIXMutex.cc \
-	../../source/platformX86UNIX/x86UNIXOGLVideo.cc \
-	../../source/platformX86UNIX/x86UNIXOpenAL.cc \
-	../../source/platformX86UNIX/x86UNIXProcessControl.cc \
-	../../source/platformX86UNIX/x86UNIXSemaphore.cc \
-	../../source/platformX86UNIX/x86UNIXStrings.cc \
-	../../source/platformX86UNIX/x86UNIXThread.cc \
-	../../source/platformX86UNIX/x86UNIXTime.cc \
-	../../source/platformX86UNIX/x86UNIXUtils.cc \
-	../../source/platformX86UNIX/x86UNIXWindow.cc \
-	../../source/platformX86UNIX/x86UNIXPopupMenu.cc \
-	../../source/platformX86UNIX/x86UNIXDialogs.cc \
-	../../source/sim/scriptGroup.cc \
-	../../source/sim/scriptObject.cc \
-	../../source/sim/simBase.cc \
-	../../source/sim/simConsoleEvent.cc \
-	../../source/sim/simConsoleThreadExecEvent.cc \
-	../../source/sim/simDatablock.cc \
-	../../source/sim/simDictionary.cc \
-	../../source/sim/simFieldDictionary.cc \
-	../../source/sim/simManager.cc \
-	../../source/sim/simObject.cc \
-	../../source/sim/SimObjectList.cc \
-	../../source/sim/simSerialize.cpp \
-	../../source/sim/simSet.cc \
-	../../source/spine/Animation.c \
-	../../source/spine/AnimationState.c \
-	../../source/spine/AnimationStateData.c \
-	../../source/spine/Atlas.c \
-	../../source/spine/AtlasAttachmentLoader.c \
-	../../source/spine/Attachment.c \
-	../../source/spine/AttachmentLoader.c \
-	../../source/spine/Bone.c \
-	../../source/spine/BoneData.c \
-	../../source/spine/BoundingBoxAttachment.c \
-	../../source/spine/Event.c \
-	../../source/spine/EventData.c \
-	../../source/spine/extension.c \
-	../../source/spine/Json.c \
-	../../source/spine/RegionAttachment.c \
-	../../source/spine/Skeleton.c \
-	../../source/spine/SkeletonBounds.c \
-	../../source/spine/SkeletonData.c \
-	../../source/spine/SkeletonJson.c \
-	../../source/spine/Skin.c \
-	../../source/spine/Slot.c \
-	../../source/spine/SlotData.c \
-	../../source/string/findMatch.cc \
-	../../source/string/stringBuffer.cc \
-	../../source/string/stringStack.cc \
-	../../source/string/stringTable.cc \
-	../../source/string/stringUnit.cpp \
-	../../source/string/unicode.cc \
-	../../source/gui/buttons/guiBitmapButtonCtrl.cc \
-	../../source/gui/buttons/guiBorderButton.cc \
-	../../source/gui/buttons/guiButtonBaseCtrl.cc \
-	../../source/gui/buttons/guiButtonCtrl.cc \
-	../../source/gui/buttons/guiCheckBoxCtrl.cc \
-	../../source/gui/buttons/guiIconButtonCtrl.cc \
-	../../source/gui/buttons/guiRadioCtrl.cc \
-	../../source/gui/buttons/guiToolboxButtonCtrl.cc \
-	../../source/gui/containers/guiAutoScrollCtrl.cc \
-	../../source/gui/containers/guiCtrlArrayCtrl.cc \
-	../../source/gui/containers/guiDragAndDropCtrl.cc \
-	../../source/gui/containers/guiDynamicCtrlArrayCtrl.cc \
-	../../source/gui/containers/guiFormCtrl.cc \
-	../../source/gui/containers/guiFrameCtrl.cc \
-	../../source/gui/containers/guiPaneCtrl.cc \
-	../../source/gui/containers/guiRolloutCtrl.cc \
-	../../source/gui/containers/guiScrollCtrl.cc \
-	../../source/gui/containers/guiStackCtrl.cc \
-	../../source/gui/containers/guiTabBookCtrl.cc \
-	../../source/gui/containers/guiWindowCtrl.cc \
-	../../source/gui/editor/guiControlListPopup.cc \
-	../../source/gui/editor/guiDebugger.cc \
-	../../source/gui/editor/guiEditCtrl.cc \
-	../../source/gui/editor/guiFilterCtrl.cc \
-	../../source/gui/editor/guiGraphCtrl.cc \
-	../../source/gui/editor/guiImageList.cc \
-	../../source/gui/editor/guiInspector.cc \
-	../../source/gui/editor/guiInspectorTypes.cc \
-	../../source/gui/editor/guiMenuBar.cc \
-	../../source/gui/editor/guiSeparatorCtrl.cc
-
-LDFLAGS := -g -m32
-LDLIBS := -lstdc++ -lm -ldl -lpthread -lrt -lX11 -lXft -lSDL -lopenal
-
-CFLAGS := -std=gnu++11 -MMD -I. -Wfatal-errors -Wunused -m32 -msse -march=i686 -pipe
-
-CFLAGS += -I/usr/include
-CFLAGS += -I/usr/include/freetype2
-CFLAGS += -I../../source
-CFLAGS += -I../../source/persistence/rapidjson/include
-CFLAGS += -I../../lib/ljpeg
-CFLAGS += -I../../lib/zlib
-CFLAGS += -I../../lib/lpng
-CFLAGS += -I../../lib/freetype
-CFLAGS += -I../../lib/libvorbis/include
-CFLAGS += -I../../lib/libogg/include
-
-CFLAGS += -DLINUX
-
-CFLAGS_DEBUG := $(CFLAGS) -ggdb
-CFLAGS_DEBUG += -DTORQUE_DEBUG
-CFLAGS_DEBUG += -DTORQUE_DEBUG_GUARD
-CFLAGS_DEBUG += -DTORQUE_NET_STATS
-
-CFLAGS += -O0
-
-NASMFLAGS := -f elf -D LINUX
-
-CC := gcc
-LD := gcc
-
-APP_TARGETS += $(APPNAME)
-APP_TARGETS_DEBUG += $(APPNAME)_DEBUG
-
-OBJS := $(patsubst ../../source/%,Release/%.o,$(SOURCES))
-OBJS := $(filter %.o, $(OBJS))
-
-OBJS_DEBUG := $(patsubst ../../source/%,Debug/%.o,$(SOURCES))
-OBJS_DEBUG := $(filter %.o,$(OBJS_DEBUG))
-
-$(APP_TARGETS): $(OBJS) $(LIB_TARGETS)
-	@echo Linking release
-	$(LD) $(LDFLAGS) -o $@ $(OBJS) $(LIB_TARGETS) $(LDLIBS)
-
-$(APP_TARGETS_DEBUG): $(OBJS_DEBUG) $(LIB_TARGETS_DEBUG)
-	@echo Linking debug
-	$(LD) $(LDFLAGS) -o $@ $(OBJS_DEBUG) $(LIB_TARGETS_DEBUG) $(LDLIBS)
-
-Release/%.asm.o:	../../source/%.asm
-	@echo Building release asm $@
-	@mkdir -p $(dir $@)
-	nasm $(NASMFLAGS) $< -o $@
-
-Release/%.o:	../../source/%
-	@echo Building release object $@
-	@mkdir -p $(dir $@)
-	$(CC) -c $(CFLAGS) $< -o $@
-
-Debug/%.asm.o:	../../source/%.asm
-	@echo Building debug asm $@
-	@mkdir -p $(dir $@)
-	nasm $(NASMFLAGS) $< -o $@
-
-Debug/%.o:	../../source/%
-	@echo Building debug object $@
-	@mkdir -p $(dir $@)
-	$(CC) -c $(CFLAGS_DEBUG) $< -o $@
-
-release: $(APP_TARGETS)
-debug: $(APP_TARGETS_DEBUG)
-
-.PHONY: $(APP_TARGETS) $(APP_TARGETS_DEBUG)
-
-DEPS += $(patsubst %.o,%.d,$(OBJS))
-DEPS += $(patsubst %.o,%.d,$(OBJS_DEBUG))
-
-APPNAME :=
-SOURCES :=

+ 16 - 8
engine/compilers/VisualStudio 2017/Torque 2D.sln

@@ -37,40 +37,48 @@ Global
 		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Debug|x64.Build.0 = Debug|x64
 		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Release|Win32.ActiveCfg = Release|Win32
 		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Release|Win32.Build.0 = Release|Win32
-		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Release|x64.ActiveCfg = Release|Win32
+		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Release|x64.ActiveCfg = Release|x64
+		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Release|x64.Build.0 = Release|x64
 		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Shipping|Win32.ActiveCfg = Shipping|Win32
 		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Shipping|Win32.Build.0 = Shipping|Win32
-		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Shipping|x64.ActiveCfg = Shipping|Win32
+		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Shipping|x64.ActiveCfg = Shipping|x64
+		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Shipping|x64.Build.0 = Shipping|x64
 		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Debug|Win32.ActiveCfg = Debug|Win32
 		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Debug|Win32.Build.0 = Debug|Win32
 		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Debug|x64.ActiveCfg = Debug|x64
 		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Debug|x64.Build.0 = Debug|x64
 		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Release|Win32.ActiveCfg = Release|Win32
 		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Release|Win32.Build.0 = Release|Win32
-		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Release|x64.ActiveCfg = Release|Win32
+		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Release|x64.ActiveCfg = Release|x64
+		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Release|x64.Build.0 = Release|x64
 		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Shipping|Win32.ActiveCfg = Shipping|Win32
 		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Shipping|Win32.Build.0 = Shipping|Win32
-		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Shipping|x64.ActiveCfg = Shipping|Win32
+		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Shipping|x64.ActiveCfg = Shipping|x64
+		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Shipping|x64.Build.0 = Shipping|x64
 		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Debug|Win32.ActiveCfg = Debug|Win32
 		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Debug|Win32.Build.0 = Debug|Win32
 		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Debug|x64.ActiveCfg = Debug|x64
 		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Debug|x64.Build.0 = Debug|x64
 		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Release|Win32.ActiveCfg = Release|Win32
 		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Release|Win32.Build.0 = Release|Win32
-		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Release|x64.ActiveCfg = Release|Win32
+		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Release|x64.ActiveCfg = Release|x64
+		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Release|x64.Build.0 = Release|x64
 		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Shipping|Win32.ActiveCfg = Shipping|Win32
 		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Shipping|Win32.Build.0 = Shipping|Win32
-		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Shipping|x64.ActiveCfg = Shipping|Win32
+		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Shipping|x64.ActiveCfg = Shipping|x64
+		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Shipping|x64.Build.0 = Shipping|x64
 		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Debug|Win32.ActiveCfg = Debug|Win32
 		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Debug|Win32.Build.0 = Debug|Win32
 		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Debug|x64.ActiveCfg = Debug|x64
 		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Debug|x64.Build.0 = Debug|x64
 		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Release|Win32.ActiveCfg = Release|Win32
 		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Release|Win32.Build.0 = Release|Win32
-		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Release|x64.ActiveCfg = Release|Win32
+		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Release|x64.ActiveCfg = Release|x64
+		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Release|x64.Build.0 = Release|x64
 		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Shipping|Win32.ActiveCfg = Shipping|Win32
 		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Shipping|Win32.Build.0 = Shipping|Win32
-		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Shipping|x64.ActiveCfg = Shipping|Win32
+		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Shipping|x64.ActiveCfg = Shipping|x64
+		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Shipping|x64.Build.0 = Shipping|x64
 		{15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Debug|Win32.ActiveCfg = Debug|Win32
 		{15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Debug|Win32.Build.0 = Debug|Win32
 		{15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Debug|x64.ActiveCfg = Debug|x64

+ 12 - 11
engine/compilers/VisualStudio 2017/Torque 2D.vcxproj

@@ -30,7 +30,7 @@
     <ProjectGuid>{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}</ProjectGuid>
     <RootNamespace>TorqueGame</RootNamespace>
     <ProjectName>Torque2D</ProjectName>
-    <WindowsTargetPlatformVersion>10.0.18362.0</WindowsTargetPlatformVersion>
+    <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
@@ -143,6 +143,7 @@
       <WarningLevel>Level3</WarningLevel>
       <DisableSpecificWarnings>4800;4100;4127;4512</DisableSpecificWarnings>
       <ShowIncludes>false</ShowIncludes>
+      <LanguageStandard>stdcpp14</LanguageStandard>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -192,6 +193,7 @@
       <DisableSpecificWarnings>4800;4100;4127;4512</DisableSpecificWarnings>
       <ShowIncludes>false</ShowIncludes>
       <FunctionLevelLinking>true</FunctionLevelLinking>
+      <LanguageStandard>stdcpp14</LanguageStandard>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -241,6 +243,7 @@
       <CompileAs>CompileAsCpp</CompileAs>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <DisableSpecificWarnings>4800;4100;4127;4512</DisableSpecificWarnings>
+      <LanguageStandard>stdcpp14</LanguageStandard>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -301,6 +304,7 @@
       <CompileAs>CompileAsCpp</CompileAs>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <DisableSpecificWarnings>4800;4100;4127;4512</DisableSpecificWarnings>
+      <LanguageStandard>stdcpp14</LanguageStandard>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -360,6 +364,7 @@
       <CompileAs>CompileAsCpp</CompileAs>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <DisableSpecificWarnings>4800;4100;4127;4512</DisableSpecificWarnings>
+      <LanguageStandard>stdcpp14</LanguageStandard>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -420,6 +425,7 @@
       <CompileAs>CompileAsCpp</CompileAs>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <DisableSpecificWarnings>4800;4100;4127;4512</DisableSpecificWarnings>
+      <LanguageStandard>stdcpp14</LanguageStandard>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -506,6 +512,7 @@
     <ClCompile Include="..\..\source\2d\scene\WorldQuery.cc" />
     <ClCompile Include="..\..\source\algorithm\crc.cc" />
     <ClCompile Include="..\..\source\algorithm\hashFunction.cc" />
+    <ClCompile Include="..\..\source\algorithm\Perlin.cc" />
     <ClCompile Include="..\..\source\assets\assetBase.cc" />
     <ClCompile Include="..\..\source\assets\assetFieldTypes.cc" />
     <ClCompile Include="..\..\source\assets\assetManager.cc" />
@@ -628,9 +635,6 @@
     <ClCompile Include="..\..\source\gui\guiInputCtrl.cc" />
     <ClCompile Include="..\..\source\gui\guiListBoxCtrl.cc" />
     <ClCompile Include="..\..\source\gui\guiMessageVectorCtrl.cc" />
-    <ClCompile Include="..\..\source\gui\guiMLTextCtrl.cc" />
-    <ClCompile Include="..\..\source\gui\guiMLTextEditCtrl.cc" />
-    <ClCompile Include="..\..\source\gui\guiMouseEventCtrl.cc" />
     <ClCompile Include="..\..\source\gui\guiProgressCtrl.cc" />
     <ClCompile Include="..\..\source\gui\guiSliderCtrl.cc" />
     <ClCompile Include="..\..\source\gui\guiTextEditCtrl.cc" />
@@ -668,6 +672,7 @@
     <ClCompile Include="..\..\source\math\math_ScriptBinding.cc" />
     <ClCompile Include="..\..\source\math\mFluid.cpp" />
     <ClCompile Include="..\..\source\math\mPoint.cpp" />
+    <ClCompile Include="..\..\source\math\noise\NoiseGenerator.cc" />
     <ClCompile Include="..\..\source\math\rectClipper.cpp" />
     <ClCompile Include="..\..\source\memory\dataChunker.cc" />
     <ClCompile Include="..\..\source\memory\frameAllocator_ScriptBinding.cc" />
@@ -824,13 +829,11 @@
     <ClCompile Include="..\..\source\gui\buttons\guiRadioCtrl.cc" />
     <ClCompile Include="..\..\source\gui\containers\guiDragAndDropCtrl.cc" />
     <ClCompile Include="..\..\source\gui\containers\guiPanelCtrl.cc" />
-    <ClCompile Include="..\..\source\gui\containers\guiRolloutCtrl.cc" />
     <ClCompile Include="..\..\source\gui\containers\guiScrollCtrl.cc" />
     <ClCompile Include="..\..\source\gui\containers\guiTabBookCtrl.cc" />
     <ClCompile Include="..\..\source\gui\containers\guiWindowCtrl.cc" />
     <ClCompile Include="..\..\source\gui\editor\guiDebugger.cc" />
     <ClCompile Include="..\..\source\gui\editor\guiEditCtrl.cc" />
-    <ClCompile Include="..\..\source\gui\editor\guiFilterCtrl.cc" />
     <ClCompile Include="..\..\source\gui\editor\guiGraphCtrl.cc" />
     <ClCompile Include="..\..\source\gui\editor\guiInspector.cc" />
     <ClCompile Include="..\..\source\gui\editor\guiInspectorTypes.cc" />
@@ -933,6 +936,7 @@
     <ClInclude Include="..\..\source\algorithm\crctab.h" />
     <ClInclude Include="..\..\source\algorithm\hashFunction.h" />
     <ClInclude Include="..\..\source\algorithm\md5.h" />
+    <ClInclude Include="..\..\source\algorithm\Perlin.h" />
     <ClInclude Include="..\..\source\assets\assetBase.h" />
     <ClInclude Include="..\..\source\assets\assetBase_ScriptBinding.h" />
     <ClInclude Include="..\..\source\assets\assetDefinition.h" />
@@ -1128,9 +1132,6 @@
     <ClInclude Include="..\..\source\gui\guiListBoxCtrl.h" />
     <ClInclude Include="..\..\source\gui\guiListBoxCtrl_ScriptBinding.h" />
     <ClInclude Include="..\..\source\gui\guiMessageVectorCtrl.h" />
-    <ClInclude Include="..\..\source\gui\guiMLTextCtrl.h" />
-    <ClInclude Include="..\..\source\gui\guiMLTextEditCtrl.h" />
-    <ClInclude Include="..\..\source\gui\guiMouseEventCtrl.h" />
     <ClInclude Include="..\..\source\gui\guiProgressCtrl.h" />
     <ClInclude Include="..\..\source\gui\guiProgressCtrl_ScriptBinding.h" />
     <ClInclude Include="..\..\source\gui\guiSliderCtrl.h" />
@@ -1175,6 +1176,8 @@
     <ClInclude Include="..\..\source\math\matrix_ScriptBinding.h" />
     <ClInclude Include="..\..\source\math\mFluid.h" />
     <ClInclude Include="..\..\source\math\mNormalDistribution.h" />
+    <ClInclude Include="..\..\source\math\noise\NoiseGenerator.h" />
+    <ClInclude Include="..\..\source\math\noise\NoiseGenerator_ScriptBinding.h" />
     <ClInclude Include="..\..\source\math\random_ScriptBinding.h" />
     <ClInclude Include="..\..\source\math\rectClipper.h" />
     <ClInclude Include="..\..\source\math\vector_ScriptBinding.h" />
@@ -1408,13 +1411,11 @@
     <ClInclude Include="..\..\source\gui\buttons\guiRadioCtrl.h" />
     <ClInclude Include="..\..\source\gui\containers\guiDragAndDropCtrl.h" />
     <ClInclude Include="..\..\source\gui\containers\guiPanelCtrl.h" />
-    <ClInclude Include="..\..\source\gui\containers\guiRolloutCtrl.h" />
     <ClInclude Include="..\..\source\gui\containers\guiScrollCtrl.h" />
     <ClInclude Include="..\..\source\gui\containers\guiTabBookCtrl.h" />
     <ClInclude Include="..\..\source\gui\containers\guiWindowCtrl.h" />
     <ClInclude Include="..\..\source\gui\editor\guiDebugger.h" />
     <ClInclude Include="..\..\source\gui\editor\guiEditCtrl.h" />
-    <ClInclude Include="..\..\source\gui\editor\guiFilterCtrl.h" />
     <ClInclude Include="..\..\source\gui\editor\guiGraphCtrl.h" />
     <ClInclude Include="..\..\source\gui\editor\guiInspector.h" />
     <ClInclude Include="..\..\source\gui\editor\guiInspectorTypes.h" />

+ 18 - 30
engine/compilers/VisualStudio 2017/Torque 2D.vcxproj.filters

@@ -202,6 +202,9 @@
     <Filter Include="2d\editorToy">
       <UniqueIdentifier>{598766e4-7dc1-45b8-8acf-f133f4fced82}</UniqueIdentifier>
     </Filter>
+    <Filter Include="math\noise">
+      <UniqueIdentifier>{1ca99a8e-9e94-4ab8-996e-b4835a603512}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\..\source\audio\audio.cc">
@@ -465,9 +468,6 @@
     <ClCompile Include="..\..\source\gui\containers\guiDragAndDropCtrl.cc">
       <Filter>gui\containers</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\source\gui\containers\guiRolloutCtrl.cc">
-      <Filter>gui\containers</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\source\gui\containers\guiScrollCtrl.cc">
       <Filter>gui\containers</Filter>
     </ClCompile>
@@ -483,9 +483,6 @@
     <ClCompile Include="..\..\source\gui\editor\guiEditCtrl.cc">
       <Filter>gui\editor</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\source\gui\editor\guiFilterCtrl.cc">
-      <Filter>gui\editor</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\source\gui\editor\guiGraphCtrl.cc">
       <Filter>gui\editor</Filter>
     </ClCompile>
@@ -756,15 +753,6 @@
     <ClCompile Include="..\..\source\gui\guiMessageVectorCtrl.cc">
       <Filter>gui</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\source\gui\guiMLTextCtrl.cc">
-      <Filter>gui</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\source\gui\guiMLTextEditCtrl.cc">
-      <Filter>gui</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\source\gui\guiMouseEventCtrl.cc">
-      <Filter>gui</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\source\gui\guiProgressCtrl.cc">
       <Filter>gui</Filter>
     </ClCompile>
@@ -1342,6 +1330,12 @@
     <ClCompile Include="..\..\source\gui\editor\guiParticleGraphInspector.cc">
       <Filter>gui\editor</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\source\algorithm\Perlin.cc">
+      <Filter>algorithm</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\math\noise\NoiseGenerator.cc">
+      <Filter>math\noise</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\source\audio\audio.h">
@@ -1626,9 +1620,6 @@
     <ClInclude Include="..\..\source\gui\containers\guiDragAndDropCtrl.h">
       <Filter>gui\containers</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\source\gui\containers\guiRolloutCtrl.h">
-      <Filter>gui\containers</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\source\gui\containers\guiScrollCtrl.h">
       <Filter>gui\containers</Filter>
     </ClInclude>
@@ -1644,9 +1635,6 @@
     <ClInclude Include="..\..\source\gui\editor\guiEditCtrl.h">
       <Filter>gui\editor</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\source\gui\editor\guiFilterCtrl.h">
-      <Filter>gui\editor</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\source\gui\editor\guiGraphCtrl.h">
       <Filter>gui\editor</Filter>
     </ClInclude>
@@ -1962,15 +1950,6 @@
     <ClInclude Include="..\..\source\gui\guiMessageVectorCtrl.h">
       <Filter>gui</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\source\gui\guiMLTextCtrl.h">
-      <Filter>gui</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\source\gui\guiMLTextEditCtrl.h">
-      <Filter>gui</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\source\gui\guiMouseEventCtrl.h">
-      <Filter>gui</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\source\gui\guiProgressCtrl.h">
       <Filter>gui</Filter>
     </ClInclude>
@@ -3070,6 +3049,15 @@
     <ClInclude Include="..\..\source\gui\editor\guiParticleGraphInspector_ScriptBinding.h">
       <Filter>gui\editor</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\source\algorithm\Perlin.h">
+      <Filter>algorithm</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\math\noise\NoiseGenerator.h">
+      <Filter>math\noise</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\math\noise\NoiseGenerator_ScriptBinding.h">
+      <Filter>math\noise</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="Torque 2D.rc" />

+ 10 - 6
engine/compilers/VisualStudio 2017/libogg.vcxproj

@@ -30,7 +30,7 @@
     <ProjectGuid>{15CBFEFF-7965-41F5-B4E2-21E8795C9159}</ProjectGuid>
     <RootNamespace>libogg</RootNamespace>
     <Keyword>Win32Proj</Keyword>
-    <WindowsTargetPlatformVersion>10.0.18362.0</WindowsTargetPlatformVersion>
+    <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
@@ -47,7 +47,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <CharacterSet>Unicode</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <WholeProgramOptimization>false</WholeProgramOptimization>
     <PlatformToolset>v141</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
@@ -79,8 +79,8 @@
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\../../Link/Debug/libogg\</IntDir>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\../../Link/Release\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\../../Link/Release/libogg\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\../../Link/Release\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\../../Link/Release/libogg\</IntDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <TargetName>$(ProjectName)_DEBUG</TargetName>
@@ -162,7 +162,7 @@
       <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\..\Lib\libogg\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBOGG_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <ExceptionHandling>
@@ -171,12 +171,16 @@
       <BufferSecurityCheck>false</BufferSecurityCheck>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
+      <WarningLevel>Level3</WarningLevel>
       <DebugInformationFormat>
       </DebugInformationFormat>
       <CompileAs>CompileAsC</CompileAs>
       <DisableSpecificWarnings>4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>
       <CallingConvention>Cdecl</CallingConvention>
+      <AssemblerListingLocation>.\../../Link/Release/libogg/</AssemblerListingLocation>
+      <ObjectFileName>.\../../Link/Release/libogg/</ObjectFileName>
+      <ProgramDataBaseFileName>.\../../Link/Release/libogg/</ProgramDataBaseFileName>
+      <OmitFramePointers>false</OmitFramePointers>
     </ClCompile>
   </ItemDefinitionGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

+ 2 - 2
engine/compilers/VisualStudio 2017/libvorbis.vcxproj

@@ -22,7 +22,7 @@
     <ProjectGuid>{3A214E06-B95E-4D61-A291-1F8DF2EC10FD}</ProjectGuid>
     <RootNamespace>libvorbis</RootNamespace>
     <Keyword>Win32Proj</Keyword>
-    <WindowsTargetPlatformVersion>10.0.18362.0</WindowsTargetPlatformVersion>
+    <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
@@ -164,7 +164,7 @@
       <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>..\..\..\include;..\..\..\..\libogg\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\..\Lib\libvorbis\lib;..\..\Lib\libvorbis\include;..\..\Lib\libogg\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBVORBIS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <ExceptionHandling>

+ 1 - 1
engine/compilers/VisualStudio 2017/ljpeg.vcxproj

@@ -28,7 +28,7 @@
   </ItemGroup>
   <PropertyGroup Label="Globals">
     <ProjectGuid>{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}</ProjectGuid>
-    <WindowsTargetPlatformVersion>10.0.18362.0</WindowsTargetPlatformVersion>
+    <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

+ 1 - 1
engine/compilers/VisualStudio 2017/lpng.vcxproj

@@ -28,7 +28,7 @@
   </ItemGroup>
   <PropertyGroup Label="Globals">
     <ProjectGuid>{AF1179E3-A838-46A3-A427-1E62AA4C52F4}</ProjectGuid>
-    <WindowsTargetPlatformVersion>10.0.18362.0</WindowsTargetPlatformVersion>
+    <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

+ 1 - 1
engine/compilers/VisualStudio 2017/zlib.vcxproj

@@ -58,7 +58,7 @@
   </ItemGroup>
   <PropertyGroup Label="Globals">
     <ProjectGuid>{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}</ProjectGuid>
-    <WindowsTargetPlatformVersion>10.0.18362.0</WindowsTargetPlatformVersion>
+    <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

BIN
engine/compilers/VisualStudio 2019/Torque 2D.aps


+ 18 - 10
engine/compilers/VisualStudio 2019/Torque 2D.sln

@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.28307.1300
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.31729.503
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Torque2D", "Torque 2D.vcxproj", "{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}"
 	ProjectSection(ProjectDependencies) = postProject
@@ -37,40 +37,48 @@ Global
 		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Debug|x64.Build.0 = Debug|x64
 		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Release|Win32.ActiveCfg = Release|Win32
 		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Release|Win32.Build.0 = Release|Win32
-		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Release|x64.ActiveCfg = Release|Win32
+		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Release|x64.ActiveCfg = Release|x64
+		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Release|x64.Build.0 = Release|x64
 		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Shipping|Win32.ActiveCfg = Shipping|Win32
 		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Shipping|Win32.Build.0 = Shipping|Win32
-		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Shipping|x64.ActiveCfg = Shipping|Win32
+		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Shipping|x64.ActiveCfg = Shipping|x64
+		{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}.Shipping|x64.Build.0 = Shipping|x64
 		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Debug|Win32.ActiveCfg = Debug|Win32
 		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Debug|Win32.Build.0 = Debug|Win32
 		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Debug|x64.ActiveCfg = Debug|x64
 		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Debug|x64.Build.0 = Debug|x64
 		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Release|Win32.ActiveCfg = Release|Win32
 		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Release|Win32.Build.0 = Release|Win32
-		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Release|x64.ActiveCfg = Release|Win32
+		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Release|x64.ActiveCfg = Release|x64
+		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Release|x64.Build.0 = Release|x64
 		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Shipping|Win32.ActiveCfg = Shipping|Win32
 		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Shipping|Win32.Build.0 = Shipping|Win32
-		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Shipping|x64.ActiveCfg = Shipping|Win32
+		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Shipping|x64.ActiveCfg = Shipping|x64
+		{0B07BA94-AA53-4FD4-ADB4-79EC2DA53B36}.Shipping|x64.Build.0 = Shipping|x64
 		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Debug|Win32.ActiveCfg = Debug|Win32
 		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Debug|Win32.Build.0 = Debug|Win32
 		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Debug|x64.ActiveCfg = Debug|x64
 		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Debug|x64.Build.0 = Debug|x64
 		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Release|Win32.ActiveCfg = Release|Win32
 		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Release|Win32.Build.0 = Release|Win32
-		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Release|x64.ActiveCfg = Release|Win32
+		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Release|x64.ActiveCfg = Release|x64
+		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Release|x64.Build.0 = Release|x64
 		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Shipping|Win32.ActiveCfg = Shipping|Win32
 		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Shipping|Win32.Build.0 = Shipping|Win32
-		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Shipping|x64.ActiveCfg = Shipping|Win32
+		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Shipping|x64.ActiveCfg = Shipping|x64
+		{AF1179E3-A838-46A3-A427-1E62AA4C52F4}.Shipping|x64.Build.0 = Shipping|x64
 		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Debug|Win32.ActiveCfg = Debug|Win32
 		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Debug|Win32.Build.0 = Debug|Win32
 		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Debug|x64.ActiveCfg = Debug|x64
 		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Debug|x64.Build.0 = Debug|x64
 		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Release|Win32.ActiveCfg = Release|Win32
 		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Release|Win32.Build.0 = Release|Win32
-		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Release|x64.ActiveCfg = Release|Win32
+		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Release|x64.ActiveCfg = Release|x64
+		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Release|x64.Build.0 = Release|x64
 		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Shipping|Win32.ActiveCfg = Shipping|Win32
 		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Shipping|Win32.Build.0 = Shipping|Win32
-		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Shipping|x64.ActiveCfg = Shipping|Win32
+		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Shipping|x64.ActiveCfg = Shipping|x64
+		{86CB2525-0CF3-40D3-BF42-A0A95035EE8C}.Shipping|x64.Build.0 = Shipping|x64
 		{15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Debug|Win32.ActiveCfg = Debug|Win32
 		{15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Debug|Win32.Build.0 = Debug|Win32
 		{15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Debug|x64.ActiveCfg = Debug|x64

+ 16 - 11
engine/compilers/VisualStudio 2019/Torque 2D.vcxproj

@@ -30,7 +30,7 @@
     <ProjectGuid>{1564A07D-230E-4C90-AEE6-52AC9A58D6C9}</ProjectGuid>
     <RootNamespace>TorqueGame</RootNamespace>
     <ProjectName>Torque2D</ProjectName>
-    <WindowsTargetPlatformVersion>10.0.18362.0</WindowsTargetPlatformVersion>
+    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
@@ -117,6 +117,10 @@
     <OutDir>../../../</OutDir>
     <IntDir>../../Link/VC2012.$(Configuration).$(PlatformName)/$(ProjectName)/</IntDir>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>../../../</OutDir>
+    <IntDir>../../Link/VC2012.$(Configuration).$(PlatformName)/$(ProjectName)/</IntDir>
+  </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <Midl>
       <TypeLibraryName>$(OutDir)Torque2D.tlb</TypeLibraryName>
@@ -143,6 +147,7 @@
       <WarningLevel>Level3</WarningLevel>
       <DisableSpecificWarnings>4800;4100;4127;4512</DisableSpecificWarnings>
       <ShowIncludes>false</ShowIncludes>
+      <ConformanceMode>true</ConformanceMode>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -192,6 +197,7 @@
       <DisableSpecificWarnings>4800;4100;4127;4512</DisableSpecificWarnings>
       <ShowIncludes>false</ShowIncludes>
       <FunctionLevelLinking>true</FunctionLevelLinking>
+      <ConformanceMode>true</ConformanceMode>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -241,6 +247,7 @@
       <CompileAs>CompileAsCpp</CompileAs>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <DisableSpecificWarnings>4800;4100;4127;4512</DisableSpecificWarnings>
+      <ConformanceMode>true</ConformanceMode>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -301,6 +308,7 @@
       <CompileAs>CompileAsCpp</CompileAs>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <DisableSpecificWarnings>4800;4100;4127;4512</DisableSpecificWarnings>
+      <ConformanceMode>true</ConformanceMode>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -360,6 +368,7 @@
       <CompileAs>CompileAsCpp</CompileAs>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <DisableSpecificWarnings>4800;4100;4127;4512</DisableSpecificWarnings>
+      <ConformanceMode>true</ConformanceMode>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -420,6 +429,7 @@
       <CompileAs>CompileAsCpp</CompileAs>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <DisableSpecificWarnings>4800;4100;4127;4512</DisableSpecificWarnings>
+      <ConformanceMode>true</ConformanceMode>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -506,6 +516,7 @@
     <ClCompile Include="..\..\source\2d\scene\WorldQuery.cc" />
     <ClCompile Include="..\..\source\algorithm\crc.cc" />
     <ClCompile Include="..\..\source\algorithm\hashFunction.cc" />
+    <ClCompile Include="..\..\source\algorithm\Perlin.cc" />
     <ClCompile Include="..\..\source\assets\assetBase.cc" />
     <ClCompile Include="..\..\source\assets\assetFieldTypes.cc" />
     <ClCompile Include="..\..\source\assets\assetManager.cc" />
@@ -628,9 +639,6 @@
     <ClCompile Include="..\..\source\gui\guiInputCtrl.cc" />
     <ClCompile Include="..\..\source\gui\guiListBoxCtrl.cc" />
     <ClCompile Include="..\..\source\gui\guiMessageVectorCtrl.cc" />
-    <ClCompile Include="..\..\source\gui\guiMLTextCtrl.cc" />
-    <ClCompile Include="..\..\source\gui\guiMLTextEditCtrl.cc" />
-    <ClCompile Include="..\..\source\gui\guiMouseEventCtrl.cc" />
     <ClCompile Include="..\..\source\gui\guiProgressCtrl.cc" />
     <ClCompile Include="..\..\source\gui\guiSliderCtrl.cc" />
     <ClCompile Include="..\..\source\gui\guiTextEditCtrl.cc" />
@@ -668,6 +676,7 @@
     <ClCompile Include="..\..\source\math\math_ScriptBinding.cc" />
     <ClCompile Include="..\..\source\math\mFluid.cpp" />
     <ClCompile Include="..\..\source\math\mPoint.cpp" />
+    <ClCompile Include="..\..\source\math\noise\NoiseGenerator.cc" />
     <ClCompile Include="..\..\source\math\rectClipper.cpp" />
     <ClCompile Include="..\..\source\memory\dataChunker.cc" />
     <ClCompile Include="..\..\source\memory\frameAllocator_ScriptBinding.cc" />
@@ -824,13 +833,11 @@
     <ClCompile Include="..\..\source\gui\buttons\guiRadioCtrl.cc" />
     <ClCompile Include="..\..\source\gui\containers\guiDragAndDropCtrl.cc" />
     <ClCompile Include="..\..\source\gui\containers\guiPanelCtrl.cc" />
-    <ClCompile Include="..\..\source\gui\containers\guiRolloutCtrl.cc" />
     <ClCompile Include="..\..\source\gui\containers\guiScrollCtrl.cc" />
     <ClCompile Include="..\..\source\gui\containers\guiTabBookCtrl.cc" />
     <ClCompile Include="..\..\source\gui\containers\guiWindowCtrl.cc" />
     <ClCompile Include="..\..\source\gui\editor\guiDebugger.cc" />
     <ClCompile Include="..\..\source\gui\editor\guiEditCtrl.cc" />
-    <ClCompile Include="..\..\source\gui\editor\guiFilterCtrl.cc" />
     <ClCompile Include="..\..\source\gui\editor\guiGraphCtrl.cc" />
     <ClCompile Include="..\..\source\gui\editor\guiInspector.cc" />
     <ClCompile Include="..\..\source\gui\editor\guiInspectorTypes.cc" />
@@ -933,6 +940,7 @@
     <ClInclude Include="..\..\source\algorithm\crctab.h" />
     <ClInclude Include="..\..\source\algorithm\hashFunction.h" />
     <ClInclude Include="..\..\source\algorithm\md5.h" />
+    <ClInclude Include="..\..\source\algorithm\Perlin.h" />
     <ClInclude Include="..\..\source\assets\assetBase.h" />
     <ClInclude Include="..\..\source\assets\assetBase_ScriptBinding.h" />
     <ClInclude Include="..\..\source\assets\assetDefinition.h" />
@@ -1128,9 +1136,6 @@
     <ClInclude Include="..\..\source\gui\guiListBoxCtrl.h" />
     <ClInclude Include="..\..\source\gui\guiListBoxCtrl_ScriptBinding.h" />
     <ClInclude Include="..\..\source\gui\guiMessageVectorCtrl.h" />
-    <ClInclude Include="..\..\source\gui\guiMLTextCtrl.h" />
-    <ClInclude Include="..\..\source\gui\guiMLTextEditCtrl.h" />
-    <ClInclude Include="..\..\source\gui\guiMouseEventCtrl.h" />
     <ClInclude Include="..\..\source\gui\guiProgressCtrl.h" />
     <ClInclude Include="..\..\source\gui\guiProgressCtrl_ScriptBinding.h" />
     <ClInclude Include="..\..\source\gui\guiSliderCtrl.h" />
@@ -1175,6 +1180,8 @@
     <ClInclude Include="..\..\source\math\matrix_ScriptBinding.h" />
     <ClInclude Include="..\..\source\math\mFluid.h" />
     <ClInclude Include="..\..\source\math\mNormalDistribution.h" />
+    <ClInclude Include="..\..\source\math\noise\NoiseGenerator.h" />
+    <ClInclude Include="..\..\source\math\noise\NoiseGenerator_ScriptBinding.h" />
     <ClInclude Include="..\..\source\math\random_ScriptBinding.h" />
     <ClInclude Include="..\..\source\math\rectClipper.h" />
     <ClInclude Include="..\..\source\math\vector_ScriptBinding.h" />
@@ -1408,13 +1415,11 @@
     <ClInclude Include="..\..\source\gui\buttons\guiRadioCtrl.h" />
     <ClInclude Include="..\..\source\gui\containers\guiDragAndDropCtrl.h" />
     <ClInclude Include="..\..\source\gui\containers\guiPanelCtrl.h" />
-    <ClInclude Include="..\..\source\gui\containers\guiRolloutCtrl.h" />
     <ClInclude Include="..\..\source\gui\containers\guiScrollCtrl.h" />
     <ClInclude Include="..\..\source\gui\containers\guiTabBookCtrl.h" />
     <ClInclude Include="..\..\source\gui\containers\guiWindowCtrl.h" />
     <ClInclude Include="..\..\source\gui\editor\guiDebugger.h" />
     <ClInclude Include="..\..\source\gui\editor\guiEditCtrl.h" />
-    <ClInclude Include="..\..\source\gui\editor\guiFilterCtrl.h" />
     <ClInclude Include="..\..\source\gui\editor\guiGraphCtrl.h" />
     <ClInclude Include="..\..\source\gui\editor\guiInspector.h" />
     <ClInclude Include="..\..\source\gui\editor\guiInspectorTypes.h" />

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