Browse Source

Refactor: Removed a variety of uses of wide-string and replaced it with UTF-8 encoded narrow strings
- Update bsf to the latest version

BearishSun 7 years ago
parent
commit
44ef7be30e
100 changed files with 971 additions and 971 deletions
  1. 1 1
      CMakeLists.txt
  2. 1 1
      Data/Raw/Shaders/ClearHandleAlpha.bsl
  3. 1 1
      Data/Raw/Shaders/DockDropOverlay.bsl
  4. 1 1
      Data/Raw/Shaders/GizmoPicking.bsl
  5. 1 1
      Data/Raw/Shaders/GizmoPickingAlpha.bsl
  6. 1 1
      Data/Raw/Shaders/IconGizmo.bsl
  7. 1 1
      Data/Raw/Shaders/LineGizmo.bsl
  8. 1 1
      Data/Raw/Shaders/LineHandle.bsl
  9. 1 1
      Data/Raw/Shaders/PickingAlphaCullCCW.bsl
  10. 1 1
      Data/Raw/Shaders/PickingAlphaCullCW.bsl
  11. 1 1
      Data/Raw/Shaders/PickingAlphaCullNone.bsl
  12. 1 1
      Data/Raw/Shaders/PickingCullCCW.bsl
  13. 1 1
      Data/Raw/Shaders/PickingCullCW.bsl
  14. 1 1
      Data/Raw/Shaders/PickingCullNone.bsl
  15. 1 1
      Data/Raw/Shaders/SceneGrid.bsl
  16. 4 4
      Data/Raw/Shaders/Selection.bsl
  17. 1 1
      Data/Raw/Shaders/SolidGizmo.bsl
  18. 1 1
      Data/Raw/Shaders/SolidHandle.bsl
  19. 1 1
      Data/Raw/Shaders/TextGizmo.bsl
  20. 1 1
      Data/Raw/Shaders/WireGizmo.bsl
  21. 10 10
      Source/EditorCore/BsEditorApplication.cpp
  22. 2 2
      Source/EditorCore/BsEditorApplication.h
  23. 1 1
      Source/EditorCore/BsEditorPrerequisites.h
  24. 8 8
      Source/EditorCore/Build/BsBuildManager.cpp
  25. 4 4
      Source/EditorCore/Build/BsBuildManager.h
  26. 297 297
      Source/EditorCore/Build/BsBuiltinEditorResources.cpp
  27. 3 3
      Source/EditorCore/Build/BsPlatformInfo.h
  28. 14 14
      Source/EditorCore/CodeEditor/BsCodeEditor.cpp
  29. 4 4
      Source/EditorCore/CodeEditor/BsCodeEditor.h
  30. 10 9
      Source/EditorCore/CodeEditor/BsMDCodeEditor.cpp
  31. 2 2
      Source/EditorCore/EditorWindow/BsMainEditorWindow.cpp
  32. 1 1
      Source/EditorCore/EditorWindow/BsModalWindow.cpp
  33. 1 1
      Source/EditorCore/GUI/BsGUIDockSlider.cpp
  34. 1 1
      Source/EditorCore/GUI/BsGUIDropButton.cpp
  35. 6 6
      Source/EditorCore/GUI/BsGUIFloatField.cpp
  36. 3 3
      Source/EditorCore/GUI/BsGUIFloatField.h
  37. 6 6
      Source/EditorCore/GUI/BsGUIIntField.cpp
  38. 3 3
      Source/EditorCore/GUI/BsGUIIntField.h
  39. 28 28
      Source/EditorCore/GUI/BsGUIMenuBar.cpp
  40. 13 13
      Source/EditorCore/GUI/BsGUIMenuBar.h
  41. 7 7
      Source/EditorCore/GUI/BsGUIResourceTreeView.cpp
  42. 12 12
      Source/EditorCore/GUI/BsGUIResourceTreeView.h
  43. 23 23
      Source/EditorCore/GUI/BsGUISceneTreeView.cpp
  44. 10 10
      Source/EditorCore/GUI/BsGUISceneTreeView.h
  45. 11 11
      Source/EditorCore/GUI/BsGUISliderField.cpp
  46. 2 2
      Source/EditorCore/GUI/BsGUISliderField.h
  47. 20 21
      Source/EditorCore/GUI/BsGUIStatusBar.cpp
  48. 3 3
      Source/EditorCore/GUI/BsGUIStatusBar.h
  49. 2 2
      Source/EditorCore/GUI/BsGUITabbedTitleBar.cpp
  50. 5 5
      Source/EditorCore/GUI/BsGUITextField.cpp
  51. 6 6
      Source/EditorCore/GUI/BsGUITextField.h
  52. 1 1
      Source/EditorCore/GUI/BsGUIToggleField.cpp
  53. 4 4
      Source/EditorCore/GUI/BsGUITreeView.cpp
  54. 1 1
      Source/EditorCore/GUI/BsGUITreeView.h
  55. 2 2
      Source/EditorCore/GUI/BsGUIVector2Field.cpp
  56. 3 3
      Source/EditorCore/GUI/BsGUIVector3Field.cpp
  57. 4 4
      Source/EditorCore/GUI/BsGUIVector4Field.cpp
  58. 1 1
      Source/EditorCore/Handles/BsHandleDrawManager.cpp
  59. 1 1
      Source/EditorCore/Handles/BsHandleDrawManager.h
  60. 40 40
      Source/EditorCore/Library/BsProjectLibrary.cpp
  61. 8 8
      Source/EditorCore/Library/BsProjectLibrary.h
  62. 9 3
      Source/EditorCore/Library/BsProjectResourceMeta.cpp
  63. 2 2
      Source/EditorCore/Library/BsProjectResourceMeta.h
  64. 13 42
      Source/EditorCore/RTTI/BsPlatformInfoRTTI.h
  65. 26 8
      Source/EditorCore/RTTI/BsProjectLibraryEntriesRTTI.h
  66. 2 2
      Source/EditorCore/Scene/BsGizmoManager.h
  67. 1 1
      Source/EditorCore/SceneView/BsGizmoManager.cpp
  68. 2 2
      Source/EditorCore/UndoRedo/BsCmdBreakPrefab.cpp
  69. 2 2
      Source/EditorCore/UndoRedo/BsCmdBreakPrefab.h
  70. 3 3
      Source/EditorCore/UndoRedo/BsCmdCloneSO.cpp
  71. 3 3
      Source/EditorCore/UndoRedo/BsCmdCloneSO.h
  72. 2 2
      Source/EditorCore/UndoRedo/BsCmdCreateSO.cpp
  73. 2 2
      Source/EditorCore/UndoRedo/BsCmdCreateSO.h
  74. 2 2
      Source/EditorCore/UndoRedo/BsCmdDeleteSO.cpp
  75. 2 2
      Source/EditorCore/UndoRedo/BsCmdDeleteSO.h
  76. 2 2
      Source/EditorCore/UndoRedo/BsCmdInputFieldValueChange.h
  77. 2 2
      Source/EditorCore/UndoRedo/BsCmdInstantiateSO.cpp
  78. 2 2
      Source/EditorCore/UndoRedo/BsCmdInstantiateSO.h
  79. 2 2
      Source/EditorCore/UndoRedo/BsCmdRecordSO.cpp
  80. 2 2
      Source/EditorCore/UndoRedo/BsCmdRecordSO.h
  81. 3 3
      Source/EditorCore/UndoRedo/BsCmdReparentSO.cpp
  82. 3 3
      Source/EditorCore/UndoRedo/BsCmdReparentSO.h
  83. 1 1
      Source/EditorCore/UndoRedo/BsEditorCommand.cpp
  84. 2 2
      Source/EditorCore/UndoRedo/BsEditorCommand.h
  85. 213 213
      Source/EditorCore/Utility/BsBuiltinEditorResources.h
  86. 12 7
      Source/EditorCore/Win32/BsVSCodeEditor.cpp
  87. 3 3
      Source/EditorCore/Win32/BsWin32BrowseDialogs.cpp
  88. 4 4
      Source/Scripting/SBansheeEditor/BsEditorScriptLibrary.cpp
  89. 1 1
      Source/Scripting/SBansheeEditor/BsEditorScriptManager.cpp
  90. 3 3
      Source/Scripting/SBansheeEditor/BsGUIGameObjectField.cpp
  91. 5 5
      Source/Scripting/SBansheeEditor/BsGUIResourceField.cpp
  92. 2 2
      Source/Scripting/SBansheeEditor/BsGUITextureField.cpp
  93. 1 1
      Source/Scripting/SBansheeEditor/BsManagedEditorCommand.cpp
  94. 6 6
      Source/Scripting/SBansheeEditor/BsMenuItemManager.cpp
  95. 1 1
      Source/Scripting/SBansheeEditor/BsMenuItemManager.h
  96. 2 2
      Source/Scripting/SBansheeEditor/BsToolbarItemManager.cpp
  97. 6 6
      Source/Scripting/SBansheeEditor/Wrappers/BsScriptBrowseDialog.cpp
  98. 12 12
      Source/Scripting/SBansheeEditor/Wrappers/BsScriptBuildManager.cpp
  99. 1 1
      Source/Scripting/SBansheeEditor/Wrappers/BsScriptCodeEditor.cpp
  100. 3 3
      Source/Scripting/SBansheeEditor/Wrappers/BsScriptDragDropManager.cpp

+ 1 - 1
CMakeLists.txt

@@ -37,7 +37,7 @@ set(GENERATE_SCRIPT_BINDINGS OFF CACHE BOOL "If true, script binding files will
 check_and_update_binary_deps(Banshee ${PROJECT_SOURCE_DIR}/Dependencies/ ${BS_PREBUILT_DEPENDENCIES_VERSION})
 
 ## Check data dependencies
-check_and_update_builtin_assets(Banshee ${PROJECT_SOURCE_DIR}/Data ${BS_BUILTIN_ASSETS_VERSION})
+check_and_update_builtin_assets(Banshee ${PROJECT_SOURCE_DIR}/Data ${BS_BUILTIN_ASSETS_VERSION} YES)
 	
 # Generate script bindings
 include(${BSF_SOURCE_DIR}/CMake/GenerateScriptBindings.cmake)

+ 1 - 1
Data/Raw/Shaders/ClearHandleAlpha.bsl

@@ -1,4 +1,4 @@
-technique ClearHandleAlpha
+shader ClearHandleAlpha
 {
 	blend
 	{

+ 1 - 1
Data/Raw/Shaders/DockDropOverlay.bsl

@@ -1,4 +1,4 @@
-technique DockDropOverlay
+shader DockDropOverlay
 {
 	blend
 	{

+ 1 - 1
Data/Raw/Shaders/GizmoPicking.bsl

@@ -1,4 +1,4 @@
-technique GizmoPicking
+shader GizmoPicking
 {
 	raster
 	{

+ 1 - 1
Data/Raw/Shaders/GizmoPickingAlpha.bsl

@@ -1,4 +1,4 @@
-technique GizmoPickingAlpha
+shader GizmoPickingAlpha
 {
 	raster
 	{

+ 1 - 1
Data/Raw/Shaders/IconGizmo.bsl

@@ -1,4 +1,4 @@
-technique IconGizmo
+shader IconGizmo
 {
 	pass
 	{

+ 1 - 1
Data/Raw/Shaders/LineGizmo.bsl

@@ -1,6 +1,6 @@
 #include "$EDITOR$/LineGizmo.bslinc"
 
-technique LineGizmo
+shader LineGizmo
 {
 	mixin LineGizmoBase;
 

+ 1 - 1
Data/Raw/Shaders/LineHandle.bsl

@@ -1,6 +1,6 @@
 #include "$EDITOR$/LineGizmo.bslinc"
 
-technique LineHandle
+shader LineHandle
 {
 	mixin LineGizmoBase;
 

+ 1 - 1
Data/Raw/Shaders/PickingAlphaCullCCW.bsl

@@ -1,6 +1,6 @@
 #include "$EDITOR$/PickingAlphaCull.bslinc"
 
-technique PickingAlphaCullCCW
+shader PickingAlphaCullCCW
 {
 	mixin PickingAlphaCull;
 

+ 1 - 1
Data/Raw/Shaders/PickingAlphaCullCW.bsl

@@ -1,6 +1,6 @@
 #include "$EDITOR$/PickingAlphaCull.bslinc"
 
-technique PickingAlphaCullCW
+shader PickingAlphaCullCW
 {
 	mixin PickingAlphaCull;
 

+ 1 - 1
Data/Raw/Shaders/PickingAlphaCullNone.bsl

@@ -1,6 +1,6 @@
 #include "$EDITOR$/PickingAlphaCull.bslinc"
 
-technique PickingAlphaCullNone
+shader PickingAlphaCullNone
 {
 	mixin PickingAlphaCull;
 

+ 1 - 1
Data/Raw/Shaders/PickingCullCCW.bsl

@@ -1,6 +1,6 @@
 #include "$EDITOR$/PickingCull.bslinc"
 
-technique PickingCullCCW
+shader PickingCullCCW
 {
 	mixin PickingCull;
 

+ 1 - 1
Data/Raw/Shaders/PickingCullCW.bsl

@@ -1,6 +1,6 @@
 #include "$EDITOR$/PickingCull.bslinc"
 
-technique PickingCullCW
+shader PickingCullCW
 {
 	mixin PickingCull;
 	

+ 1 - 1
Data/Raw/Shaders/PickingCullNone.bsl

@@ -1,6 +1,6 @@
 #include "$EDITOR$/PickingCull.bslinc"
 
-technique PickingCullNone
+shader PickingCullNone
 {
 	mixin PickingCull;
 

+ 1 - 1
Data/Raw/Shaders/SceneGrid.bsl

@@ -3,7 +3,7 @@ options
 	priority = -10000;
 };
 
-technique SceneGrid
+shader SceneGrid
 {
 	depth
 	{

+ 4 - 4
Data/Raw/Shaders/Selection.bsl

@@ -10,26 +10,26 @@
 #define USE_SKELETON
 #include "$EDITOR$\SelectionBase.bslinc"
 
-technique Selection1
+shader Selection1
 { 
 	mixin Selection;
 };
 
-technique Selection2
+shader Selection2
 {
 	mixin SelectionSkinned;
 
 	tags = { "Skinned" };
 };
 
-technique Selection3
+shader Selection3
 {
 	mixin SelectionMorph;
 
 	tags = { "Morph" };
 };
 
-technique Selection4
+shader Selection4
 {
 	mixin SelectionSkinnedMorph;
 

+ 1 - 1
Data/Raw/Shaders/SolidGizmo.bsl

@@ -1,6 +1,6 @@
 #include "$EDITOR$/SolidGizmo.bslinc"
 
-technique SolidGizmo
+shader SolidGizmo
 { 
 	mixin SolidGizmoBase;
 };

+ 1 - 1
Data/Raw/Shaders/SolidHandle.bsl

@@ -5,7 +5,7 @@ options
 	priority = 10;
 };
 
-technique SolidGizmo
+shader SolidGizmo
 {
 	mixin SolidGizmoBase;
 

+ 1 - 1
Data/Raw/Shaders/TextGizmo.bsl

@@ -1,4 +1,4 @@
-technique TextGizmo
+shader TextGizmo
 {
 	blend
 	{

+ 1 - 1
Data/Raw/Shaders/WireGizmo.bsl

@@ -1,4 +1,4 @@
-technique WireGizmo
+shader WireGizmo
 {
 	raster
 	{

+ 10 - 10
Source/EditorCore/BsEditorApplication.cpp

@@ -35,9 +35,9 @@ namespace bs
 {
 	constexpr UINT32 SPLASH_SCREEN_DURATION_MS = 1000;
 
-	const Path EditorApplication::WIDGET_LAYOUT_PATH = PROJECT_INTERNAL_DIR + L"Layout.asset";
-	const Path EditorApplication::BUILD_DATA_PATH = PROJECT_INTERNAL_DIR + L"BuildData.asset";
-	const Path EditorApplication::PROJECT_SETTINGS_PATH = PROJECT_INTERNAL_DIR + L"Settings.asset";
+	const Path EditorApplication::WIDGET_LAYOUT_PATH = PROJECT_INTERNAL_DIR + "Layout.asset";
+	const Path EditorApplication::BUILD_DATA_PATH = PROJECT_INTERNAL_DIR + "BuildData.asset";
+	const Path EditorApplication::PROJECT_SETTINGS_PATH = PROJECT_INTERNAL_DIR + "Settings.asset";
 
 	START_UP_DESC createStartupDesc()
 	{
@@ -67,7 +67,7 @@ namespace bs
 
 	Path getEditorSettingsPath()
 	{
-		return gEditorApplication().getDataPath() + L"Settings.asset";
+		return gEditorApplication().getDataPath() + "Settings.asset";
 	}
 
 	EditorApplication::EditorApplication()
@@ -86,10 +86,10 @@ namespace bs
 	{
 		// Find the path to data files
 		//// First, look for EditorData folder in the direct descendant of the working directory 
-		if (FileSystem::exists(L"EditorData"))
+		if (FileSystem::exists("EditorData"))
 		{
 			mBuiltinDataPath = FileSystem::getWorkingDirectoryPath();
-			mBuiltinDataPath.append(L"EditorData/");
+			mBuiltinDataPath.append("EditorData/");
 		}
 		else
 		{
@@ -234,7 +234,7 @@ namespace bs
 	Path EditorApplication::getEditorAssemblyPath() const
 	{
 		Path assemblyPath = getBuiltinAssemblyFolder();
-		assemblyPath.append(toWString(EDITOR_ASSEMBLY) + L".dll");
+		assemblyPath.append(String(EDITOR_ASSEMBLY) + ".dll");
 
 		return assemblyPath;
 	}
@@ -242,7 +242,7 @@ namespace bs
 	Path EditorApplication::getEditorScriptAssemblyPath() const
 	{
 		Path assemblyPath = getScriptAssemblyFolder();
-		assemblyPath.append(toWString(SCRIPT_EDITOR_ASSEMBLY) + L".dll");
+		assemblyPath.append(String(SCRIPT_EDITOR_ASSEMBLY) + ".dll");
 
 		return assemblyPath;
 	}
@@ -291,7 +291,7 @@ namespace bs
 		gSceneManager().clearScene();
 
 		mProjectPath = Path::BLANK;
-		mProjectName = StringUtil::WBLANK;
+		mProjectName = StringUtil::BLANK;
 		mIsProjectLoaded = false;
 	}
 
@@ -300,7 +300,7 @@ namespace bs
 		unloadProject();
 
 		mProjectPath = projectPath;
-		mProjectName = projectPath.getWTail();
+		mProjectName = projectPath.getTail();
 		mIsProjectLoaded = true;
 
 		loadProjectSettings();

+ 2 - 2
Source/EditorCore/BsEditorApplication.h

@@ -29,7 +29,7 @@ namespace bs
 		const Path& getProjectPath() const { return mProjectPath; }
 
 		/**	Returns the name of the currently loaded project. */
-		const WString& getProjectName() const { return mProjectName; }
+		const String& getProjectName() const { return mProjectName; }
 
 		/**	Returns the absolute path where the builtin editor assets are located. */
 		Path getDataPath() const { return mBuiltinDataPath; }
@@ -146,7 +146,7 @@ namespace bs
 
 		bool mIsProjectLoaded;
 		Path mProjectPath;
-		WString mProjectName;
+		String mProjectName;
 
 		Timer mSplashScreenTimer;
 		bool mSplashScreenShown = true;

+ 1 - 1
Source/EditorCore/BsEditorPrerequisites.h

@@ -190,7 +190,7 @@ namespace bs
 
 	static constexpr const char* EDITOR_ASSEMBLY = "MBansheeEditor";
 	static constexpr const char* SCRIPT_EDITOR_ASSEMBLY = "MScriptEditor";
-	static const Path PROJECT_INTERNAL_DIR = L"Internal/";
+	static const Path PROJECT_INTERNAL_DIR = u8"Internal/";
 	static const Path INTERNAL_ASSEMBLY_PATH = PROJECT_INTERNAL_DIR + "Assemblies/";
 
 	/** Types of drag and drop operations. Different types specify different types of dragged data. */

+ 8 - 8
Source/EditorCore/Build/BsBuildManager.cpp

@@ -25,7 +25,7 @@ namespace bs
 		return BuildData::getRTTIStatic();
 	}
 
-	const WString BuildManager::BUILD_FOLDER_NAME = L"Builds/";
+	const char* BuildManager::BUILD_FOLDER_NAME = "Builds/";
 
 	BuildManager::BuildManager()
 	{
@@ -63,21 +63,21 @@ namespace bs
 		return nullptr;
 	}
 
-	Vector<WString> BuildManager::getFrameworkAssemblies(PlatformType type) const
+	Vector<String> BuildManager::getFrameworkAssemblies(PlatformType type) const
 	{
 		switch (type)
 		{
 		case PlatformType::Windows:
 		default:
-			return { L"mscorlib", L"System", L"System.Core" };
+			return { u8"mscorlib", u8"System", u8"System.Core" };
 		}
 	}
 
 	Vector<Path> BuildManager::getNativeBinaries(PlatformType type) const
 	{
-		Vector<Path> libs = { L"bsfEngine", L"bsfCore", L"bsfUtility",
-			L"bsfD3D11RenderAPI", L"bsfGLRenderAPI", L"bsfMono",
-			L"RenderBeast", L"SBansheeEngine",  L"mono-2.0-sgen", L"nvtt" };
+		Vector<Path> libs = { u8"bsfEngine", u8"bsfCore", u8"bsfUtility",
+			u8"bsfD3D11RenderAPI", u8"bsfGLRenderAPI", u8"bsfMono",
+			u8"RenderBeast", u8"SBansheeEngine",  u8"mono-2.0-sgen", u8"nvtt" };
 
 		switch (type)
 		{
@@ -114,7 +114,7 @@ namespace bs
 			switch (platform)
 			{
 			case PlatformType::Windows:
-				return gEditorApplication().getProjectPath() + BUILD_FOLDER_NAME + L"Windows";
+				return gEditorApplication().getProjectPath() + BUILD_FOLDER_NAME + u8"Windows";
 			default:
 				break;
 			}
@@ -154,7 +154,7 @@ namespace bs
 		return Path::BLANK;
 	}
 
-	WString BuildManager::getDefines(PlatformType type) const
+	String BuildManager::getDefines(PlatformType type) const
 	{
 		return getPlatformInfo(type)->defines;
 	}

+ 4 - 4
Source/EditorCore/Build/BsBuildManager.h

@@ -28,7 +28,7 @@ namespace bs
 	public:
 		friend class BuildDataRTTI;
 		static RTTITypeBase* getRTTIStatic();
-		virtual RTTITypeBase* getRTTI() const override;
+		RTTITypeBase* getRTTI() const override;
 	};
 
 	/**	Types of various folders used by the build manager. */
@@ -64,7 +64,7 @@ namespace bs
 		SPtr<PlatformInfo> getPlatformInfo(PlatformType type) const;
 
 		/**	Returns a list of file names (without extension) of all .NET assemblies required for a specific platform. */
-		Vector<WString> getFrameworkAssemblies(PlatformType type) const;
+		Vector<String> getFrameworkAssemblies(PlatformType type) const;
 
 		/**	Returns a list names of all native binaries required for a specific platform. */
 		Vector<Path> getNativeBinaries(PlatformType type) const;
@@ -79,7 +79,7 @@ namespace bs
 		Path getMainExecutable(PlatformType type) const;
 
 		/**	Returns a list of script defines for a specific platform. */
-		WString getDefines(PlatformType type) const;
+		String getDefines(PlatformType type) const;
 
 		/**	Stores build settings for all platforms in the specified file. */
 		void save(const Path& outFile);
@@ -91,7 +91,7 @@ namespace bs
 		void clear();
 
 	private:
-		static const WString BUILD_FOLDER_NAME;
+		static const char* BUILD_FOLDER_NAME;
 
 		SPtr<BuildData> mBuildData;
 	};

+ 297 - 297
Source/EditorCore/Build/BsBuiltinEditorResources.cpp

@@ -59,15 +59,15 @@ namespace bs
 	const String BuiltinEditorResources::TextureFieldDropStyleName = "TextureDrop";
 	const String BuiltinEditorResources::TextureFieldClearBtnStyleName = "TextureClearButton";
 
-	const WString BuiltinEditorResources::DefaultFontFilename = L"arial.ttf";
-	const WString BuiltinEditorResources::DefaultAAFontFilename = L"arialAA.ttf";
+	const String BuiltinEditorResources::DefaultFontFilename = "arial.ttf";
+	const String BuiltinEditorResources::DefaultAAFontFilename = "arialAA.ttf";
 	const UINT32 BuiltinEditorResources::DefaultFontSize = 8;
 	const UINT32 BuiltinEditorResources::TitleFontSize = 16;
 
 	const Color BuiltinEditorResources::TextNormalColor = Color(0.7f, 0.7f, 0.7f);
 	const Color BuiltinEditorResources::TextActiveColor = Color(0.0f, 0.0f, 0.0f);
 
-	const WString BuiltinEditorResources::GUISkinFile = L"GUISkin";
+	const String BuiltinEditorResources::GUISkinFile = "GUISkin";
 
 	const char* BuiltinEditorResources::DataListFile = "DataList.json";
 	const char* BuiltinEditorResources::ShaderFolder = "Shaders/";
@@ -76,244 +76,244 @@ namespace bs
 	const char* BuiltinEditorResources::ShaderIncludeFolder = "Shaders/Includes/";
 	const char* BuiltinEditorResources::SpriteSubFolder = "Sprites/";
 
-	const WString BuiltinEditorResources::FolderIconTex = L"FolderIcon.psd";
-	const WString BuiltinEditorResources::MeshIconTex = L"MeshIcon.psd";
-	const WString BuiltinEditorResources::TextureIconTex = L"TextureIcon.psd";
-	const WString BuiltinEditorResources::FontIconTex = L"FontIcon.psd";
-	const WString BuiltinEditorResources::PlainTextIconTex = L"TextIcon.psd";
-	const WString BuiltinEditorResources::ScriptCodeIconTex = L"CSharpIcon.psd";
-	const WString BuiltinEditorResources::ShaderIconTex = L"ShaderIcon.psd";
-	const WString BuiltinEditorResources::ShaderIncludeIconTex = L"ShaderIncludeIcon.psd";
-	const WString BuiltinEditorResources::MaterialIconTex = L"MaterialIcon.psd";
-	const WString BuiltinEditorResources::SpriteTextureIconTex = L"SpriteIcon.psd";
-	const WString BuiltinEditorResources::PrefabIconTex = L"PrefabIcon.psd";
-	const WString BuiltinEditorResources::GUISkinIconTex = L"GUISkinIcon.psd";
-	const WString BuiltinEditorResources::PhysicsMaterialIconTex = L"PhysicsMaterialIcon.psd";
-	const WString BuiltinEditorResources::PhysicsMeshIconTex = L"PhysicsMeshIcon.psd";
-	const WString BuiltinEditorResources::AudioClipIconTex = L"AudioClipIcon.psd";
-	const WString BuiltinEditorResources::AnimationClipIconTex = L"AnimationClipIcon.psd";
-
-	const WString BuiltinEditorResources::ButtonNormalTex = L"ButtonNormal.png";
-	const WString BuiltinEditorResources::ButtonHoverTex = L"ButtonHover.png";
-	const WString BuiltinEditorResources::ButtonActiveTex = L"ButtonActive.png";
-
-	const WString BuiltinEditorResources::ButtonLeftNormalTex = L"ButtonLeftNormal.png";
-	const WString BuiltinEditorResources::ButtonLeftHoverTex = L"ButtonLeftHover.png";
-	const WString BuiltinEditorResources::ButtonLeftActiveTex = L"ButtonLeftActive.png";
-
-	const WString BuiltinEditorResources::ButtonRightNormalTex = L"ButtonRightNormal.png";
-	const WString BuiltinEditorResources::ButtonRightHoverTex = L"ButtonRightHover.png";
-	const WString BuiltinEditorResources::ButtonRightActiveTex = L"ButtonRightActive.png";
-
-	const WString BuiltinEditorResources::ToggleNormalTex = L"ToggleNormal.png";
-	const WString BuiltinEditorResources::ToggleHoverTex = L"ToggleHover.png";
-	const WString BuiltinEditorResources::ToggleNormalOnTex = L"ToggleNormalOn.png";
-	const WString BuiltinEditorResources::ToggleHoverOnTex = L"ToggleHoverOn.png";
-
-	const WString BuiltinEditorResources::InputBoxNormalTex = L"InputBoxNormal.png";
-	const WString BuiltinEditorResources::InputBoxHoverTex = L"InputBoxHover.png";
-	const WString BuiltinEditorResources::InputBoxFocusedTex = L"InputBoxActive.png";
-
-	const WString BuiltinEditorResources::ObjectDropBtnNormalTex = L"ObjectDropNormal.png";
-	const WString BuiltinEditorResources::ObjectDropBtnNormalOnTex = L"ObjectDropNormalOn.png";
-	const WString BuiltinEditorResources::ObjectClearBtnNormalTex = L"ObjectDropClearNormal.png";
-	const WString BuiltinEditorResources::ObjectClearBtnHoverTex = L"ObjectDropClearHover.png";
-	const WString BuiltinEditorResources::ObjectClearBtnActiveTex = L"ObjectDropClearActive.png";
+	const String BuiltinEditorResources::FolderIconTex = u8"FolderIcon.psd";
+	const String BuiltinEditorResources::MeshIconTex = u8"MeshIcon.psd";
+	const String BuiltinEditorResources::TextureIconTex = u8"TextureIcon.psd";
+	const String BuiltinEditorResources::FontIconTex = u8"FontIcon.psd";
+	const String BuiltinEditorResources::PlainTextIconTex = u8"TextIcon.psd";
+	const String BuiltinEditorResources::ScriptCodeIconTex = u8"CSharpIcon.psd";
+	const String BuiltinEditorResources::ShaderIconTex = u8"ShaderIcon.psd";
+	const String BuiltinEditorResources::ShaderIncludeIconTex = u8"ShaderIncludeIcon.psd";
+	const String BuiltinEditorResources::MaterialIconTex = u8"MaterialIcon.psd";
+	const String BuiltinEditorResources::SpriteTextureIconTex = u8"SpriteIcon.psd";
+	const String BuiltinEditorResources::PrefabIconTex = u8"PrefabIcon.psd";
+	const String BuiltinEditorResources::GUISkinIconTex = u8"GUISkinIcon.psd";
+	const String BuiltinEditorResources::PhysicsMaterialIconTex = u8"PhysicsMaterialIcon.psd";
+	const String BuiltinEditorResources::PhysicsMeshIconTex = u8"PhysicsMeshIcon.psd";
+	const String BuiltinEditorResources::AudioClipIconTex = u8"AudioClipIcon.psd";
+	const String BuiltinEditorResources::AnimationClipIconTex = u8"AnimationClipIcon.psd";
+
+	const String BuiltinEditorResources::ButtonNormalTex = u8"ButtonNormal.png";
+	const String BuiltinEditorResources::ButtonHoverTex = u8"ButtonHover.png";
+	const String BuiltinEditorResources::ButtonActiveTex = u8"ButtonActive.png";
+
+	const String BuiltinEditorResources::ButtonLeftNormalTex = u8"ButtonLeftNormal.png";
+	const String BuiltinEditorResources::ButtonLeftHoverTex = u8"ButtonLeftHover.png";
+	const String BuiltinEditorResources::ButtonLeftActiveTex = u8"ButtonLeftActive.png";
+
+	const String BuiltinEditorResources::ButtonRightNormalTex = u8"ButtonRightNormal.png";
+	const String BuiltinEditorResources::ButtonRightHoverTex = u8"ButtonRightHover.png";
+	const String BuiltinEditorResources::ButtonRightActiveTex = u8"ButtonRightActive.png";
+
+	const String BuiltinEditorResources::ToggleNormalTex = u8"ToggleNormal.png";
+	const String BuiltinEditorResources::ToggleHoverTex = u8"ToggleHover.png";
+	const String BuiltinEditorResources::ToggleNormalOnTex = u8"ToggleNormalOn.png";
+	const String BuiltinEditorResources::ToggleHoverOnTex = u8"ToggleHoverOn.png";
+
+	const String BuiltinEditorResources::InputBoxNormalTex = u8"InputBoxNormal.png";
+	const String BuiltinEditorResources::InputBoxHoverTex = u8"InputBoxHover.png";
+	const String BuiltinEditorResources::InputBoxFocusedTex = u8"InputBoxActive.png";
+
+	const String BuiltinEditorResources::ObjectDropBtnNormalTex = u8"ObjectDropNormal.png";
+	const String BuiltinEditorResources::ObjectDropBtnNormalOnTex = u8"ObjectDropNormalOn.png";
+	const String BuiltinEditorResources::ObjectClearBtnNormalTex = u8"ObjectDropClearNormal.png";
+	const String BuiltinEditorResources::ObjectClearBtnHoverTex = u8"ObjectDropClearHover.png";
+	const String BuiltinEditorResources::ObjectClearBtnActiveTex = u8"ObjectDropClearActive.png";
 	
-	const WString BuiltinEditorResources::DropDownBtnNormalTex = L"DropDownButtonNormal.png";
-	const WString BuiltinEditorResources::DropDownBtnHoverTex = L"DropDownButtonHover.png";
-	const WString BuiltinEditorResources::DropDownBtnActiveTex = L"DropDownButtonActive.png";
+	const String BuiltinEditorResources::DropDownBtnNormalTex = u8"DropDownButtonNormal.png";
+	const String BuiltinEditorResources::DropDownBtnHoverTex = u8"DropDownButtonHover.png";
+	const String BuiltinEditorResources::DropDownBtnActiveTex = u8"DropDownButtonActive.png";
 
-	const WString BuiltinEditorResources::SliderHBackgroundTex = L"SliderHBackground.png";
-	const WString BuiltinEditorResources::SliderHFillTex = L"SliderHFill.png";
-	const WString BuiltinEditorResources::SliderVBackgroundTex = L"SliderVBackground.png";
-	const WString BuiltinEditorResources::SliderVFillTex = L"SliderVFill.png";
-	const WString BuiltinEditorResources::SliderHandleNormalTex = L"SliderHandleNormal.png";
-	const WString BuiltinEditorResources::SliderHandleHoverTex = L"SliderHandleHover.png";
-	const WString BuiltinEditorResources::SliderHandleActiveTex = L"SliderHandleActive.png";
+	const String BuiltinEditorResources::SliderHBackgroundTex = u8"SliderHBackground.png";
+	const String BuiltinEditorResources::SliderHFillTex = u8"SliderHFill.png";
+	const String BuiltinEditorResources::SliderVBackgroundTex = u8"SliderVBackground.png";
+	const String BuiltinEditorResources::SliderVFillTex = u8"SliderVFill.png";
+	const String BuiltinEditorResources::SliderHandleNormalTex = u8"SliderHandleNormal.png";
+	const String BuiltinEditorResources::SliderHandleHoverTex = u8"SliderHandleHover.png";
+	const String BuiltinEditorResources::SliderHandleActiveTex = u8"SliderHandleActive.png";
 
-	const WString BuiltinEditorResources::FoldoutOpenNormalTex = L"FoldoutNormalOn.png";
-	const WString BuiltinEditorResources::FoldoutOpenHoverTex = L"FoldoutHoverOn.png";
-	const WString BuiltinEditorResources::FoldoutOpenActiveTex = L"FoldoutHoverOn.png";
-	const WString BuiltinEditorResources::FoldoutClosedNormalTex = L"FoldoutNormalOff.png";
-	const WString BuiltinEditorResources::FoldoutClosedHoverTex = L"FoldoutHoverOff.png";
-	const WString BuiltinEditorResources::FoldoutClosedActiveTex = L"FoldoutHoverOff.png";
+	const String BuiltinEditorResources::FoldoutOpenNormalTex = u8"FoldoutNormalOn.png";
+	const String BuiltinEditorResources::FoldoutOpenHoverTex = u8"FoldoutHoverOn.png";
+	const String BuiltinEditorResources::FoldoutOpenActiveTex = u8"FoldoutHoverOn.png";
+	const String BuiltinEditorResources::FoldoutClosedNormalTex = u8"FoldoutNormalOff.png";
+	const String BuiltinEditorResources::FoldoutClosedHoverTex = u8"FoldoutHoverOff.png";
+	const String BuiltinEditorResources::FoldoutClosedActiveTex = u8"FoldoutHoverOff.png";
 
-	const WString BuiltinEditorResources::WindowBackgroundTex = L"WindowBackground.png";
+	const String BuiltinEditorResources::WindowBackgroundTex = u8"WindowBackground.png";
 
-	const WString BuiltinEditorResources::WindowFrameNormal = L"WindowFrameNormal.png";
-	const WString BuiltinEditorResources::WindowFrameFocused = L"WindowFrameFocused.png";
+	const String BuiltinEditorResources::WindowFrameNormal = u8"WindowFrameNormal.png";
+	const String BuiltinEditorResources::WindowFrameFocused = u8"WindowFrameFocused.png";
 
-	const WString BuiltinEditorResources::CloseButtonNormalTex = L"CloseButtonNormal.png";
-	const WString BuiltinEditorResources::CloseButtonHoverTex = L"CloseButtonHover.png";
-	const WString BuiltinEditorResources::CloseButtonActiveTex = L"CloseButtonActive.png";
+	const String BuiltinEditorResources::CloseButtonNormalTex = u8"CloseButtonNormal.png";
+	const String BuiltinEditorResources::CloseButtonHoverTex = u8"CloseButtonHover.png";
+	const String BuiltinEditorResources::CloseButtonActiveTex = u8"CloseButtonActive.png";
 
-	const WString BuiltinEditorResources::MinButtonNormalTex = L"MinimizeButtonNormal.png"; 
-	const WString BuiltinEditorResources::MinButtonHoverTex = L"MinimizeButtonHover.png"; 
-	const WString BuiltinEditorResources::MinButtonActiveTex = L"MinimizeButtonActive.png";
+	const String BuiltinEditorResources::MinButtonNormalTex = u8"MinimizeButtonNormal.png"; 
+	const String BuiltinEditorResources::MinButtonHoverTex = u8"MinimizeButtonHover.png"; 
+	const String BuiltinEditorResources::MinButtonActiveTex = u8"MinimizeButtonActive.png";
 
-	const WString BuiltinEditorResources::MaxButtonNormalTex = L"MaximizeButtonNormal.png";
-	const WString BuiltinEditorResources::MaxButtonHoverTex = L"MaximizeButtonHover.png";
-	const WString BuiltinEditorResources::MaxButtonActiveTex = L"MaximizeButtonActive.png";
+	const String BuiltinEditorResources::MaxButtonNormalTex = u8"MaximizeButtonNormal.png";
+	const String BuiltinEditorResources::MaxButtonHoverTex = u8"MaximizeButtonHover.png";
+	const String BuiltinEditorResources::MaxButtonActiveTex = u8"MaximizeButtonActive.png";
 
-	const WString BuiltinEditorResources::TabBarBackgroundTex = L"TabBarBackground.png";
-	const WString BuiltinEditorResources::TitleBarBackgroundTex = L"TitleBarBackground.png";
+	const String BuiltinEditorResources::TabBarBackgroundTex = u8"TabBarBackground.png";
+	const String BuiltinEditorResources::TitleBarBackgroundTex = u8"TitleBarBackground.png";
 
-	const WString BuiltinEditorResources::TabButtonNormalTex = L"TabButtonNormal.png";
-	const WString BuiltinEditorResources::TabButtonFocusedTex = L"TabButtonFocused.png";
+	const String BuiltinEditorResources::TabButtonNormalTex = u8"TabButtonNormal.png";
+	const String BuiltinEditorResources::TabButtonFocusedTex = u8"TabButtonFocused.png";
 
-	const WString BuiltinEditorResources::ScrollBarUpNormalTex = L"ScrollArrowUpNormal.png";
-	const WString BuiltinEditorResources::ScrollBarUpHoverTex = L"ScrollArrowUpHover.png";
-	const WString BuiltinEditorResources::ScrollBarUpActiveTex = L"ScrollArrowUpActive.png";
+	const String BuiltinEditorResources::ScrollBarUpNormalTex = u8"ScrollArrowUpNormal.png";
+	const String BuiltinEditorResources::ScrollBarUpHoverTex = u8"ScrollArrowUpHover.png";
+	const String BuiltinEditorResources::ScrollBarUpActiveTex = u8"ScrollArrowUpActive.png";
 
-	const WString BuiltinEditorResources::ScrollBarDownNormalTex = L"ScrollArrowDownNormal.png";
-	const WString BuiltinEditorResources::ScrollBarDownHoverTex = L"ScrollArrowDownHover.png";
-	const WString BuiltinEditorResources::ScrollBarDownActiveTex = L"ScrollArrowDownActive.png";
+	const String BuiltinEditorResources::ScrollBarDownNormalTex = u8"ScrollArrowDownNormal.png";
+	const String BuiltinEditorResources::ScrollBarDownHoverTex = u8"ScrollArrowDownHover.png";
+	const String BuiltinEditorResources::ScrollBarDownActiveTex = u8"ScrollArrowDownActive.png";
 
-	const WString BuiltinEditorResources::ScrollBarLeftNormalTex = L"ScrollArrowLeftNormal.png";
-	const WString BuiltinEditorResources::ScrollBarLeftHoverTex = L"ScrollArrowLeftHover.png";
-	const WString BuiltinEditorResources::ScrollBarLeftActiveTex = L"ScrollArrowLeftActive.png";
+	const String BuiltinEditorResources::ScrollBarLeftNormalTex = u8"ScrollArrowLeftNormal.png";
+	const String BuiltinEditorResources::ScrollBarLeftHoverTex = u8"ScrollArrowLeftHover.png";
+	const String BuiltinEditorResources::ScrollBarLeftActiveTex = u8"ScrollArrowLeftActive.png";
 
-	const WString BuiltinEditorResources::ScrollBarRightNormalTex = L"ScrollArrowRightNormal.png";
-	const WString BuiltinEditorResources::ScrollBarRightHoverTex = L"ScrollArrowRightHover.png";
-	const WString BuiltinEditorResources::ScrollBarRightActiveTex = L"ScrollArrowRightActive.png";
+	const String BuiltinEditorResources::ScrollBarRightNormalTex = u8"ScrollArrowRightNormal.png";
+	const String BuiltinEditorResources::ScrollBarRightHoverTex = u8"ScrollArrowRightHover.png";
+	const String BuiltinEditorResources::ScrollBarRightActiveTex = u8"ScrollArrowRightActive.png";
 
-	const WString BuiltinEditorResources::ScrollBarHandleHorzNormalTex = L"ScrollBarHHandleNormal.png";
-	const WString BuiltinEditorResources::ScrollBarHandleHorzHoverTex = L"ScrollBarHHandleHover.png";
-	const WString BuiltinEditorResources::ScrollBarHandleHorzActiveTex = L"ScrollBarHHandleActive.png";
+	const String BuiltinEditorResources::ScrollBarHandleHorzNormalTex = u8"ScrollBarHHandleNormal.png";
+	const String BuiltinEditorResources::ScrollBarHandleHorzHoverTex = u8"ScrollBarHHandleHover.png";
+	const String BuiltinEditorResources::ScrollBarHandleHorzActiveTex = u8"ScrollBarHHandleActive.png";
 
-	const WString BuiltinEditorResources::ScrollBarHandleVertNormalTex = L"ScrollBarVHandleNormal.png";
-	const WString BuiltinEditorResources::ScrollBarHandleVertHoverTex = L"ScrollBarVHandleHover.png";
-	const WString BuiltinEditorResources::ScrollBarHandleVertActiveTex = L"ScrollBarVHandleActive.png";
+	const String BuiltinEditorResources::ScrollBarHandleVertNormalTex = u8"ScrollBarVHandleNormal.png";
+	const String BuiltinEditorResources::ScrollBarHandleVertHoverTex = u8"ScrollBarVHandleHover.png";
+	const String BuiltinEditorResources::ScrollBarHandleVertActiveTex = u8"ScrollBarVHandleActive.png";
 
-	const WString BuiltinEditorResources::ScrollBarResizeableHandleHorzNormalTex = L"ScrollBarHHandleResizeableNormal.png";
-	const WString BuiltinEditorResources::ScrollBarResizeableHandleHorzHoverTex = L"ScrollBarHHandleResizeableHover.png";
-	const WString BuiltinEditorResources::ScrollBarResizeableHandleHorzActiveTex = L"ScrollBarHHandleResizeableActive.png";
+	const String BuiltinEditorResources::ScrollBarResizeableHandleHorzNormalTex = u8"ScrollBarHHandleResizeableNormal.png";
+	const String BuiltinEditorResources::ScrollBarResizeableHandleHorzHoverTex = u8"ScrollBarHHandleResizeableHover.png";
+	const String BuiltinEditorResources::ScrollBarResizeableHandleHorzActiveTex = u8"ScrollBarHHandleResizeableActive.png";
 
-	const WString BuiltinEditorResources::ScrollBarResizeableHandleVertNormalTex = L"ScrollBarVHandleResizeableNormal.png";
-	const WString BuiltinEditorResources::ScrollBarResizeableHandleVertHoverTex = L"ScrollBarVHandleResizeableHover.png";
-	const WString BuiltinEditorResources::ScrollBarResizeableHandleVertActiveTex = L"ScrollBarVHandleResizeableActive.png";
+	const String BuiltinEditorResources::ScrollBarResizeableHandleVertNormalTex = u8"ScrollBarVHandleResizeableNormal.png";
+	const String BuiltinEditorResources::ScrollBarResizeableHandleVertHoverTex = u8"ScrollBarVHandleResizeableHover.png";
+	const String BuiltinEditorResources::ScrollBarResizeableHandleVertActiveTex = u8"ScrollBarVHandleResizeableActive.png";
 
-	const WString BuiltinEditorResources::ScrollBarHBgTex = L"ScrollBarHBackground.png";
-	const WString BuiltinEditorResources::ScrollBarVBgTex = L"ScrollBarVBackground.png";
+	const String BuiltinEditorResources::ScrollBarHBgTex = u8"ScrollBarHBackground.png";
+	const String BuiltinEditorResources::ScrollBarVBgTex = u8"ScrollBarVBackground.png";
 
-	const WString BuiltinEditorResources::DropDownBoxBgTex = L"DropDownBoxBg.png";
-	const WString BuiltinEditorResources::DropDownBoxSideBgTex = L"DropDownBoxSideBg.png";
-	const WString BuiltinEditorResources::DropDownBoxHandleTex = L"DropDownBoxScrollHandle.png";
+	const String BuiltinEditorResources::DropDownBoxBgTex = u8"DropDownBoxBg.png";
+	const String BuiltinEditorResources::DropDownBoxSideBgTex = u8"DropDownBoxSideBg.png";
+	const String BuiltinEditorResources::DropDownBoxHandleTex = u8"DropDownBoxScrollHandle.png";
 
-	const WString BuiltinEditorResources::DropDownBoxEntryNormalTex = L"DropDownBoxEntryNormal.png";
-	const WString BuiltinEditorResources::DropDownBoxEntryHoverTex = L"DropDownBoxEntryHover.png";
+	const String BuiltinEditorResources::DropDownBoxEntryNormalTex = u8"DropDownBoxEntryNormal.png";
+	const String BuiltinEditorResources::DropDownBoxEntryHoverTex = u8"DropDownBoxEntryHover.png";
 
-	const WString BuiltinEditorResources::DropDownBoxEntryToggleNormalTex = L"DropDownBoxEntryToggleNormal.png";
-	const WString BuiltinEditorResources::DropDownBoxEntryToggleHoverTex = L"DropDownBoxEntryToggleHover.png";
-	const WString BuiltinEditorResources::DropDownBoxEntryToggleNormalOnTex = L"DropDownBoxEntryToggleNormalOn.png";
-	const WString BuiltinEditorResources::DropDownBoxEntryToggleHoverOnTex = L"DropDownBoxEntryToggleHoverOn.png";
+	const String BuiltinEditorResources::DropDownBoxEntryToggleNormalTex = u8"DropDownBoxEntryToggleNormal.png";
+	const String BuiltinEditorResources::DropDownBoxEntryToggleHoverTex = u8"DropDownBoxEntryToggleHover.png";
+	const String BuiltinEditorResources::DropDownBoxEntryToggleNormalOnTex = u8"DropDownBoxEntryToggleNormalOn.png";
+	const String BuiltinEditorResources::DropDownBoxEntryToggleHoverOnTex = u8"DropDownBoxEntryToggleHoverOn.png";
 
-	const WString BuiltinEditorResources::DropDownBoxBtnUpNormalTex = L"DropDownBoxArrowUpNormal.png";
-	const WString BuiltinEditorResources::DropDownBoxBtnUpHoverTex = L"DropDownBoxArrowUpHover.png";
+	const String BuiltinEditorResources::DropDownBoxBtnUpNormalTex = u8"DropDownBoxArrowUpNormal.png";
+	const String BuiltinEditorResources::DropDownBoxBtnUpHoverTex = u8"DropDownBoxArrowUpHover.png";
 
-	const WString BuiltinEditorResources::DropDownBoxBtnDownNormalTex = L"DropDownBoxArrowDownNormal.png";
-	const WString BuiltinEditorResources::DropDownBoxBtnDownHoverTex = L"DropDownBoxArrowDownHover.png";
+	const String BuiltinEditorResources::DropDownBoxBtnDownNormalTex = u8"DropDownBoxArrowDownNormal.png";
+	const String BuiltinEditorResources::DropDownBoxBtnDownHoverTex = u8"DropDownBoxArrowDownHover.png";
 
-	const WString BuiltinEditorResources::DropDownBoxEntryExpNormalTex = L"DropDownBoxExpandBtnNormal.png";
-	const WString BuiltinEditorResources::DropDownBoxEntryExpHoverTex = L"DropDownBoxExpandBtnHover.png";
+	const String BuiltinEditorResources::DropDownBoxEntryExpNormalTex = u8"DropDownBoxExpandBtnNormal.png";
+	const String BuiltinEditorResources::DropDownBoxEntryExpHoverTex = u8"DropDownBoxExpandBtnHover.png";
 
-	const WString BuiltinEditorResources::DropDownSeparatorTex = L"DropDownBoxSeparator.png";
+	const String BuiltinEditorResources::DropDownSeparatorTex = u8"DropDownBoxSeparator.png";
 
-	const WString BuiltinEditorResources::MenuBarBgTex = L"MenuBarBackground.png";
-	const WString BuiltinEditorResources::MenuBarBansheeLogoTex = L"MenuBarLog.png";
+	const String BuiltinEditorResources::MenuBarBgTex = u8"MenuBarBackground.png";
+	const String BuiltinEditorResources::MenuBarBansheeLogoTex = u8"MenuBarLog.png";
 
-	const WString BuiltinEditorResources::MenuBarBtnNormalTex = L"MenuBarButtonNormal.png";
-	const WString BuiltinEditorResources::MenuBarBtnActiveTex = L"MenuBarButtonActive.png";
-	const WString BuiltinEditorResources::MenuBarBtnHoverTex = L"MenuBarButtonHover.png";
+	const String BuiltinEditorResources::MenuBarBtnNormalTex = u8"MenuBarButtonNormal.png";
+	const String BuiltinEditorResources::MenuBarBtnActiveTex = u8"MenuBarButtonActive.png";
+	const String BuiltinEditorResources::MenuBarBtnHoverTex = u8"MenuBarButtonHover.png";
 
-	const WString BuiltinEditorResources::MenuBarLineNormalTex = L"MenuBarLineNormal.png";
-	const WString BuiltinEditorResources::MenuBarLineActiveTex = L"MenuBarLineActive.png";
+	const String BuiltinEditorResources::MenuBarLineNormalTex = u8"MenuBarLineNormal.png";
+	const String BuiltinEditorResources::MenuBarLineActiveTex = u8"MenuBarLineActive.png";
 
-	const WString BuiltinEditorResources::ToolBarBtnNormalTex = L"ToolBarButtonNormal.png";
-	const WString BuiltinEditorResources::ToolBarBtnHoverTex = L"ToolBarButtonHover.png";
-	const WString BuiltinEditorResources::ToolBarBtnActiveTex = L"ToolBarButtonActive.png";
+	const String BuiltinEditorResources::ToolBarBtnNormalTex = u8"ToolBarButtonNormal.png";
+	const String BuiltinEditorResources::ToolBarBtnHoverTex = u8"ToolBarButtonHover.png";
+	const String BuiltinEditorResources::ToolBarBtnActiveTex = u8"ToolBarButtonActive.png";
 
-	const WString BuiltinEditorResources::ToolBarSeparatorTex = L"ToolBarSeparator.png";
+	const String BuiltinEditorResources::ToolBarSeparatorTex = u8"ToolBarSeparator.png";
 
-	const WString BuiltinEditorResources::TreeViewExpandButtonOffNormal = L"ExpandArrowNormalOff.png";
-	const WString BuiltinEditorResources::TreeViewExpandButtonOffHover = L"ExpandArrowHoverOff.png";
-	const WString BuiltinEditorResources::TreeViewExpandButtonOnNormal = L"ExpandArrowNormalOn.png";
-	const WString BuiltinEditorResources::TreeViewExpandButtonOnHover = L"ExpandArrowHoverOn.png";
+	const String BuiltinEditorResources::TreeViewExpandButtonOffNormal = u8"ExpandArrowNormalOff.png";
+	const String BuiltinEditorResources::TreeViewExpandButtonOffHover = u8"ExpandArrowHoverOff.png";
+	const String BuiltinEditorResources::TreeViewExpandButtonOnNormal = u8"ExpandArrowNormalOn.png";
+	const String BuiltinEditorResources::TreeViewExpandButtonOnHover = u8"ExpandArrowHoverOn.png";
 
-	const WString BuiltinEditorResources::TreeViewHighlightBackground = L"TreeViewHighlightBackground.psd";
-	const WString BuiltinEditorResources::TreeViewEditBox = L"TreeViewEditBox.psd";
-	const WString BuiltinEditorResources::TreeViewElementHighlight = L"TreeViewElementHighlight.psd";
-	const WString BuiltinEditorResources::TreeViewElementSepHighlight = L"TreeViewElementSepHighlight.psd";
+	const String BuiltinEditorResources::TreeViewHighlightBackground = u8"TreeViewHighlightBackground.psd";
+	const String BuiltinEditorResources::TreeViewEditBox = u8"TreeViewEditBox.psd";
+	const String BuiltinEditorResources::TreeViewElementHighlight = u8"TreeViewElementHighlight.psd";
+	const String BuiltinEditorResources::TreeViewElementSepHighlight = u8"TreeViewElementSepHighlight.psd";
 
-	const WString BuiltinEditorResources::ColorPickerSliderHorzHandleTex = L"ColorPickerSliderHorzHandle.psd";
-	const WString BuiltinEditorResources::ColorPickerSliderVertHandleTex = L"ColorPickerSliderVertHandle.psd";
-	const WString BuiltinEditorResources::ColorPickerSlider2DHandleTex = L"ColorPicker2DHandle.psd";
+	const String BuiltinEditorResources::ColorPickerSliderHorzHandleTex = u8"ColorPickerSliderHorzHandle.psd";
+	const String BuiltinEditorResources::ColorPickerSliderVertHandleTex = u8"ColorPickerSliderVertHandle.psd";
+	const String BuiltinEditorResources::ColorPickerSlider2DHandleTex = u8"ColorPicker2DHandle.psd";
 
-	const WString BuiltinEditorResources::ProgressBarFillTex = L"ProgressBarFill.png";
-	const WString BuiltinEditorResources::ProgressBarBgTex = L"ProgressBarBg.png";
+	const String BuiltinEditorResources::ProgressBarFillTex = u8"ProgressBarFill.png";
+	const String BuiltinEditorResources::ProgressBarBgTex = u8"ProgressBarBg.png";
 
-	const WString BuiltinEditorResources::SelectionAreaTex = L"SelectionHighlight.png";
-	const WString BuiltinEditorResources::SelectionBgTex = L"SelectionBg.psd";
+	const String BuiltinEditorResources::SelectionAreaTex = u8"SelectionHighlight.png";
+	const String BuiltinEditorResources::SelectionBgTex = u8"SelectionBg.psd";
 
-	const WString BuiltinEditorResources::TextureDropTex = L"TextureDrop.png";
-	const WString BuiltinEditorResources::TextureDropOnTex = L"TextureDropHover.png";
+	const String BuiltinEditorResources::TextureDropTex = u8"TextureDrop.png";
+	const String BuiltinEditorResources::TextureDropOnTex = u8"TextureDropHover.png";
 
-	const WString BuiltinEditorResources::XButtonNormalTex = L"XBtnNormal.png";
-	const WString BuiltinEditorResources::XButtonHoverTex = L"XBtnHover.png";
-	const WString BuiltinEditorResources::XButtonActiveTex = L"XBtnActive.png";
+	const String BuiltinEditorResources::XButtonNormalTex = u8"XBtnNormal.png";
+	const String BuiltinEditorResources::XButtonHoverTex = u8"XBtnHover.png";
+	const String BuiltinEditorResources::XButtonActiveTex = u8"XBtnActive.png";
 
-	const WString BuiltinEditorResources::StatusBarBgTex = L"StatusBarBackground.png";
-	const WString BuiltinEditorResources::ScrollAreaBgTex = L"ScrollAreaBg.png";
+	const String BuiltinEditorResources::StatusBarBgTex = u8"StatusBarBackground.png";
+	const String BuiltinEditorResources::ScrollAreaBgTex = u8"ScrollAreaBg.png";
 
-	const WString BuiltinEditorResources::InspectorTitleBgTex = L"InspectorTitleBg.png";
-	const WString BuiltinEditorResources::InspectorContentBgTex = L"InspectorContentBg.png";
-	const WString BuiltinEditorResources::InspectorContentBgAlternateTex = L"InspectorContentBgAlternate.png";
+	const String BuiltinEditorResources::InspectorTitleBgTex = u8"InspectorTitleBg.png";
+	const String BuiltinEditorResources::InspectorContentBgTex = u8"InspectorContentBg.png";
+	const String BuiltinEditorResources::InspectorContentBgAlternateTex = u8"InspectorContentBgAlternate.png";
 
-	const WString BuiltinEditorResources::LibraryEntryFirstBgTex = L"LibraryEntryFirstBg.png";
-	const WString BuiltinEditorResources::LibraryEntryBgTex = L"LibraryEntryBg.png";
-	const WString BuiltinEditorResources::LibraryEntryLastBgTex = L"LibraryEntryLastBg.png";
+	const String BuiltinEditorResources::LibraryEntryFirstBgTex = u8"LibraryEntryFirstBg.png";
+	const String BuiltinEditorResources::LibraryEntryBgTex = u8"LibraryEntryBg.png";
+	const String BuiltinEditorResources::LibraryEntryLastBgTex = u8"LibraryEntryLastBg.png";
 
-	const WString BuiltinEditorResources::LibraryEntryVertFirstBgTex = L"LibraryEntryVertFirstBg.png";
-	const WString BuiltinEditorResources::LibraryEntryVertBgTex = L"LibraryEntryVertBg.png";
-	const WString BuiltinEditorResources::LibraryEntryVertLastBgTex = L"LibraryEntryVertLastBg.png";
+	const String BuiltinEditorResources::LibraryEntryVertFirstBgTex = u8"LibraryEntryVertFirstBg.png";
+	const String BuiltinEditorResources::LibraryEntryVertBgTex = u8"LibraryEntryVertBg.png";
+	const String BuiltinEditorResources::LibraryEntryVertLastBgTex = u8"LibraryEntryVertLastBg.png";
 
-	const wchar_t* BuiltinEditorResources::SplashScreenName = L"SplashScreen.png";
+	const char* BuiltinEditorResources::SplashScreenName = u8"SplashScreen.png";
 
 	/************************************************************************/
 	/* 									SHADERS                      		*/
 	/************************************************************************/
 
-	const WString BuiltinEditorResources::ShaderDockOverlayFile = L"DockDropOverlay.bsl";
-	const WString BuiltinEditorResources::ShaderSceneGridFile = L"SceneGrid.bsl";
-	const WString BuiltinEditorResources::ShaderPickingCullNoneFile = L"PickingCullNone.bsl";
-	const WString BuiltinEditorResources::ShaderPickingCullCWFile = L"PickingCullCW.bsl";
-	const WString BuiltinEditorResources::ShaderPickingCullCCWFile = L"PickingCullCCW.bsl";
-	const WString BuiltinEditorResources::ShaderPickingAlphaCullNoneFile = L"PickingAlphaCullNone.bsl";
-	const WString BuiltinEditorResources::ShaderPickingAlphaCullCWFile = L"PickingAlphaCullCW.bsl";
-	const WString BuiltinEditorResources::ShaderPickingAlphaCullCCWFile = L"PickingAlphaCullCCW.bsl";
-	const WString BuiltinEditorResources::ShaderLineGizmoFile = L"LineGizmo.bsl";
-	const WString BuiltinEditorResources::ShaderWireGizmoFile = L"WireGizmo.bsl";
-	const WString BuiltinEditorResources::ShaderSolidGizmoFile = L"SolidGizmo.bsl";
-	const WString BuiltinEditorResources::ShaderLineHandleFile = L"LineHandle.bsl";
-	const WString BuiltinEditorResources::ShaderSolidHandleFile = L"SolidHandle.bsl";
-	const WString BuiltinEditorResources::ShaderHandleClearAlphaFile = L"ClearHandleAlpha.bsl";
-	const WString BuiltinEditorResources::ShaderIconGizmoFile = L"IconGizmo.bsl";
-	const WString BuiltinEditorResources::ShaderGizmoPickingFile = L"GizmoPicking.bsl";
-	const WString BuiltinEditorResources::ShaderGizmoPickingAlphaFile = L"GizmoPickingAlpha.bsl";
-	const WString BuiltinEditorResources::ShaderTextGizmoFile = L"TextGizmo.bsl";
-	const WString BuiltinEditorResources::ShaderSelectionFile = L"Selection.bsl";
+	const String BuiltinEditorResources::ShaderDockOverlayFile = u8"DockDropOverlay.bsl";
+	const String BuiltinEditorResources::ShaderSceneGridFile = u8"SceneGrid.bsl";
+	const String BuiltinEditorResources::ShaderPickingCullNoneFile = u8"PickingCullNone.bsl";
+	const String BuiltinEditorResources::ShaderPickingCullCWFile = u8"PickingCullCW.bsl";
+	const String BuiltinEditorResources::ShaderPickingCullCCWFile = u8"PickingCullCCW.bsl";
+	const String BuiltinEditorResources::ShaderPickingAlphaCullNoneFile = u8"PickingAlphaCullNone.bsl";
+	const String BuiltinEditorResources::ShaderPickingAlphaCullCWFile = u8"PickingAlphaCullCW.bsl";
+	const String BuiltinEditorResources::ShaderPickingAlphaCullCCWFile = u8"PickingAlphaCullCCW.bsl";
+	const String BuiltinEditorResources::ShaderLineGizmoFile = u8"LineGizmo.bsl";
+	const String BuiltinEditorResources::ShaderWireGizmoFile = u8"WireGizmo.bsl";
+	const String BuiltinEditorResources::ShaderSolidGizmoFile = u8"SolidGizmo.bsl";
+	const String BuiltinEditorResources::ShaderLineHandleFile = u8"LineHandle.bsl";
+	const String BuiltinEditorResources::ShaderSolidHandleFile = u8"SolidHandle.bsl";
+	const String BuiltinEditorResources::ShaderHandleClearAlphaFile = u8"ClearHandleAlpha.bsl";
+	const String BuiltinEditorResources::ShaderIconGizmoFile = u8"IconGizmo.bsl";
+	const String BuiltinEditorResources::ShaderGizmoPickingFile = u8"GizmoPicking.bsl";
+	const String BuiltinEditorResources::ShaderGizmoPickingAlphaFile = u8"GizmoPickingAlpha.bsl";
+	const String BuiltinEditorResources::ShaderTextGizmoFile = u8"TextGizmo.bsl";
+	const String BuiltinEditorResources::ShaderSelectionFile = u8"Selection.bsl";
 
 	/************************************************************************/
 	/* 								OTHER							  		*/
 	/************************************************************************/
-	const WString BuiltinEditorResources::EmptyShaderCodeFile = L"EmptyShaderText.txt";
-	const WString BuiltinEditorResources::EmptyCSScriptCodeFile = L"EmptyCSScriptText.txt";
+	const String BuiltinEditorResources::EmptyShaderCodeFile = u8"EmptyShaderText.txt";
+	const String BuiltinEditorResources::EmptyCSScriptCodeFile = u8"EmptyCSScriptText.txt";
 
 	BuiltinEditorResources::BuiltinEditorResources()
 	{
 		// Set up paths
-		BuiltinRawDataFolder = gEditorApplication().getDataPath() + L"Raw/";
+		BuiltinRawDataFolder = gEditorApplication().getDataPath() + "Raw/";
 		EditorRawSkinFolder = BuiltinRawDataFolder + SkinFolder;
 		EditorRawIconsFolder = BuiltinRawDataFolder + IconFolder;
 		EditorRawShaderFolder = BuiltinRawDataFolder + ShaderFolder;
@@ -334,7 +334,7 @@ namespace bs
 		{
 			time_t lastUpdateTime;
 			UINT32 modifications = BuiltinResourcesHelper::checkForModifications(BuiltinRawDataFolder,
-				BuiltinDataFolder + L"Timestamp.asset", lastUpdateTime);
+				BuiltinDataFolder + "Timestamp.asset", lastUpdateTime);
 
 			// Check if manifest needs to be rebuilt
 			if (modifications == 0 && !FileSystem::exists(ResourceManifestPath))
@@ -361,7 +361,7 @@ namespace bs
 				}
 
 				preprocess(modifications == 2, lastUpdateTime);
-				BuiltinResourcesHelper::writeTimestamp(BuiltinDataFolder + L"Timestamp.asset");
+				BuiltinResourcesHelper::writeTimestamp(BuiltinDataFolder + "Timestamp.asset");
 
 				ResourceManifest::save(mResourceManifest, ResourceManifestPath, BuiltinDataFolder);
 			}
@@ -400,9 +400,9 @@ namespace bs
 		mShaderHandleLine = getShader(ShaderLineHandleFile);
 		mShaderSelection = getShader(ShaderSelectionFile);
 
-		mDefaultFont = gResources().load<Font>(BuiltinDataFolder + (DefaultFontFilename + L".asset"));
-		mDefaultAAFont = gResources().load<Font>(BuiltinDataFolder + (DefaultAAFontFilename + L".asset"));
-		mSkin = gResources().load<GUISkin>(BuiltinDataFolder + (GUISkinFile + L".asset"));
+		mDefaultFont = gResources().load<Font>(BuiltinDataFolder + (DefaultFontFilename + ".asset"));
+		mDefaultAAFont = gResources().load<Font>(BuiltinDataFolder + (DefaultAAFontFilename + ".asset"));
+		mSkin = gResources().load<GUISkin>(BuiltinDataFolder + (GUISkinFile + ".asset"));
 	}
 
 	BuiltinEditorResources::~BuiltinEditorResources()
@@ -606,8 +606,8 @@ namespace bs
 
 		// Import splash screen
 		{
-			Path inputPath = BuiltinRawDataFolder + WString(SplashScreenName);
-			Path outputPath = BuiltinDataFolder + (WString(SplashScreenName) + L".asset");
+			Path inputPath = BuiltinRawDataFolder + String(SplashScreenName);
+			Path outputPath = BuiltinDataFolder + (String(SplashScreenName) + ".asset");
 
 			auto textureIO = gImporter().createImportOptions<TextureImportOptions>(inputPath);
 			textureIO->setCPUCached(true);
@@ -624,7 +624,7 @@ namespace bs
 		// Generate & save GUI skin
 		{
 			SPtr<GUISkin> skin = generateGUISkin();
-			Path outputPath = BuiltinDataFolder + (GUISkinFile + L".asset");
+			Path outputPath = BuiltinDataFolder + (GUISkinFile + ".asset");
 
 			HResource skinResource = gResources()._createResourceHandle(skin, UUID("ec0ea68d-efa5-4a3b-a6fc-b15aaec9689f"));
 
@@ -640,12 +640,12 @@ namespace bs
 		SPtr<GUISkin> skin = GUISkin::_createPtr();
 
 		Path defaultFontPath = BuiltinDataFolder;
-		defaultFontPath.append(DefaultFontFilename + L".asset");
+		defaultFontPath.append(DefaultFontFilename + ".asset");
 
 		HFont defaultFont = gResources().load<Font>(defaultFontPath);
 
 		Path defaultAAFontPath = BuiltinDataFolder;
-		defaultAAFontPath.append(DefaultAAFontFilename + L".asset");
+		defaultAAFontPath.append(DefaultAAFontFilename + ".asset");
 
 		HFont defaultAAFont = gResources().load<Font>(defaultAAFontPath);
 
@@ -1428,7 +1428,7 @@ namespace bs
 		/************************************************************************/
 
 		GUIElementStyle separator;
-		separator.normal.texture = getGUITexture(L"Separator.png");
+		separator.normal.texture = getGUITexture("Separator.png");
 		separator.hover.texture = separator.normal.texture;
 		separator.active.texture = separator.normal.texture;
 		separator.fixedHeight = false;
@@ -1443,12 +1443,12 @@ namespace bs
 		/************************************************************************/
 
 		GUIElementStyle headerBackground;
-		headerBackground.normal.texture = getGUITexture(L"HeaderBg.png");
+		headerBackground.normal.texture = getGUITexture("HeaderBg.png");
 
 		skin->setStyle("HeaderBackground", headerBackground);
 
 		GUIElementStyle header;
-		header.normal.texture = getGUITexture(L"Header.png");
+		header.normal.texture = getGUITexture("Header.png");
 		header.normal.textColor = TextNormalColor;
 		header.border.bottom = 2;
 		header.fixedHeight = true;
@@ -2219,26 +2219,26 @@ namespace bs
 		return skin;
 	}
 
-	HSpriteTexture BuiltinEditorResources::getGUITexture(const WString& name) const
+	HSpriteTexture BuiltinEditorResources::getGUITexture(const String& name) const
 	{
 		Path texturePath = EditorSkinSpritesFolder;
-		texturePath.append(L"sprite_" + name + L".asset");
+		texturePath.append("sprite_" + name + ".asset");
 
 		return gResources().load<SpriteTexture>(texturePath);
 	}
 
-	HSpriteTexture BuiltinEditorResources::getGUIIcon(const WString& name) const
+	HSpriteTexture BuiltinEditorResources::getGUIIcon(const String& name) const
 	{
 		Path texturePath = EditorIconSpritesFolder;
-		texturePath.append(L"sprite_" + name + L".asset");
+		texturePath.append("sprite_" + name + ".asset");
 
 		return gResources().load<SpriteTexture>(texturePath);
 	}
 
-	HShader BuiltinEditorResources::getShader(const WString& name) const
+	HShader BuiltinEditorResources::getShader(const String& name) const
 	{
 		Path programPath = EditorShaderFolder;
-		programPath.append(name + L".asset");
+		programPath.append(name + ".asset");
 
 		HShader shader = gResources().load<Shader>(programPath);
 
@@ -2330,7 +2330,7 @@ namespace bs
 
 	HSpriteTexture BuiltinEditorResources::getLibraryIcon(ProjectIcon icon, int size) const
 	{
-		WString iconName;
+		String iconName;
 
 		switch (icon)
 		{
@@ -2388,11 +2388,11 @@ namespace bs
 			return HSpriteTexture();
 
 		if (size <= 16)
-			iconName += L"16";
+			iconName += "16";
 		else if (size <= 32)
-			iconName += L"32";
+			iconName += "32";
 		else if (size <= 48)
-			iconName += L"48";
+			iconName += "48";
 
 		return getGUIIcon(iconName);
 	}
@@ -2402,49 +2402,49 @@ namespace bs
 		switch (icon)
 		{
 		case ToolbarIcon::NewCamera:
-			return getGUIIcon(L"ToolbarNewCameraIcon.png");
+			return getGUIIcon("ToolbarNewCameraIcon.png");
 		case ToolbarIcon::NewRenderable:
-			return getGUIIcon(L"ToolbarNewRenderableIcon.png");
+			return getGUIIcon("ToolbarNewRenderableIcon.png");
 		case ToolbarIcon::NewPointLight:
-			return getGUIIcon(L"ToolbarNewPointLightIcon.png");
+			return getGUIIcon("ToolbarNewPointLightIcon.png");
 		case ToolbarIcon::NewDirLight:
-			return getGUIIcon(L"ToolbarNewDirectionalLightIcon.png");
+			return getGUIIcon("ToolbarNewDirectionalLightIcon.png");
 		case ToolbarIcon::NewSpotLight:
-			return getGUIIcon(L"ToolbarNewSpotLightIcon.png");
+			return getGUIIcon("ToolbarNewSpotLightIcon.png");
 		case ToolbarIcon::NewSceneObject:
-			return getGUIIcon(L"ToolbarNewSceneObjectIcon.png");
+			return getGUIIcon("ToolbarNewSceneObjectIcon.png");
 		case ToolbarIcon::NewCube:
-			return getGUIIcon(L"ToolbarNewCubeIcon.png");
+			return getGUIIcon("ToolbarNewCubeIcon.png");
 		case ToolbarIcon::NewSphere:
-			return getGUIIcon(L"ToolbarNewSphereIcon.png");
+			return getGUIIcon("ToolbarNewSphereIcon.png");
 		case ToolbarIcon::NewCone:
-			return getGUIIcon(L"ToolbarNewConeIcon.png");
+			return getGUIIcon("ToolbarNewConeIcon.png");
 		case ToolbarIcon::NewQuad:
-			return getGUIIcon(L"ToolbarNewQuadIcon.png");
+			return getGUIIcon("ToolbarNewQuadIcon.png");
 		case ToolbarIcon::NewMat:
-			return getGUIIcon(L"ToolbarNewMaterialIcon.png");
+			return getGUIIcon("ToolbarNewMaterialIcon.png");
 		case ToolbarIcon::NewCSScript:
-			return getGUIIcon(L"ToolbarNewCSScriptIcon.png");
+			return getGUIIcon("ToolbarNewCSScriptIcon.png");
 		case ToolbarIcon::NewShader:
-			return getGUIIcon(L"ToolbarNewShaderIcon.png");
+			return getGUIIcon("ToolbarNewShaderIcon.png");
 		case ToolbarIcon::NewSpriteTex:
-			return getGUIIcon(L"ToolbarNewSpriteTextureIcon.png");
+			return getGUIIcon("ToolbarNewSpriteTextureIcon.png");
 		case ToolbarIcon::Pause:
-			return getGUIIcon(L"ToolbarPauseIcon.png");
+			return getGUIIcon("ToolbarPauseIcon.png");
 		case ToolbarIcon::Play:
-			return getGUIIcon(L"ToolbarPlayIcon.png");
+			return getGUIIcon("ToolbarPlayIcon.png");
 		case ToolbarIcon::Step:
-			return getGUIIcon(L"ToolbarStepIcon.png");
+			return getGUIIcon("ToolbarStepIcon.png");
 		case ToolbarIcon::Undo:
-			return getGUIIcon(L"ToolbarUndoIcon.png");
+			return getGUIIcon("ToolbarUndoIcon.png");
 		case ToolbarIcon::Redo:
-			return getGUIIcon(L"ToolbarRedoIcon.png");
+			return getGUIIcon("ToolbarRedoIcon.png");
 		case ToolbarIcon::OpenProject:
-			return getGUIIcon(L"ToolbarOpenProjectIcon.png");
+			return getGUIIcon("ToolbarOpenProjectIcon.png");
 		case ToolbarIcon::SaveProject:
-			return getGUIIcon(L"ToolbarSaveProjectIcon.png");
+			return getGUIIcon("ToolbarSaveProjectIcon.png");
 		case ToolbarIcon::SaveScene:
-			return getGUIIcon(L"ToolbarSaveSceneIcon.png");
+			return getGUIIcon("ToolbarSaveSceneIcon.png");
 		}
 
 		return HSpriteTexture();
@@ -2458,44 +2458,44 @@ namespace bs
 		switch (icon)
 		{
 		case SceneWindowIcon::View:
-			off = getGUIIcon(L"SceneViewIcon.png");
-			on = getGUIIcon(L"SceneViewIconOn.png");
+			off = getGUIIcon("SceneViewIcon.png");
+			on = getGUIIcon("SceneViewIconOn.png");
 			break;
 		case SceneWindowIcon::Move:
-			off = getGUIIcon(L"SceneMoveIcon.png");
-			on = getGUIIcon(L"SceneMoveIconOn.png");
+			off = getGUIIcon("SceneMoveIcon.png");
+			on = getGUIIcon("SceneMoveIconOn.png");
 			break;
 		case SceneWindowIcon::Rotate:
-			off = getGUIIcon(L"SceneRotateIcon.png");
-			on = getGUIIcon(L"SceneRotateIconOn.png");
+			off = getGUIIcon("SceneRotateIcon.png");
+			on = getGUIIcon("SceneRotateIconOn.png");
 			break;
 		case SceneWindowIcon::Scale:
-			off = getGUIIcon(L"SceneScaleIcon.png");
-			on = getGUIIcon(L"SceneScaleIconOn.png");
+			off = getGUIIcon("SceneScaleIcon.png");
+			on = getGUIIcon("SceneScaleIconOn.png");
 			break;
 		case SceneWindowIcon::Pivot:
-			off = getGUIIcon(L"ScenePivotIcon.png");
-			on = getGUIIcon(L"ScenePivotIconOn.png");
+			off = getGUIIcon("ScenePivotIcon.png");
+			on = getGUIIcon("ScenePivotIconOn.png");
 			break;
 		case SceneWindowIcon::Center:
-			off = getGUIIcon(L"SceneCenterIcon.png");
-			on = getGUIIcon(L"SceneCenterIconOn.png");
+			off = getGUIIcon("SceneCenterIcon.png");
+			on = getGUIIcon("SceneCenterIconOn.png");
 			break;
 		case SceneWindowIcon::Local:
-			off = getGUIIcon(L"SceneLocalIcon.png");
-			on = getGUIIcon(L"SceneLocalIconOn.png");
+			off = getGUIIcon("SceneLocalIcon.png");
+			on = getGUIIcon("SceneLocalIconOn.png");
 			break;
 		case SceneWindowIcon::World:
-			off = getGUIIcon(L"SceneWorldIcon.png");
-			on = getGUIIcon(L"SceneWorldIconOn.png");
+			off = getGUIIcon("SceneWorldIcon.png");
+			on = getGUIIcon("SceneWorldIconOn.png");
 			break;
 		case SceneWindowIcon::MoveSnap:
-			off = getGUIIcon(L"SceneMoveSnapIcon.png");
-			on = getGUIIcon(L"SceneMoveSnapIconOn.png");
+			off = getGUIIcon("SceneMoveSnapIcon.png");
+			on = getGUIIcon("SceneMoveSnapIconOn.png");
 			break;
 		case SceneWindowIcon::RotateSnap:
-			off = getGUIIcon(L"SceneRotateSnapIcon.png");
-			on = getGUIIcon(L"SceneRotateSnapIconOn.png");
+			off = getGUIIcon("SceneRotateSnapIcon.png");
+			on = getGUIIcon("SceneRotateSnapIconOn.png");
 			break;
 		}
 
@@ -2517,13 +2517,13 @@ namespace bs
 		switch (icon)
 		{
 		case LibraryWindowIcon::Home:
-			return getGUIIcon(L"LibraryHomeIcon.png");
+			return getGUIIcon("LibraryHomeIcon.png");
 		case LibraryWindowIcon::Up:
-			return getGUIIcon(L"LibraryUpIcon.png");
+			return getGUIIcon("LibraryUpIcon.png");
 		case LibraryWindowIcon::Clear:
-			return getGUIIcon(L"LibraryClearSearchIcon.png");
+			return getGUIIcon("LibraryClearSearchIcon.png");
 		case LibraryWindowIcon::Options:
-			return getGUIIcon(L"LibraryOptionsIcon.png");
+			return getGUIIcon("LibraryOptionsIcon.png");
 		}
 
 		return HSpriteTexture();
@@ -2534,27 +2534,27 @@ namespace bs
 		switch (icon)
 		{
 		case InspectorWindowIcon::Create:
-			return getGUIIcon(L"InspectorCreateIcon.png");
+			return getGUIIcon("InspectorCreateIcon.png");
 		case InspectorWindowIcon::Clone:
-			return getGUIIcon(L"InspectorCloneIcon.png");
+			return getGUIIcon("InspectorCloneIcon.png");
 		case InspectorWindowIcon::Clear:
-			return getGUIIcon(L"InspectorClearIcon.png");
+			return getGUIIcon("InspectorClearIcon.png");
 		case InspectorWindowIcon::Resize:
-			return getGUIIcon(L"InspectorResizeIcon.png");
+			return getGUIIcon("InspectorResizeIcon.png");
 		case InspectorWindowIcon::Delete:
-			return getGUIIcon(L"InspectorDeleteIcon.png");
+			return getGUIIcon("InspectorDeleteIcon.png");
 		case InspectorWindowIcon::MoveUp:
-			return getGUIIcon(L"InspectorMoveUpIcon.png");
+			return getGUIIcon("InspectorMoveUpIcon.png");
 		case InspectorWindowIcon::MoveDown:
-			return getGUIIcon(L"InspectorMoveDownIcon.png");
+			return getGUIIcon("InspectorMoveDownIcon.png");
 		case InspectorWindowIcon::Edit:
-			return getGUIIcon(L"InspectorEditIcon.png");
+			return getGUIIcon("InspectorEditIcon.png");
 		case InspectorWindowIcon::Apply:
-			return getGUIIcon(L"InspectorApplyIcon.png");
+			return getGUIIcon("InspectorApplyIcon.png");
 		case InspectorWindowIcon::Add:
-			return getGUIIcon(L"InspectorAddIcon.png");
+			return getGUIIcon("InspectorAddIcon.png");
 		case InspectorWindowIcon::Cancel:
-			return getGUIIcon(L"InspectorCancelIcon.png");
+			return getGUIIcon("InspectorCancelIcon.png");
 		}
 
 		return HSpriteTexture();
@@ -2568,35 +2568,35 @@ namespace bs
 		switch (icon)
 		{
 		case AnimationWindowIcon::Play:
-			off = getGUIIcon(L"AnimationPlayIcon.png");
-			on = getGUIIcon(L"AnimationPlayIconOn.png");
+			off = getGUIIcon("AnimationPlayIcon.png");
+			on = getGUIIcon("AnimationPlayIconOn.png");
 			break;
 		case AnimationWindowIcon::Record:
-			off = getGUIIcon(L"AnimationRecordIcon.png");
-			on = getGUIIcon(L"AnimationRecordIconOn.png");
+			off = getGUIIcon("AnimationRecordIcon.png");
+			on = getGUIIcon("AnimationRecordIconOn.png");
 			break;
 		case AnimationWindowIcon::FrameForward:
-			off = getGUIIcon(L"AnimationFrameForwardIcon.png");
-			on = getGUIIcon(L"AnimationFrameForwardIconOn.png");
+			off = getGUIIcon("AnimationFrameForwardIcon.png");
+			on = getGUIIcon("AnimationFrameForwardIconOn.png");
 			break;
 		case AnimationWindowIcon::FrameBack:
-			off = getGUIIcon(L"AnimationFrameBackIcon.png");
-			on = getGUIIcon(L"AnimationFrameBackIconOn.png");
+			off = getGUIIcon("AnimationFrameBackIcon.png");
+			on = getGUIIcon("AnimationFrameBackIconOn.png");
 			break;
 		case AnimationWindowIcon::AddEvent:
-			off = getGUIIcon(L"AnimationAddEventIcon.png");
-			on = getGUIIcon(L"AnimationAddEventIconOn.png");
+			off = getGUIIcon("AnimationAddEventIcon.png");
+			on = getGUIIcon("AnimationAddEventIconOn.png");
 			break;
 		case AnimationWindowIcon::AddKeyframe:
-			off = getGUIIcon(L"AnimationAddKeyframeIcon.png");
-			on = getGUIIcon(L"AnimationAddKeyframeIconOn.png");
+			off = getGUIIcon("AnimationAddKeyframeIcon.png");
+			on = getGUIIcon("AnimationAddKeyframeIconOn.png");
 			break;
 		case AnimationWindowIcon::Event:
-			off = getGUIIcon(L"AnimationEventIcon.png");
+			off = getGUIIcon("AnimationEventIcon.png");
 			on = off;
 			break;
 		case AnimationWindowIcon::Keyframe:
-			off = getGUIIcon(L"AnimationKeyframeIcon.png");
+			off = getGUIIcon("AnimationKeyframeIcon.png");
 			on = off;
 			break;
 		}
@@ -2621,9 +2621,9 @@ namespace bs
 		case EditorIcon::X:
 			return getGUIIcon(XButtonNormalTex);
 		case EditorIcon::Component:
-			return getGUIIcon(L"IconComponent.png");
+			return getGUIIcon("IconComponent.png");
 		case EditorIcon::SceneObject:
-			return getGUIIcon(L"IconSceneObject.png");
+			return getGUIIcon("IconSceneObject.png");
 		}
 
 		return HSpriteTexture();
@@ -2638,11 +2638,11 @@ namespace bs
 				switch (icon)
 				{
 				case LogMessageIcon::Info:
-					return getGUIIcon(L"IconInfoDark.png");
+					return getGUIIcon("IconInfoDark.png");
 				case LogMessageIcon::Warning:
-					return getGUIIcon(L"IconWarningDark.png");
+					return getGUIIcon("IconWarningDark.png");
 				case LogMessageIcon::Error:
-					return getGUIIcon(L"IconErrorDark.png");
+					return getGUIIcon("IconErrorDark.png");
 				}
 			}
 			else
@@ -2650,11 +2650,11 @@ namespace bs
 				switch (icon)
 				{
 				case LogMessageIcon::Info:
-					return getGUIIcon(L"IconInfo.png");
+					return getGUIIcon("IconInfo.png");
 				case LogMessageIcon::Warning:
-					return getGUIIcon(L"IconWarning.png");
+					return getGUIIcon("IconWarning.png");
 				case LogMessageIcon::Error:
-					return getGUIIcon(L"IconError.png");
+					return getGUIIcon("IconError.png");
 				}
 			}
 		}
@@ -2663,11 +2663,11 @@ namespace bs
 			switch (icon)
 			{
 			case LogMessageIcon::Info:
-				return getGUIIcon(L"IconInfo32.png");
+				return getGUIIcon("IconInfo32.png");
 			case LogMessageIcon::Warning:
-				return getGUIIcon(L"IconWarning32.png");
+				return getGUIIcon("IconWarning32.png");
 			case LogMessageIcon::Error:
-				return getGUIIcon(L"IconError32.png");
+				return getGUIIcon("IconError32.png");
 			}
 		}
 
@@ -2676,34 +2676,34 @@ namespace bs
 
 	SPtr<PixelData> BuiltinEditorResources::getSplashScreen()
 	{
-		Path splashScreenPath = gEditorApplication().getDataPath() + (WString(SplashScreenName) + L".asset");
+		Path splashScreenPath = gEditorApplication().getDataPath() + (String(SplashScreenName) + ".asset");
 		FileDecoder fd(splashScreenPath);
 
 		return std::static_pointer_cast<PixelData>(fd.decode());
 	}
 
-	WString BuiltinEditorResources::getEmptyShaderCode() const
+	String BuiltinEditorResources::getEmptyShaderCode() const
 	{
 		Path filePath = BuiltinDataFolder;
 		filePath.append(EmptyShaderCodeFile);
 
 		SPtr<DataStream> fileStream = FileSystem::openFile(filePath);
 		if (fileStream != nullptr)
-			return fileStream->getAsWString();
+			return fileStream->getAsString();
 
-		return StringUtil::WBLANK;
+		return StringUtil::BLANK;
 	}
 
-	WString BuiltinEditorResources::getEmptyCSScriptCode() const
+	String BuiltinEditorResources::getEmptyCSScriptCode() const
 	{
 		Path filePath = BuiltinDataFolder;
 		filePath.append(EmptyCSScriptCodeFile);
 
 		SPtr<DataStream> fileStream = FileSystem::openFile(filePath);
 		if (fileStream != nullptr)
-			return fileStream->getAsWString();
+			return fileStream->getAsString();
 
-		return StringUtil::WBLANK;
+		return StringUtil::BLANK;
 	}
 
 	Path BuiltinEditorResources::getShaderIncludeFolder()

+ 3 - 3
Source/EditorCore/Build/BsPlatformInfo.h

@@ -26,7 +26,7 @@ namespace bs
 		virtual ~PlatformInfo();
 
 		PlatformType type; /**< Type of platform this object contains data for. */
-		WString defines; /**< A set of semicolon separated defines to use when compiling scripts for this platform. */
+		String defines; /**< A set of semicolon separated defines to use when compiling scripts for this platform. */
 		WeakResourceHandle<Prefab> mainScene; /**< Default scene that is loaded when the application is started. */
 		bool fullscreen; /**< If true the application will be started in fullscreen using user's desktop resolution. */
 		UINT32 windowedWidth; /**< Width of the window if not starting the application in fullscreen. */
@@ -39,7 +39,7 @@ namespace bs
 	public:
 		friend class PlatformInfoRTTI;
 		static RTTITypeBase* getRTTIStatic();
-		virtual RTTITypeBase* getRTTI() const override;
+		RTTITypeBase* getRTTI() const override;
 	};
 
 	/** Contains Windows specific per-platform information used primarily for build purposes. */
@@ -56,7 +56,7 @@ namespace bs
 	public:
 		friend class WinPlatformInfoRTTI;
 		static RTTITypeBase* getRTTIStatic();
-		virtual RTTITypeBase* getRTTI() const override;
+		RTTITypeBase* getRTTI() const override;
 	};
 
 	/** @} */

+ 14 - 14
Source/EditorCore/CodeEditor/BsCodeEditor.cpp

@@ -95,31 +95,31 @@ namespace bs
 			TID_ScriptCode, TID_PlainText, TID_Shader, TID_ShaderInclude
 		};
 
-		Vector<ProjectLibrary::LibraryEntry*> libraryEntries = gProjectLibrary().search(L"*", scriptTypeIds);
+		Vector<ProjectLibrary::LibraryEntry*> libraryEntries = gProjectLibrary().search("*", scriptTypeIds);
 		
 		PlatformType activePlatform = BuildManager::instance().getActivePlatform();
-		Vector<WString> frameworkAssemblies = BuildManager::instance().getFrameworkAssemblies(activePlatform);
+		Vector<String> frameworkAssemblies = BuildManager::instance().getFrameworkAssemblies(activePlatform);
 
 		slnData.projects.push_back(CodeProjectData());
 		slnData.projects.push_back(CodeProjectData());
 
 		// Game project
 		CodeProjectData& gameProject = slnData.projects[0];
-		gameProject.name = toWString(SCRIPT_GAME_ASSEMBLY);
+		gameProject.name = String(SCRIPT_GAME_ASSEMBLY);
 		gameProject.defines = BuildManager::instance().getDefines(activePlatform);
 		
 		//// Add references
-		gameProject.assemblyReferences.push_back(CodeProjectReference{ toWString(ENGINE_ASSEMBLY), gApplication().getEngineAssemblyPath() });
+		gameProject.assemblyReferences.push_back(CodeProjectReference{ String(ENGINE_ASSEMBLY), gApplication().getEngineAssemblyPath() });
 		for (auto& assemblyName : frameworkAssemblies)
 			gameProject.assemblyReferences.push_back(CodeProjectReference{ assemblyName, Path::BLANK });
 
 		// Editor project
 		CodeProjectData& editorProject = slnData.projects[1];
-		editorProject.name = toWString(SCRIPT_EDITOR_ASSEMBLY);
+		editorProject.name = String(SCRIPT_EDITOR_ASSEMBLY);
 
 		//// Add references
-		editorProject.assemblyReferences.push_back(CodeProjectReference{ toWString(ENGINE_ASSEMBLY), gApplication().getEngineAssemblyPath() });
-		editorProject.assemblyReferences.push_back(CodeProjectReference{ toWString(EDITOR_ASSEMBLY), gEditorApplication().getEditorAssemblyPath() });
+		editorProject.assemblyReferences.push_back(CodeProjectReference{ String(ENGINE_ASSEMBLY), gApplication().getEngineAssemblyPath() });
+		editorProject.assemblyReferences.push_back(CodeProjectReference{ String(EDITOR_ASSEMBLY), gEditorApplication().getEditorAssemblyPath() });
 		for (auto& assemblyName : frameworkAssemblies)
 			gameProject.assemblyReferences.push_back(CodeProjectReference{ assemblyName, Path::BLANK });
 
@@ -155,7 +155,7 @@ namespace bs
 	Path CodeEditorManager::getSolutionPath() const
 	{
 		Path path = gEditorApplication().getProjectPath();
-		path.append(gEditorApplication().getProjectName() + L".sln");
+		path.append(gEditorApplication().getProjectName() + ".sln");
 
 		return path;
 	}
@@ -263,7 +263,7 @@ EndProject)";
 	<None Include="{0}"/>)";
 
 	/**	Generates a C# project GUID from the project name. */
-	String getProjectGUID(const WString& projectName)
+	String getProjectGUID(const String& projectName)
 	{
 		static const String guidTemplate = "{0}-{1}-{2}-{3}-{4}";
 		String hash = md5(projectName);
@@ -298,7 +298,7 @@ EndProject)";
 		for (auto& project : data.projects)
 		{
 			String guid = getProjectGUID(project.name);
-			String projectName = toString(project.name);
+			String projectName = project.name;
 
 			projectEntriesStream << StringUtil::format(PROJ_ENTRY_TEMPLATE, projectName, projectName + ".csproj", guid);
 			projectPlatformsStream << StringUtil::format(PROJ_PLATFORM_TEMPLATE, guid);
@@ -345,7 +345,7 @@ EndProject)";
 
 		for (auto& referenceEntry : projectData.assemblyReferences)
 		{
-			String referenceName = toString(referenceEntry.name);
+			String referenceName = referenceEntry.name;
 
 			if (referenceEntry.path.isEmpty())
 				tempStream << StringUtil::format(REFERENCE_ENTRY_TEMPLATE, referenceName);
@@ -359,7 +359,7 @@ EndProject)";
 
 		for (auto& referenceEntry : projectData.projectReferences)
 		{
-			String referenceName = toString(referenceEntry.name);
+			String referenceName = referenceEntry.name;
 			String projectGUID = getProjectGUID(referenceEntry.name);
 
 			tempStream << StringUtil::format(REFERENCE_PROJECT_ENTRY_TEMPLATE, referenceName, projectGUID);
@@ -369,12 +369,12 @@ EndProject)";
 		tempStream.str("");
 		tempStream.clear();
 
-		tempStream << toString(projectData.defines);
+		tempStream << projectData.defines;
 
 		String defines = tempStream.str();
 		String projectGUID = getProjectGUID(projectData.name);
 
 		return StringUtil::format(PROJ_TEMPLATE, versionData[version].toolsVersion, projectGUID, 
-			toString(projectData.name), defines, referenceEntries, projectReferenceEntries, codeEntries, nonCodeEntries);
+			projectData.name, defines, referenceEntries, projectReferenceEntries, codeEntries, nonCodeEntries);
 	}
 }

+ 4 - 4
Source/EditorCore/CodeEditor/BsCodeEditor.h

@@ -17,17 +17,17 @@ namespace bs
 	/** Contains data about a reference to a project in an external editor solution. */
 	struct BS_ED_EXPORT CodeProjectReference
 	{
-		WString name;
+		String name;
 		Path path;
 	};
 
 	/**	Contains data about a single project in an external editor solution. */
 	struct BS_ED_EXPORT CodeProjectData
 	{
-		WString name;
+		String name;
 		Vector<Path> codeFiles;
 		Vector<Path> nonCodeFiles;
-		WString defines;
+		String defines;
 		Vector<CodeProjectReference> assemblyReferences;
 		Vector<CodeProjectReference> projectReferences;
 	};
@@ -35,7 +35,7 @@ namespace bs
 	/**	Contains data about an external editor solution, including all projects contained. */
 	struct BS_ED_EXPORT CodeSolutionData
 	{
-		WString name;
+		String name;
 		Vector<CodeProjectData> projects;
 	};
 

+ 10 - 9
Source/EditorCore/CodeEditor/BsMDCodeEditor.cpp

@@ -46,21 +46,21 @@ namespace bs
 
 	void MDCodeEditor::openFile(const Path& solutionPath, const Path& filePath, UINT32 lineNumber) const
 	{
-		WString args = L"--no-splash \"" + solutionPath.toWString() + L"\" \"" + filePath.toWString() + L";" + toWString(lineNumber) + L"\"";
+		String args = "--no-splash \"" + solutionPath.toString() + "\" \"" + filePath.toString() + ";" + toString(lineNumber) + "\"";
 
 #if BS_PLATFORM == BS_PLATFORM_WIN32
-		WString pathStr = mExecPath.toWString();
-		ShellExecuteW(0, L"open", pathStr.c_str(), args.c_str(), NULL, SW_HIDE);
+		WString pathStr = UTF8::toWide(mExecPath.toString());
+		WString wideArgs = UTF8::toWide(args);
+		ShellExecuteW(0, L"open", pathStr.c_str(), wideArgs.c_str(), NULL, SW_HIDE);
 #elif BS_PLATFORM == BS_PLATFORM_LINUX
-		String narrowArgs = UTF8::fromWide(args);
 		pid_t pid = fork();
 
 		if(pid == 0)
 		{
 			const char* commandPattern = "flatpak run com.xamarin.MonoDevelop %s";
 
-			char* commandStr = (char*) malloc((UINT32) narrowArgs.size() + (UINT32) strlen(commandPattern) + 1);
-			sprintf(commandStr, commandPattern, narrowArgs.c_str());
+			char* commandStr = (char*) malloc((UINT32) args.size() + (UINT32) strlen(commandPattern) + 1);
+			sprintf(commandStr, commandPattern, args.c_str());
 
 			system(commandStr);
 			free(commandStr);
@@ -74,8 +74,9 @@ namespace bs
 	{
 		String solutionString = CSProject::writeSolution(CSProjectVersion::MonoDevelop, data);
 		solutionString = StringUtil::replaceAll(solutionString, "\n", "\r\n");
+
 		Path solutionPath = outputPath;
-		solutionPath.append(data.name + L".sln");
+		solutionPath.append(data.name + ".sln");
 
 		for (auto& project : data.projects)
 		{
@@ -83,7 +84,7 @@ namespace bs
 			projectString = StringUtil::replaceAll(projectString, "\n", "\r\n");
 
 			Path projectPath = outputPath;
-			projectPath.append(project.name + L".csproj");
+			projectPath.append(project.name + ".csproj");
 
 			SPtr<DataStream> projectStream = FileSystem::createAndOpenFile(projectPath);
 			projectStream->write(projectString.c_str(), projectString.size() * sizeof(String::value_type));
@@ -125,7 +126,7 @@ namespace bs
 		if (installPath.empty())
 			return;
 
-		mInstallPath = Path(installPath) + Path("XamarinStudio.exe");
+		mInstallPath = Path(UTF8::fromWide(installPath)) + Path("XamarinStudio.exe");
 #elif BS_PLATFORM == BS_PLATFORM_LINUX
 		Path monoDevelopDir = LinuxPlatform::getHomeDir();
 		monoDevelopDir.append(".local/share/flatpak/app/com.xamarin.MonoDevelop");

+ 2 - 2
Source/EditorCore/EditorWindow/BsMainEditorWindow.cpp

@@ -34,8 +34,8 @@ namespace bs
 
 		updateAreas();
 
-		mMenuBar->addMenuItemSeparator(L"File", 10000);
-		mMenuBar->addMenuItem(L"File/Exit", 
+		mMenuBar->addMenuItemSeparator("File", 10000);
+		mMenuBar->addMenuItem("File/Exit", 
 			[]()
 		{
 			gCoreApplication().quitRequested();

+ 1 - 1
Source/EditorCore/EditorWindow/BsModalWindow.cpp

@@ -50,7 +50,7 @@ namespace bs
 
 		if (hasCloseButton)
 		{
-			mCloseButton = GUIButton::create(HString(L""), "WinCloseBtn");
+			mCloseButton = GUIButton::create(HString(""), "WinCloseBtn");
 			contentLayoutX->addElement(mCloseButton);
 			
 			mCloseButton->onClick.connect(std::bind(&ModalWindow::close, this));

+ 1 - 1
Source/EditorCore/GUI/BsGUIDockSlider.cpp

@@ -13,7 +13,7 @@ namespace bs
 	}
 
 	GUIDockSlider::GUIDockSlider(bool horizontal, const String& styleName, const GUIDimensions& dimensions)
-		: GUIButtonBase(styleName, GUIContent(HString(L"")), dimensions), mHorizontal(horizontal), mDragInProgress(false)
+		: GUIButtonBase(styleName, GUIContent(HString("")), dimensions), mHorizontal(horizontal), mDragInProgress(false)
 	{
 
 	}

+ 1 - 1
Source/EditorCore/GUI/BsGUIDropButton.cpp

@@ -14,7 +14,7 @@ namespace bs
 	}
 
 	GUIDropButton::GUIDropButton(UINT32 dragType, const String& styleName, const GUIDimensions& dimensions)
-		:GUIButtonBase(styleName, GUIContent(HString(L"None")), dimensions), mDragType(dragType)
+		:GUIButtonBase(styleName, GUIContent(HString("None")), dimensions), mDragType(dragType)
 	{
 
 	}

+ 6 - 6
Source/EditorCore/GUI/BsGUIFloatField.cpp

@@ -26,14 +26,14 @@ namespace bs
 		mInputBox = GUIInputBox::create(false, GUIOptions(GUIOption::flexibleWidth()), getSubStyleName(getInputStyleType()));
 		mInputBox->setFilter(&GUIFloatField::floatFilter);
 
-		mInputBox->onValueChanged.connect(std::bind((void(GUIFloatField::*)(const WString&))&GUIFloatField::valueChanging, this, _1));
+		mInputBox->onValueChanged.connect(std::bind((void(GUIFloatField::*)(const String&))&GUIFloatField::valueChanging, this, _1));
 		mInputBox->onFocusChanged.connect(std::bind(&GUIFloatField::focusChanged, this, _1));
 		mInputBox->onConfirm.connect(std::bind(&GUIFloatField::inputConfirmed, this));
 
 		mLayout->addElement(mInputBox);
 
 		setValue(0);
-		mInputBox->setText(L"0");
+		mInputBox->setText("0");
 	}
 
 	GUIFloatField::~GUIFloatField()
@@ -200,7 +200,7 @@ namespace bs
 		mInputBox->setStyle(getSubStyleName(getInputStyleType()));
 	}
 
-	void GUIFloatField::valueChanging(const WString& newValue)
+	void GUIFloatField::valueChanging(const String& newValue)
 	{
 		valueChanged(parseFloat(newValue));
 	}
@@ -244,7 +244,7 @@ namespace bs
 		// updates back to "0" effectively making "." unusable
 		float curValue = parseFloat(mInputBox->getText());
 		if (value != curValue)
-			mInputBox->setText(toWString(value));
+			mInputBox->setText(toString(value));
 	}
 
 	float GUIFloatField::applyRangeAndStep(float value) const
@@ -255,8 +255,8 @@ namespace bs
 		return Math::clamp(value, mMinValue, mMaxValue);
 	}
 
-	bool GUIFloatField::floatFilter(const WString& str)
+	bool GUIFloatField::floatFilter(const String& str)
 	{
-		return std::regex_match(str, std::wregex(L"-?(\\d*(\\.\\d*)?)?"));
+		return std::regex_match(str, std::regex("-?(\\d*(\\.\\d*)?)?"));
 	}
 }

+ 3 - 3
Source/EditorCore/GUI/BsGUIFloatField.h

@@ -69,7 +69,7 @@ namespace bs
 		virtual ~GUIFloatField();
 
 		/** @copydoc GUIElementContainer::_hasCustomCursor */
-		bool _hasCustomCursor(const Vector2I position, CursorType& type) const override;
+		bool _hasCustomCursor(Vector2I position, CursorType& type) const override;
 
 		/** @copydoc GUIElementContainer::_mouseEvent */
 		bool _mouseEvent(const GUIMouseEvent& ev) override;
@@ -78,7 +78,7 @@ namespace bs
 		void styleUpdated() override;
 
 		/**	Triggered when the input box value changes. */
-		void valueChanging(const WString& newValue);
+		void valueChanging(const String& newValue);
 
 		/** Triggered when the input box value changes and is confirmed. */
 		void valueChanged(float newValue);
@@ -96,7 +96,7 @@ namespace bs
 		float applyRangeAndStep(float value) const;
 
 		/** Callback that checks can the provided string be converted to a floating point value. */
-		static bool floatFilter(const WString& str);
+		static bool floatFilter(const String& str);
 
 		static const float DRAG_SPEED;
 

+ 6 - 6
Source/EditorCore/GUI/BsGUIIntField.cpp

@@ -27,14 +27,14 @@ namespace bs
 		mInputBox = GUIInputBox::create(false, GUIOptions(GUIOption::flexibleWidth()), getSubStyleName(getInputStyleType()));
 		mInputBox->setFilter(&GUIIntField::intFilter);
 
-		mInputBox->onValueChanged.connect(std::bind((void(GUIIntField::*)(const WString&))&GUIIntField::valueChanged, this, _1));
+		mInputBox->onValueChanged.connect(std::bind((void(GUIIntField::*)(const String&))&GUIIntField::valueChanged, this, _1));
 		mInputBox->onFocusChanged.connect(std::bind(&GUIIntField::focusChanged, this, _1));
 		mInputBox->onConfirm.connect(std::bind(&GUIIntField::inputConfirmed, this));
 
 		mLayout->addElement(mInputBox);
 
 		setValue(0);
-		mInputBox->setText(L"0");
+		mInputBox->setText("0");
 	}
 
 	GUIIntField::~GUIIntField()
@@ -218,7 +218,7 @@ namespace bs
 		return LABEL_STYLE_TYPE;
 	}
 
-	void GUIIntField::valueChanged(const WString& newValue)
+	void GUIIntField::valueChanged(const String& newValue)
 	{
 		valueChanged(parseINT32(newValue));
 	}
@@ -260,7 +260,7 @@ namespace bs
 		// updates back to "0" effectively making "." unusable
 		float curValue = parseFloat(mInputBox->getText());
 		if (value != curValue)
-			mInputBox->setText(toWString(value));
+			mInputBox->setText(toString(value));
 	}
 
 	INT32 GUIIntField::applyRangeAndStep(INT32 value) const
@@ -271,8 +271,8 @@ namespace bs
 		return Math::clamp(value, mMinValue, mMaxValue);
 	}
 
-	bool GUIIntField::intFilter(const WString& str)
+	bool GUIIntField::intFilter(const String& str)
 	{
-		return std::regex_match(str, std::wregex(L"-?(\\d+)?"));
+		return std::regex_match(str, std::regex("-?(\\d+)?"));
 	}
 }

+ 3 - 3
Source/EditorCore/GUI/BsGUIIntField.h

@@ -69,7 +69,7 @@ namespace bs
 		virtual ~GUIIntField();
 
 		/** @copydoc GUIElement::_hasCustomCursor */
-		bool _hasCustomCursor(const Vector2I position, CursorType& type) const override;
+		bool _hasCustomCursor(Vector2I position, CursorType& type) const override;
 
 		/** @copydoc GUIElement::_mouseEvent */
 		bool _mouseEvent(const GUIMouseEvent& ev)  override;
@@ -78,7 +78,7 @@ namespace bs
 		void styleUpdated() override;
 
 		/**	Triggered when the input box value changes. */
-		void valueChanged(const WString& newValue);
+		void valueChanged(const String& newValue);
 
 		/**
 		 * Triggered when the input box value changes, but unlike the previous overload the value is parsed into an integer
@@ -99,7 +99,7 @@ namespace bs
 		INT32 applyRangeAndStep(INT32 value) const;
 
 		/**	Callback that checks can the provided string be converted to an integer value. */
-		static bool intFilter(const WString& str);
+		static bool intFilter(const String& str);
 
 		static const INT32 DRAG_SPEED;
 

+ 28 - 28
Source/EditorCore/GUI/BsGUIMenuBar.cpp

@@ -78,9 +78,9 @@ namespace bs
 		bgLayout->addElement(mBgTexture);
 
 		mLogoTexture = GUITexture::create(TextureScaleMode::StretchToFit, getLogoStyleType());
-		mMinBtn = GUIButton::create(HString(L""), "WinMinimizeBtn");
-		mMaxBtn = GUIButton::create(HString(L""), "WinMaximizeBtn");
-		mCloseBtn = GUIButton::create(HString(L""), "WinCloseBtn");
+		mMinBtn = GUIButton::create(HString(""), "WinMinimizeBtn");
+		mMaxBtn = GUIButton::create(HString(""), "WinMaximizeBtn");
+		mCloseBtn = GUIButton::create(HString(""), "WinCloseBtn");
 		mSplitterLine = GUITexture::create(TextureScaleMode::StretchToFit, getLineStyleType());
 
 		GUILayout* mainLayout = mMainPanel->addNewElement<GUILayoutX>();
@@ -141,11 +141,11 @@ namespace bs
 		refreshNonClientAreas();
 	}
 
-	GUIMenuItem* GUIMenuBar::addMenuItem(const WString& path, std::function<void()> callback, 
+	GUIMenuItem* GUIMenuBar::addMenuItem(const String& path, std::function<void()> callback, 
 		INT32 priority, const ShortcutKey& shortcut)
 	{
-		WString strippedPath = path;
-		WString rootName;
+		String strippedPath = path;
+		String rootName;
 
 		if(!stripPath(strippedPath, rootName))
 			return nullptr;
@@ -164,10 +164,10 @@ namespace bs
 		return subMenu->menu->addMenuItem(strippedPath, callback, priority, shortcut);
 	}
 
-	GUIMenuItem* GUIMenuBar::addMenuItemSeparator(const WString& path, INT32 priority)
+	GUIMenuItem* GUIMenuBar::addMenuItemSeparator(const String& path, INT32 priority)
 	{
-		WString strippedPath = path;
-		WString rootName;
+		String strippedPath = path;
+		String rootName;
 
 		if(!stripPath(strippedPath, rootName))
 			return nullptr;
@@ -183,7 +183,7 @@ namespace bs
 		return subMenu->menu->addSeparator(strippedPath, priority);
 	}
 
-	GUIMenuBar::GUIMenuBarData* GUIMenuBar::addNewButton(const WString& name, INT32 priority)
+	GUIMenuBar::GUIMenuBarData* GUIMenuBar::addNewButton(const String& name, INT32 priority)
 	{
 		UINT32 numElements = (UINT32)mChildMenus.size();
 		UINT32 position = numElements;
@@ -218,10 +218,10 @@ namespace bs
 		return &newSubMenu;
 	}
 
-	GUIMenuItem* GUIMenuBar::getMenuItem(const WString& path)
+	GUIMenuItem* GUIMenuBar::getMenuItem(const String& path)
 	{
-		WString strippedPath = path;
-		WString rootName;
+		String strippedPath = path;
+		String rootName;
 
 		if(!stripPath(strippedPath, rootName))
 			return nullptr;
@@ -233,15 +233,15 @@ namespace bs
 		return subMenu->menu->getMenuItem(strippedPath);
 	}
 
-	void GUIMenuBar::removeMenuItem(const WString& path)
+	void GUIMenuBar::removeMenuItem(const String& path)
 	{
-		WString strippedPath = path;
-		WString rootName;
+		String strippedPath = path;
+		String rootName;
 
 		if(!stripPath(strippedPath, rootName))
 			return;
 
-		if(strippedPath == L"")
+		if(strippedPath == "")
 		{
 			UINT32 curIdx = 0;
 			GUIMenuBarData* subMenuToRemove = nullptr;
@@ -294,7 +294,7 @@ namespace bs
 		}
 	}
 
-	const GUIMenuBar::GUIMenuBarData* GUIMenuBar::getSubMenu(const WString& name) const
+	const GUIMenuBar::GUIMenuBarData* GUIMenuBar::getSubMenu(const String& name) const
 	{
 		for(auto& subMenu : mChildMenus)
 		{
@@ -415,20 +415,20 @@ namespace bs
 		}
 	}
 
-	void GUIMenuBar::registerShortcut(const WString& path, const ShortcutKey& shortcut, std::function<void()> callback)
+	void GUIMenuBar::registerShortcut(const String& path, const ShortcutKey& shortcut, std::function<void()> callback)
 	{
 		ShortcutManager::instance().addShortcut(shortcut, callback);
 
-		WString trimmedPath = path;
-		StringUtil::trim(trimmedPath, L"/\\", false, true);
+		String trimmedPath = path;
+		StringUtil::trim(trimmedPath, "/\\", false, true);
 
 		mEntryShortcuts[trimmedPath] = shortcut;
 	}
 
-	void GUIMenuBar::unregisterShortcut(const WString& path)
+	void GUIMenuBar::unregisterShortcut(const String& path)
 	{
-		WString trimmedPath = path;
-		StringUtil::trim(trimmedPath, L"/\\", false, true);
+		String trimmedPath = path;
+		StringUtil::trim(trimmedPath, "/\\", false, true);
 
 		auto findIter = mEntryShortcuts.find(trimmedPath);
 		if (findIter != mEntryShortcuts.end())
@@ -438,9 +438,9 @@ namespace bs
 		}
 	}
 
-	bool GUIMenuBar::stripPath(WString& path, WString& pathRoot) const
+	bool GUIMenuBar::stripPath(String& path, String& pathRoot) const
 	{
-		Vector<WString> pathElements = StringUtil::split(path, L"/");
+		Vector<String> pathElements = StringUtil::split(path, "/");
 		if(pathElements.size() == 0)
 			return false;
 
@@ -453,7 +453,7 @@ namespace bs
 		return true;
 	}
 
-	void GUIMenuBar::openSubMenu(const WString& name)
+	void GUIMenuBar::openSubMenu(const String& name)
 	{
 		const GUIMenuBarData* subMenu = getSubMenu(name);
 		if(subMenu == nullptr)
@@ -503,7 +503,7 @@ namespace bs
 		}		
 	}
 
-	void GUIMenuBar::onSubMenuHover(const WString& name)
+	void GUIMenuBar::onSubMenuHover(const String& name)
 	{
 		if(mSubMenuOpen)
 		{

+ 13 - 13
Source/EditorCore/GUI/BsGUIMenuBar.h

@@ -24,7 +24,7 @@ namespace bs
 		/**	Contains data about the top level menu elements. */
 		struct GUIMenuBarData
 		{
-			WString name;
+			String name;
 			GUIMenu* menu;
 			GUIButton* button;
 			GUIFixedSpace* space;
@@ -87,7 +87,7 @@ namespace bs
 		 * @param[in]	shortcut	Keyboard shortcut key to display next to the interactable element, and register with the
 		 *							global shortcut manager.
 		 */
-		GUIMenuItem* addMenuItem(const WString& path, std::function<void()> callback, INT32 priority = 0, 
+		GUIMenuItem* addMenuItem(const String& path, std::function<void()> callback, INT32 priority = 0, 
 			const ShortcutKey& shortcut = ShortcutKey::NONE);
 
 		/**
@@ -97,15 +97,15 @@ namespace bs
 		 * @param[in]	priority	Determines where is the separator positioned compared to other elements in the same 
 		 *							sub-menu. Higher priority elements get placed higher up in the sub-menu.
 		 */
-		GUIMenuItem* addMenuItemSeparator(const WString& path, INT32 priority = 0);
+		GUIMenuItem* addMenuItemSeparator(const String& path, INT32 priority = 0);
 
 		/**	Returns an existing menu item at the specified path, or null if one cannot be found. */
-		GUIMenuItem* getMenuItem(const WString& path);
+		GUIMenuItem* getMenuItem(const String& path);
 
 		/**
 		 * Removes a menu item from the specified path. If this path points to a sub-menu entire sub-menu will be removed.
 		 */
-		void removeMenuItem(const WString& path);
+		void removeMenuItem(const String& path);
 
 		/**	Removes the specified menu item. */
 		void removeMenuItem(GUIMenuItem* item);
@@ -146,10 +146,10 @@ namespace bs
 		void removeToolBarButton(const String& name);
 	private:
 		/**	Finds a top level sub-menu with the specified name. */
-		const GUIMenuBarData* getSubMenu(const WString& name) const;
+		const GUIMenuBarData* getSubMenu(const String& name) const;
 
 		/**	Adds a new top level sub-menu button. */
-		GUIMenuBarData* addNewButton(const WString& name, INT32 priority);
+		GUIMenuBarData* addNewButton(const String& name, INT32 priority);
 
 		/**
 		 * Attempts to remove the first element from the specified path. First element returned in specified in @p pathRoot,
@@ -157,18 +157,18 @@ namespace bs
 		 *
 		 * @return	False if first element doesn't exist, true otherwise.
 		 */
-		bool stripPath(WString& path, WString& pathRoot) const;
+		bool stripPath(String& path, String& pathRoot) const;
 
 		/**
 		 * Registers a shortcut with the global shortcut manager. Pressing the shortcut will trigger the provided callback.
 		 */
-		void registerShortcut(const WString& path, const ShortcutKey& shortcut, std::function<void()> callback);
+		void registerShortcut(const String& path, const ShortcutKey& shortcut, std::function<void()> callback);
 
 		/**	Unregisters a shortcut assigned to the provided path from the global shortcut manager. */
-		void unregisterShortcut(const WString& path);
+		void unregisterShortcut(const String& path);
 
 		/**	Opens a top level sub-menu with the provided name. */
-		void openSubMenu(const WString& name);
+		void openSubMenu(const String& name);
 
 		/**	Closes any currently active sub-menu. */
 		void closeSubMenu();
@@ -178,7 +178,7 @@ namespace bs
 		 *
 		 * @param[in]	name	Name of the sub-menu the user is hovering over.
 		 */
-		void onSubMenuHover(const WString& name);
+		void onSubMenuHover(const String& name);
 
 		/**	Triggered when a sub-menu is closed. */
 		void onSubMenuClosed();
@@ -215,7 +215,7 @@ namespace bs
 		GUIButton* mCloseBtn;
 
 		Vector<GUIMenuBarData> mChildMenus;
-		UnorderedMap<WString, ShortcutKey> mEntryShortcuts;
+		UnorderedMap<String, ShortcutKey> mEntryShortcuts;
 		Vector<GUIToolBarData> mToolbarElements;
 
 		GUIButton* mSubMenuButton;

+ 7 - 7
Source/EditorCore/GUI/BsGUIResourceTreeView.cpp

@@ -43,7 +43,7 @@ namespace bs
 		const ProjectLibrary::LibraryEntry* rootEntry = gProjectLibrary().getRootEntry();
 
 		mRootElement.mFullPath = rootEntry->path;
-		mRootElement.mElementName = mRootElement.mFullPath.getWTail();
+		mRootElement.mElementName = mRootElement.mFullPath.getTail();
 
 		expandElement(&mRootElement);
 
@@ -87,7 +87,7 @@ namespace bs
 		// Do nothing, updates are handled via callbacks
 	}
 
-	void GUIResourceTreeView::renameTreeElement(GUITreeView::TreeElement* element, const WString& name)
+	void GUIResourceTreeView::renameTreeElement(GUITreeView::TreeElement* element, const String& name)
 	{
 		ResourceTreeElement* resourceTreeElement = static_cast<ResourceTreeElement*>(element);
 		
@@ -150,7 +150,7 @@ namespace bs
 		newChild->mFullPath = fullPath;
 		newChild->mSortedIdx = (UINT32)parent->mChildren.size();
 		newChild->mIsVisible = parent->mIsVisible && parent->mIsExpanded;
-		newChild->mElementName = fullPath.getWTail();
+		newChild->mElementName = fullPath.getTail();
 
 		parent->mChildren.push_back(newChild);
 
@@ -226,7 +226,7 @@ namespace bs
 			for (auto& child : current->mChildren)
 			{
 				ResourceTreeElement* resourceChild = static_cast<ResourceTreeElement*>(child);
-				if (Path::comparePathElem(curElem, UTF8::fromWide(resourceChild->mElementName)))
+				if (Path::comparePathElem(curElem, resourceChild->mElementName))
 				{
 					idx++;
 					current = resourceChild;
@@ -366,11 +366,11 @@ namespace bs
 		if(FileSystem::exists(path))
 		{
 			Path newPath = path;
-			WString filename = path.getWFilename(false);
+			String filename = path.getFilename(false);
 			UINT32 cnt = 1;
 			do 
 			{
-				newPath.setBasename(filename + toWString(cnt));
+				newPath.setBasename(filename + toString(cnt));
 				cnt++;
 			} while (FileSystem::exists(newPath));
 
@@ -421,7 +421,7 @@ namespace bs
 
 			for(UINT32 i = 0; i < mDraggedResources->numObjects; i++)
 			{
-				WString filename = mDraggedResources->resourcePaths[i].getWFilename();
+				String filename = mDraggedResources->resourcePaths[i].getFilename();
 				Path currentParent = mDraggedResources->resourcePaths[i].getParent();
 
 				if(currentParent != destDir)

+ 12 - 12
Source/EditorCore/GUI/BsGUIResourceTreeView.h

@@ -29,7 +29,7 @@ namespace bs
 		struct ResourceTreeElement : public GUITreeView::TreeElement
 		{
 			Path mFullPath;
-			WString mElementName;
+			String mElementName;
 		};
 
 		/** Contains paths to resources currently involved in a drag and drop operation initiated by this tree view. */
@@ -120,37 +120,37 @@ namespace bs
 			const String& dragHighlightStyle, const String& dragSepHighlightStyle, const GUIDimensions& dimensions);
 
 		/** @copydoc GUITreeView::_updateLayoutInternal */	
-		virtual void _updateLayoutInternal(const GUILayoutData& data) override;
+		void _updateLayoutInternal(const GUILayoutData& data) override;
 
 		/** @copydoc GUITreeView::getRootElement */	
-		virtual TreeElement& getRootElement() override { return mRootElement; }
+		TreeElement& getRootElement() override { return mRootElement; }
 
 		/** @copydoc GUITreeView::getRootElementConst */	
-		virtual const TreeElement& getRootElementConst() const override { return mRootElement; }
+		const TreeElement& getRootElementConst() const override { return mRootElement; }
 
 		/** @copydoc GUITreeView::updateTreeElementHierarchy */	
-		virtual void updateTreeElementHierarchy() override;
+		void updateTreeElementHierarchy() override;
 
 		/** @copydoc GUITreeView::renameTreeElement */	
-		virtual void renameTreeElement(TreeElement* element, const WString& name) override;
+		void renameTreeElement(TreeElement* element, const String& name) override;
 
 		/** @copydoc GUITreeView::deleteTreeElement */	
-		virtual void deleteTreeElement(TreeElement* element) override;
+		void deleteTreeElement(TreeElement* element) override;
 
 		/** @copydoc GUITreeView::acceptDragAndDrop */	
-		virtual bool acceptDragAndDrop() const override;
+		bool acceptDragAndDrop() const override;
 
 		/** @copydoc GUITreeView::dragAndDropStart */	
-		virtual void dragAndDropStart(const Vector<TreeElement*>& elements) override;
+		void dragAndDropStart(const Vector<TreeElement*>& elements) override;
 
 		/** @copydoc GUITreeView::dragAndDropEnded */	
-		virtual void dragAndDropEnded(TreeElement* overTreeElement) override;
+		void dragAndDropEnded(TreeElement* overTreeElement) override;
 
 		/** @copydoc GUITreeView::_acceptDragAndDrop */	
-		virtual bool _acceptDragAndDrop(const Vector2I position, UINT32 typeId) const override;
+		bool _acceptDragAndDrop(const Vector2I position, UINT32 typeId) const override;
 
 		/** @copydoc GUITreeView::selectionChanged */	
-		virtual void selectionChanged() override;
+		void selectionChanged() override;
 
 		/** @copydoc GUITreeView::_changeParentWidget */	
 		void _changeParentWidget(GUIWidget* widget) override;

+ 23 - 23
Source/EditorCore/GUI/BsGUISceneTreeView.cpp

@@ -40,14 +40,14 @@ namespace bs
 
 		SPtr<GUIContextMenu> contextMenu = bs_shared_ptr_new<GUIContextMenu>();
 
-		contextMenu->addMenuItem(L"New scene object", std::bind(&GUISceneTreeView::createNewSO, this), 50);
-		contextMenu->addMenuItem(L"Rename", std::bind(&GUISceneTreeView::renameSelected, this), 49, ShortcutKey(ButtonModifier::None, BC_F2));
-		contextMenu->addMenuItem(L"Delete", std::bind(&GUISceneTreeView::deleteSelection, this), 48, ShortcutKey(ButtonModifier::None, BC_DELETE));
-		contextMenu->addSeparator(L"", 40);
-		contextMenu->addMenuItem(L"Duplicate", std::bind(&GUISceneTreeView::duplicateSelection, this), 39, ShortcutKey(ButtonModifier::Ctrl, BC_D));
-		contextMenu->addMenuItem(L"Copy", std::bind(&GUISceneTreeView::copySelection, this), 38, ShortcutKey(ButtonModifier::Ctrl, BC_C));
-		contextMenu->addMenuItem(L"Cut", std::bind(&GUISceneTreeView::cutSelection, this), 37, ShortcutKey(ButtonModifier::Ctrl, BC_X));
-		contextMenu->addMenuItem(L"Paste", std::bind(&GUISceneTreeView::paste, this), 36, ShortcutKey(ButtonModifier::Ctrl, BC_V));
+		contextMenu->addMenuItem("New scene object", std::bind(&GUISceneTreeView::createNewSO, this), 50);
+		contextMenu->addMenuItem("Rename", std::bind(&GUISceneTreeView::renameSelected, this), 49, ShortcutKey(ButtonModifier::None, BC_F2));
+		contextMenu->addMenuItem("Delete", std::bind(&GUISceneTreeView::deleteSelection, this), 48, ShortcutKey(ButtonModifier::None, BC_DELETE));
+		contextMenu->addSeparator("", 40);
+		contextMenu->addMenuItem("Duplicate", std::bind(&GUISceneTreeView::duplicateSelection, this), 39, ShortcutKey(ButtonModifier::Ctrl, BC_D));
+		contextMenu->addMenuItem("Copy", std::bind(&GUISceneTreeView::copySelection, this), 38, ShortcutKey(ButtonModifier::Ctrl, BC_C));
+		contextMenu->addMenuItem("Cut", std::bind(&GUISceneTreeView::cutSelection, this), 37, ShortcutKey(ButtonModifier::Ctrl, BC_X));
+		contextMenu->addMenuItem("Paste", std::bind(&GUISceneTreeView::paste, this), 36, ShortcutKey(ButtonModifier::Ctrl, BC_V));
 
 		setContextMenu(contextMenu);
 	}
@@ -261,13 +261,13 @@ namespace bs
 		updateTreeElement(&mRootElement);
 	}
 
-	void GUISceneTreeView::renameTreeElement(GUITreeView::TreeElement* element, const WString& name)
+	void GUISceneTreeView::renameTreeElement(GUITreeView::TreeElement* element, const String& name)
 	{
 		SceneTreeElement* sceneTreeElement = static_cast<SceneTreeElement*>(element);
 
 		HSceneObject so = sceneTreeElement->mSceneObject;
-		CmdRecordSO::execute(so, false, L"Renamed \"" + toWString(so->getName()) + L"\"");
-		so->setName(toString(name));
+		CmdRecordSO::execute(so, false, "Renamed \"" + so->getName() + "\"");
+		so->setName(name);
 
 		onModified();
 	}
@@ -277,7 +277,7 @@ namespace bs
 		SceneTreeElement* sceneTreeElement = static_cast<SceneTreeElement*>(element);
 
 		HSceneObject so = sceneTreeElement->mSceneObject;
-		CmdDeleteSO::execute(so, L"Deleted \"" + toWString(so->getName()) + L"\"");
+		CmdDeleteSO::execute(so, "Deleted \"" + so->getName() + "\"");
 
 		onModified();
 	}
@@ -485,11 +485,11 @@ namespace bs
 		if (duplicateList.size() == 0)
 			return;
 
-		WString message;
+		String message;
 		if (duplicateList.size() == 1)
-			message = L"Duplicated " + toWString(duplicateList[0]->getName());
+			message = "Duplicated " + duplicateList[0]->getName();
 		else
-			message = L"Duplicated " + toWString((UINT32)duplicateList.size()) + L" elements";
+			message = "Duplicated " + toString((UINT32)duplicateList.size()) + " elements";
 
 		Vector<Transform> savedTransforms(duplicateList.size());
 		for(UINT32 i = 0; i < (UINT32)duplicateList.size(); i++)
@@ -554,22 +554,22 @@ namespace bs
 
 		if (mCutFlag)
 		{
-			WString message;
+			String message;
 			if (mCopyList.size() == 1)
-				message = L"Moved " + toWString(mCopyList[0]->getName());
+				message = "Moved " + mCopyList[0]->getName();
 			else
-				message = L"Moved " + toWString((UINT32)mCopyList.size()) + L" elements";
+				message = "Moved " + toString((UINT32)mCopyList.size()) + " elements";
 
 			CmdReparentSO::execute(mCopyList, parent, message);
 			clearCopyList();
 		}
 		else
 		{
-			WString message;
+			String message;
 			if (mCopyList.size() == 1)
-				message = L"Copied " + toWString(mCopyList[0]->getName());
+				message = "Copied " + mCopyList[0]->getName();
 			else
-				message = L"Copied " + toWString((UINT32)mCopyList.size()) + L" elements";
+				message = "Copied " + toString((UINT32)mCopyList.size()) + " elements";
 
 			Vector<HSceneObject> clones = CmdCloneSO::execute(mCopyList, message);
 			for (auto& clone : clones)
@@ -601,9 +601,9 @@ namespace bs
 
 	void GUISceneTreeView::createNewSO()
 	{
-		HSceneObject newSO = CmdCreateSO::execute("New", 0, L"Created a new SceneObject");
+		HSceneObject newSO = CmdCreateSO::execute("New", 0, "Created a new SceneObject");
 
-		if (mSelectedElements.size() > 0)
+		if (!mSelectedElements.empty())
 		{
 			SceneTreeElement* sceneElement = static_cast<SceneTreeElement*>(mSelectedElements[0].element);
 			newSO->setParent(sceneElement->mSceneObject);

+ 10 - 10
Source/EditorCore/GUI/BsGUISceneTreeView.h

@@ -143,34 +143,34 @@ namespace bs
 		void dragAndDropFinalize();
 
 		/** @copydoc GUITreeView::getRootElement */
-		virtual TreeElement& getRootElement() override { return mRootElement; }
+		TreeElement& getRootElement() override { return mRootElement; }
 
 		/** @copydoc GUITreeView::getRootElementConst */
-		virtual const TreeElement& getRootElementConst() const override { return mRootElement; }
+		const TreeElement& getRootElementConst() const override { return mRootElement; }
 
 		/** @copydoc GUITreeView::updateTreeElementHierarchy */
-		virtual void updateTreeElementHierarchy() override;
+		void updateTreeElementHierarchy() override;
 
 		/** @copydoc GUITreeView::renameTreeElement */
-		virtual void renameTreeElement(TreeElement* element, const WString& name) override;
+		void renameTreeElement(TreeElement* element, const String& name) override;
 
 		/** @copydoc GUITreeView::deleteTreeElement */
-		virtual void deleteTreeElement(TreeElement* element) override;
+		void deleteTreeElement(TreeElement* element) override;
 
 		/** @copydoc GUITreeView::acceptDragAndDrop */
-		virtual bool acceptDragAndDrop() const override;
+		bool acceptDragAndDrop() const override;
 
 		/** @copydoc GUITreeView::dragAndDropStart */
-		virtual void dragAndDropStart(const Vector<TreeElement*>& elements) override;
+		void dragAndDropStart(const Vector<TreeElement*>& elements) override;
 
 		/** @copydoc GUITreeView::dragAndDropEnded */
-		virtual void dragAndDropEnded(TreeElement* overTreeElement) override;
+		void dragAndDropEnded(TreeElement* overTreeElement) override;
 
 		/** @copydoc GUITreeView::_acceptDragAndDrop */
-		virtual bool _acceptDragAndDrop(const Vector2I position, UINT32 typeId) const override;
+		bool _acceptDragAndDrop(Vector2I position, UINT32 typeId) const override;
 
 		/** @copydoc GUITreeView::selectionChanged */
-		virtual void selectionChanged() override;
+		void selectionChanged() override;
 
 		/** Deletes the internal TreeElement representation without actually deleting the referenced SceneObject. */
 		void deleteTreeElementInternal(TreeElement* element);

+ 11 - 11
Source/EditorCore/GUI/BsGUISliderField.cpp

@@ -23,7 +23,7 @@ namespace bs
 		mInputBox = GUIInputBox::create(false, GUIOptions(GUIOption::fixedWidth(75)), getSubStyleName(getInputStyleType()));
 		mInputBox->setFilter(&GUISliderField::floatFilter);
 
-		mInputBox->onValueChanged.connect(std::bind((void(GUISliderField::*)(const WString&))&GUISliderField::inputBoxValueChanging, this, _1));
+		mInputBox->onValueChanged.connect(std::bind((void(GUISliderField::*)(const String&))&GUISliderField::inputBoxValueChanging, this, _1));
 		mInputBox->onConfirm.connect(std::bind(&GUISliderField::inputBoxValueChanged, this, true));
 		mInputBox->onFocusChanged.connect(std::bind(&GUISliderField::inputBoxFocusChanged, this, _1));
 
@@ -32,7 +32,7 @@ namespace bs
 		mLayout->addElement(mInputBox);
 
 		setValue(0);
-		mInputBox->setText(L"0");
+		mInputBox->setText("0");
 	}
 
 	GUISliderField::~GUISliderField()
@@ -58,12 +58,11 @@ namespace bs
 
 		float clampedValue = mSlider->getValue();
 
-		// Only update with new value if it actually changed, otherwise
-		// problems can occur when user types in "0." and the field
-		// updates back to "0" effectively making "." unusable
+		// Only update with new value if it actually changed, otherwise problems can occur when user types in "0." and the
+		// field updates back to "0" effectively making "." unusable
 		float curValue = parseFloat(mInputBox->getText());
 		if (clampedValue != curValue)
-			mInputBox->setText(toWString(clampedValue));
+			mInputBox->setText(toString(clampedValue));
 		return clampedValue;
 	}
 
@@ -120,7 +119,8 @@ namespace bs
 		mInputBox->setStyle(getSubStyleName(getInputStyleType()));
 	}
 
-	void GUISliderField::inputBoxValueChanging(const WString& newValue) {
+	void GUISliderField::inputBoxValueChanging(const String& newValue) 
+	{
 		inputBoxValueChanged(false);
 	}
 
@@ -137,9 +137,9 @@ namespace bs
 				onValueChanged(mSlider->getValue());
 			}
 		}
-		else if (mInputBox->getText() == L"" && confirmed) //Avoid leaving label blank
+		else if (mInputBox->getText() == "" && confirmed) //Avoid leaving label blank
 		{
-			mInputBox->setText(L"0");
+			mInputBox->setText("0");
 		}
 	}
 
@@ -167,9 +167,9 @@ namespace bs
 		_setValue(newValue, true);
 	}
 
-	bool GUISliderField::floatFilter(const WString& str)
+	bool GUISliderField::floatFilter(const String& str)
 	{
-		bool result = std::regex_match(str, std::wregex(L"-?(\\d*(\\.\\d*)?)?"));
+		bool result = std::regex_match(str, std::regex("-?(\\d*(\\.\\d*)?)?"));
 		return result;
 	}
 }

+ 2 - 2
Source/EditorCore/GUI/BsGUISliderField.h

@@ -80,7 +80,7 @@ namespace bs
 		void inputBoxValueChanged(bool confirmed = true);
 
 		/**	Triggered when the input box value is changing. */
-		void inputBoxValueChanging(const WString& newValue);
+		void inputBoxValueChanging(const String& newValue);
 
 		/**	Triggered when the slider is moved. */
 		void sliderChanged(float newValue);
@@ -89,7 +89,7 @@ namespace bs
 		void inputBoxFocusChanged(bool focus);
 
 		/**	Callback that checks can the provided string be	converted to a floating point value. */
-		static bool floatFilter(const WString& str);
+		static bool floatFilter(const String& str);
 
 		GUIInputBox* mInputBox;
 		GUISliderHorz* mSlider;

+ 20 - 21
Source/EditorCore/GUI/BsGUIStatusBar.cpp

@@ -19,8 +19,7 @@ namespace bs
 	const Color GUIStatusBar::COLOR_WARNING = Color(192 / 255.0f, 176 / 255.0f, 0.0f);
 	const Color GUIStatusBar::COLOR_ERROR = Color(192 / 255.0f, 36 / 255.0f, 0.0f);
 
-	GUIStatusBar::GUIStatusBar(const PrivatelyConstruct& dummy,
-		const String& style, const GUIDimensions& dimensions)
+	GUIStatusBar::GUIStatusBar(const PrivatelyConstruct& dummy, const String& style, const GUIDimensions& dimensions)
 		:GUIElementContainer(dimensions, style)
 	{
 		mPanel = GUIPanel::create();
@@ -29,10 +28,10 @@ namespace bs
 		_registerChildElement(mBgPanel);
 
 		mBackground = GUITexture::create(GUIOptions(GUIOption::flexibleWidth()), getSubStyleName(getGUIBackgroundTypeName()));
-		mMessage = GUIButton::create(HString(L""), GUIOptions(GUIOption::flexibleWidth()), getSubStyleName(getGUIMessageTypeName()));
-		mScene = GUILabel::create(HString(L"Scene: Unnamed"), GUIOptions(GUIOption::fixedWidth(150)));
-		mProject = GUILabel::create(HString(L"Project: None"), GUIOptions(GUIOption::fixedWidth(200)));
-		mCompiling = GUILabel::create(HString(L"Compiling..."), GUIOptions(GUIOption::fixedWidth(100)));
+		mMessage = GUIButton::create(HString(""), GUIOptions(GUIOption::flexibleWidth()), getSubStyleName(getGUIMessageTypeName()));
+		mScene = GUILabel::create(HString("Scene: Unnamed"), GUIOptions(GUIOption::fixedWidth(150)));
+		mProject = GUILabel::create(HString("Project: None"), GUIOptions(GUIOption::fixedWidth(200)));
+		mCompiling = GUILabel::create(HString("Compiling..."), GUIOptions(GUIOption::fixedWidth(100)));
 
 		GUILayoutY* vertLayout = mPanel->addNewElement<GUILayoutY>();
 		vertLayout->addNewElement<GUIFixedSpace>(3);
@@ -79,29 +78,29 @@ namespace bs
 		return bs_new<GUIStatusBar>(PrivatelyConstruct(), *curStyle, GUIDimensions::create());
 	}
 
-	void GUIStatusBar::setProject(const WString& name, bool modified)
+	void GUIStatusBar::setProject(const String& name, bool modified)
 	{
-		WStringStream content;
-		content << L"Project: ";
+		StringStream content;
+		content << "Project: ";
 
 		if (name.size() > 20)
-			content << name.substr(0, 20) << L"...";
+			content << name.substr(0, 20) << "...";
 		else
 			content << name;
 
 		if (modified)
-			content << L"*";
+			content << "*";
 
 		mProject->setContent(HString(content.str()));
 	}
 
-	void GUIStatusBar::setScene(const WString& name, bool modified)
+	void GUIStatusBar::setScene(const String& name, bool modified)
 	{
-		WStringStream content;
-		content << L"Scene: ";
+		StringStream content;
+		content << "Scene: ";
 
 		if (name.size() > 15)
-			content << name.substr(0, 15) << L"...";
+			content << name.substr(0, 15) << "...";
 		else
 			content << name;
 
@@ -147,7 +146,7 @@ namespace bs
 		LogEntry entry;
 		if(!gDebug().getLog().getLastEntry(entry))
 		{
-			GUIContent messageContent(HString(L""));
+			GUIContent messageContent(HString(""));
 			mMessage->setContent(messageContent);
 
 			return;
@@ -174,19 +173,19 @@ namespace bs
 			break;
 		}
 
-		WString message = toWString(entry.getMessage());
+		String message = entry.getMessage();
 		size_t lfPos = message.find_first_of('\n');
 		size_t crPos = message.find_first_of('\r');
 		size_t newlinePos;
 
-		if (lfPos != WString::npos)
+		if (lfPos != String::npos)
 		{
-			if (crPos != WString::npos)
+			if (crPos != String::npos)
 				newlinePos = std::min(lfPos, crPos);
 			else
 				newlinePos = lfPos;
 		}
-		else if (crPos != WString::npos)
+		else if (crPos != String::npos)
 			newlinePos = crPos;
 		else
 			newlinePos = -1;
@@ -199,7 +198,7 @@ namespace bs
 		}
 		else
 		{
-			WString firstLine = message.substr(0, newlinePos);
+			String firstLine = message.substr(0, newlinePos);
 
 			GUIContent messageContent(HString(firstLine), iconTexture);
 			mMessage->setContent(messageContent);

+ 3 - 3
Source/EditorCore/GUI/BsGUIStatusBar.h

@@ -52,7 +52,7 @@ namespace bs
 		 * @param[in]	name		Name of the project.
 		 * @param[in]	modified	Should the project be displayed as modified (and needs saving).
 		 */
-		void setProject(const WString& name, bool modified);
+		void setProject(const String& name, bool modified);
 
 		/**
 		 * Updates the active scene displayed on the status bar.
@@ -60,13 +60,13 @@ namespace bs
 		 * @param[in]	name		Name of the scene.
 		 * @param[in]	modified	Should the scene be displayed as modified (and needs saving).
 		 */
-		void setScene(const WString& name, bool modified);
+		void setScene(const String& name, bool modified);
 
 		/**	Activates or deactivates the "compilation in progress" visuals on the status bar. */
 		void setIsCompiling(bool compiling);
 
 		/** @copydoc GUIElement::setTint */
-		virtual void setTint(const Color& color) override;
+		void setTint(const Color& color) override;
 
 		/** @copydoc GUIElement::_updateLayoutInternal */
 		void _updateLayoutInternal(const GUILayoutData& data) override;

+ 2 - 2
Source/EditorCore/GUI/BsGUITabbedTitleBar.cpp

@@ -38,11 +38,11 @@ namespace bs
 		if(mTabBtnStyle == StringUtil::BLANK)
 			mTabBtnStyle = "TabbedBarBtn";
 
-		mMaxBtn = GUIButton::create(HString(L""), mMaximizeBtnStyle);
+		mMaxBtn = GUIButton::create(HString(""), mMaximizeBtnStyle);
 		mMaxBtn->_setElementDepth(1);
 		_registerChildElement(mMaxBtn);
 
-		mCloseBtn = GUIButton::create(HString(L""), mCloseBtnStyle);
+		mCloseBtn = GUIButton::create(HString(""), mCloseBtnStyle);
 		mCloseBtn->_setElementDepth(1);
 		_registerChildElement(mCloseBtn);
 

+ 5 - 5
Source/EditorCore/GUI/BsGUITextField.cpp

@@ -15,7 +15,7 @@ namespace bs
 	GUITextField::GUITextField(const PrivatelyConstruct& dummy, bool multiline, const GUIContent& labelContent, 
 		UINT32 labelWidth, const String& style, const GUIDimensions& dimensions, bool withLabel)
 		:GUIElementContainer(dimensions, style),
-		mInputBox(nullptr), mLayout(nullptr), mLabel(nullptr), mHasInputFocus(false), mValue(L"")
+		mInputBox(nullptr), mLayout(nullptr), mLabel(nullptr), mHasInputFocus(false), mValue("")
 	{
 		mLayout = GUILayoutX::create();
 		_registerChildElement(mLayout);
@@ -147,7 +147,7 @@ namespace bs
 			GUIDimensions::create(), false);
 	}
 
-	void GUITextField::setValue(const WString& value)
+	void GUITextField::setValue(const String& value)
 	{
 		mValue = value;
 		mInputBox->setText(value);
@@ -161,7 +161,7 @@ namespace bs
 		mInputBox->setTint(color);
 	}
 
-	void GUITextField::_setValue(const WString& value, bool triggerEvent)
+	void GUITextField::_setValue(const String& value, bool triggerEvent)
 	{
 		setValue(value);
 
@@ -188,9 +188,9 @@ namespace bs
 		mInputBox->setStyle(getSubStyleName(getInputStyleType()));
 	}
 
-	void GUITextField::valueChanged(const WString& newValue)
+	void GUITextField::valueChanged(const String& newValue)
 	{
-		CmdInputFieldValueChange<GUITextField, WString>::execute(this, newValue);
+		CmdInputFieldValueChange<GUITextField, String>::execute(this, newValue);
 	}
 
 	void GUITextField::focusChanged(bool focus)

+ 6 - 6
Source/EditorCore/GUI/BsGUITextField.h

@@ -153,10 +153,10 @@ namespace bs
 			const String& style, const GUIDimensions& dimensions, bool withLabel);
 
 		/**	Returns the value currently input in the text field. */
-		WString getValue() const { return mValue; }
+		String getValue() const { return mValue; }
 
 		/**	Sets a new value in the text field. */
-		void setValue(const WString& value);
+		void setValue(const String& value);
 
 		/**	Checks whether the element currently has keyboard focus. */
 		bool hasInputFocus() const { return mHasInputFocus; }
@@ -164,7 +164,7 @@ namespace bs
 		/** @copydoc GUIElement::setTint */
 		void setTint(const Color& color) override;
 		
-		Event<void(const WString&)> onValueChanged; /** Triggered when the value in the field changes. */
+		Event<void(const String&)> onValueChanged; /** Triggered when the value in the field changes. */
 		Event<void()> onConfirm; /**< Triggered when the user hits the Enter key with the input box in focus. */
 
 		/** @name Internal
@@ -175,7 +175,7 @@ namespace bs
 		 * Sets a new value in the input field, and also allows you to choose should the field trigger an onValueChanged
 		 * event.
 		 */
-		void _setValue(const WString& value, bool triggerEvent);
+		void _setValue(const String& value, bool triggerEvent);
 
 		/** @} */
 	protected:
@@ -193,7 +193,7 @@ namespace bs
 		Vector2I _getOptimalSize() const override;
 
 		/**	Triggered when the value in the internal input box changes. */
-		void valueChanged(const WString& newValue);
+		void valueChanged(const String& newValue);
 
 		/**	Triggers when the input box receives or loses keyboard focus. */
 		void focusChanged(bool focus);
@@ -205,7 +205,7 @@ namespace bs
 		GUILayout* mLayout;
 		GUILabel* mLabel;
 		bool mHasInputFocus;
-		WString mValue;
+		String mValue;
 	};
 
 	/** @} */

+ 1 - 1
Source/EditorCore/GUI/BsGUIToggleField.cpp

@@ -14,7 +14,7 @@ namespace bs
 		UINT32 labelWidth, const String& style, const GUIDimensions& dimensions, bool withLabel)
 		:TGUIField(dummy, labelContent, labelWidth, style, dimensions, withLabel), mToggle(nullptr), mValue(false)
 	{
-		mToggle = GUIToggle::create(HString(L""), getSubStyleName(getToggleStyleType()));
+		mToggle = GUIToggle::create(HString(""), getSubStyleName(getToggleStyleType()));
 		mToggle->onToggled.connect(std::bind(&GUIToggleField::valueChanged, this, _1));
 
 		mLayout->addElement(mToggle);

+ 4 - 4
Source/EditorCore/GUI/BsGUITreeView.cpp

@@ -752,7 +752,7 @@ namespace bs
 
 		if(element->mIsVisible)
 		{
-			HString name(toWString(element->mName));
+			HString name(element->mName);
 			if(element->mElement == nullptr)
 			{
 				element->mElement = GUILabel::create(name, mElementBtnStyle);
@@ -780,7 +780,7 @@ namespace bs
 			{
 				if(element->mFoldoutBtn == nullptr)
 				{
-					element->mFoldoutBtn = GUIToggle::create(GUIContent(HString(L"")), mFoldoutBtnStyle);
+					element->mFoldoutBtn = GUIToggle::create(GUIContent(HString("")), mFoldoutBtnStyle);
 					_registerChildElement(element->mFoldoutBtn);
 
 					element->mFoldoutBtn->onToggled.connect(std::bind(&GUITreeView::elementToggled, this, element, _1));
@@ -860,7 +860,7 @@ namespace bs
 
 		mEditElement = element;
 		mNameEditBox->setVisible(true);
-		mNameEditBox->setText(toWString(element->mName));
+		mNameEditBox->setText(element->mName);
 		mNameEditBox->setFocus(true);
 
 		if(element->mElement != nullptr)
@@ -876,7 +876,7 @@ namespace bs
 
 		if(applyChanges)
 		{
-			WString newName = mNameEditBox->getText();
+			String newName = mNameEditBox->getText();
 			renameTreeElement(mEditElement, newName);
 		}
 

+ 1 - 1
Source/EditorCore/GUI/BsGUITreeView.h

@@ -188,7 +188,7 @@ namespace bs
 		virtual void updateTreeElementHierarchy() = 0;
 
 		/**	Changes the name of the content associated with the provided tree element. */
-		virtual void renameTreeElement(TreeElement* element, const WString& name) = 0;
+		virtual void renameTreeElement(TreeElement* element, const String& name) = 0;
 
 		/**	Deletes the content associated with the provided tree element. */
 		virtual void deleteTreeElement(TreeElement* element) = 0;

+ 2 - 2
Source/EditorCore/GUI/BsGUIVector2Field.cpp

@@ -17,8 +17,8 @@ namespace bs
 		:TGUIField(dummy, labelContent, labelWidth, style, dimensions, withLabel),
 		mFieldX(nullptr), mFieldY(nullptr)
 	{
-		mFieldX = GUIFloatField::create(HString(L"X"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
-		mFieldY = GUIFloatField::create(HString(L"Y"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
+		mFieldX = GUIFloatField::create(HString("X"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
+		mFieldY = GUIFloatField::create(HString("Y"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
 
 		mFieldX->onValueChanged.connect(std::bind(&GUIVector2Field::valueChanged, this, _1));
 		mFieldY->onValueChanged.connect(std::bind(&GUIVector2Field::valueChanged, this, _1));

+ 3 - 3
Source/EditorCore/GUI/BsGUIVector3Field.cpp

@@ -17,9 +17,9 @@ namespace bs
 		:TGUIField(dummy, labelContent, labelWidth, style, dimensions, withLabel),
 		mFieldX(nullptr), mFieldY(nullptr), mFieldZ(nullptr)
 	{
-		mFieldX = GUIFloatField::create(HString(L"X"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
-		mFieldY = GUIFloatField::create(HString(L"Y"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
-		mFieldZ = GUIFloatField::create(HString(L"Z"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
+		mFieldX = GUIFloatField::create(HString("X"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
+		mFieldY = GUIFloatField::create(HString("Y"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
+		mFieldZ = GUIFloatField::create(HString("Z"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
 
 		mFieldX->onValueChanged.connect(std::bind(&GUIVector3Field::valueChanged, this, _1));
 		mFieldY->onValueChanged.connect(std::bind(&GUIVector3Field::valueChanged, this, _1));

+ 4 - 4
Source/EditorCore/GUI/BsGUIVector4Field.cpp

@@ -16,10 +16,10 @@ namespace bs
 		UINT32 labelWidth, const String& style, const GUIDimensions& dimensions, bool withLabel)
 		:TGUIField(dummy, labelContent, labelWidth, style, dimensions, withLabel), mFieldX(nullptr), mFieldY(nullptr)
 	{
-		mFieldX = GUIFloatField::create(HString(L"X"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
-		mFieldY = GUIFloatField::create(HString(L"Y"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
-		mFieldZ = GUIFloatField::create(HString(L"Z"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
-		mFieldW = GUIFloatField::create(HString(L"W"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
+		mFieldX = GUIFloatField::create(HString("X"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
+		mFieldY = GUIFloatField::create(HString("Y"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
+		mFieldZ = GUIFloatField::create(HString("Z"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
+		mFieldW = GUIFloatField::create(HString("W"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
 
 		mFieldX->onValueChanged.connect(std::bind(&GUIVector4Field::valueChanged, this, _1));
 		mFieldY->onValueChanged.connect(std::bind(&GUIVector4Field::valueChanged, this, _1));

+ 1 - 1
Source/EditorCore/Handles/BsHandleDrawManager.cpp

@@ -152,7 +152,7 @@ namespace bs
 		mDrawHelper->rectangle(area);
 	}
 
-	void HandleDrawManager::drawText(const Vector3& position, const WString& text, const HFont& font, UINT32 fontSize, float size)
+	void HandleDrawManager::drawText(const Vector3& position, const String& text, const HFont& font, UINT32 fontSize, float size)
 	{
 		Matrix4 scale = Matrix4::scaling(size);
 		mDrawHelper->setTransform(mTransform * scale);

+ 1 - 1
Source/EditorCore/Handles/BsHandleDrawManager.h

@@ -156,7 +156,7 @@ namespace bs
 		 * @param[in]	fontSize	Size of the characters, in points.
 		 * @param[in]	size		Uniform scale of the rendered mesh.
 		 */
-		void drawText(const Vector3& position, const WString& text, const HFont& font, UINT32 fontSize = 16, float size = 1.0f);
+		void drawText(const Vector3& position, const String& text, const HFont& font, UINT32 fontSize = 16, float size = 1.0f);
 
 		/**	Queues all the handle draw commands queued since the last call to clear() for rendering. */
 		void draw(const SPtr<Camera>& camera);

+ 40 - 40
Source/EditorCore/Library/BsProjectLibrary.cpp

@@ -23,16 +23,16 @@ using namespace std::placeholders;
 
 namespace bs
 {
-	const Path ProjectLibrary::RESOURCES_DIR = L"Resources/";
+	const Path ProjectLibrary::RESOURCES_DIR = "Resources/";
 	const Path ProjectLibrary::INTERNAL_RESOURCES_DIR = PROJECT_INTERNAL_DIR + GAME_RESOURCES_FOLDER_NAME;
-	const WString ProjectLibrary::LIBRARY_ENTRIES_FILENAME = L"ProjectLibrary.asset";
-	const WString ProjectLibrary::RESOURCE_MANIFEST_FILENAME = L"ResourceManifest.asset";
+	const char* ProjectLibrary::LIBRARY_ENTRIES_FILENAME = "ProjectLibrary.asset";
+	const char* ProjectLibrary::RESOURCE_MANIFEST_FILENAME = "ResourceManifest.asset";
 
 	ProjectLibrary::LibraryEntry::LibraryEntry()
 		:type(LibraryEntryType::Directory), parent(nullptr)
 	{ }
 
-	ProjectLibrary::LibraryEntry::LibraryEntry(const Path& path, const WString& name, DirectoryEntry* parent, LibraryEntryType type)
+	ProjectLibrary::LibraryEntry::LibraryEntry(const Path& path, const String& name, DirectoryEntry* parent, LibraryEntryType type)
 		:type(type), path(path), elementName(name), parent(parent)
 	{ }
 
@@ -40,21 +40,21 @@ namespace bs
 		: lastUpdateTime(0)
 	{ }
 
-	ProjectLibrary::FileEntry::FileEntry(const Path& path, const WString& name, DirectoryEntry* parent)
+	ProjectLibrary::FileEntry::FileEntry(const Path& path, const String& name, DirectoryEntry* parent)
 		: LibraryEntry(path, name, parent, LibraryEntryType::File), lastUpdateTime(0)
 	{ }
 
 	ProjectLibrary::DirectoryEntry::DirectoryEntry()
 	{ }
 
-	ProjectLibrary::DirectoryEntry::DirectoryEntry(const Path& path, const WString& name, DirectoryEntry* parent)
+	ProjectLibrary::DirectoryEntry::DirectoryEntry(const Path& path, const String& name, DirectoryEntry* parent)
 		:LibraryEntry(path, name, parent, LibraryEntryType::Directory)
 	{ }
 
 	ProjectLibrary::ProjectLibrary()
 		: mRootEntry(nullptr), mIsLoaded(false)
 	{
-		mRootEntry = bs_new<DirectoryEntry>(mResourcesFolder, mResourcesFolder.getWTail(), nullptr);
+		mRootEntry = bs_new<DirectoryEntry>(mResourcesFolder, mResourcesFolder.getTail(), nullptr);
 	}
 
 	ProjectLibrary::~ProjectLibrary()
@@ -75,7 +75,7 @@ namespace bs
 
 		if(mRootEntry == nullptr)
 		{
-			mRootEntry = bs_new<DirectoryEntry>(mResourcesFolder, mResourcesFolder.getWTail(), nullptr);
+			mRootEntry = bs_new<DirectoryEntry>(mResourcesFolder, mResourcesFolder.getTail(), nullptr);
 		}
 
 		Path pathToSearch = fullPath;
@@ -87,7 +87,7 @@ namespace bs
 				if (isMeta(pathToSearch))
 				{
 					Path sourceFilePath = pathToSearch;
-					sourceFilePath.setExtension(L"");
+					sourceFilePath.setExtension("");
 
 					if (!FileSystem::isFile(sourceFilePath))
 					{
@@ -178,7 +178,7 @@ namespace bs
 						if(isMeta(filePath))
 						{
 							Path sourceFilePath = filePath;
-							sourceFilePath.setExtension(L"");
+							sourceFilePath.setExtension("");
 
 							if(!FileSystem::isFile(sourceFilePath))
 							{
@@ -274,7 +274,7 @@ namespace bs
 	ProjectLibrary::FileEntry* ProjectLibrary::addResourceInternal(DirectoryEntry* parent, const Path& filePath, 
 		const SPtr<ImportOptions>& importOptions, bool forceReimport)
 	{
-		FileEntry* newResource = bs_new<FileEntry>(filePath, filePath.getWTail(), parent);
+		FileEntry* newResource = bs_new<FileEntry>(filePath, filePath.getTail(), parent);
 		parent->mChildren.push_back(newResource);
 
 		reimportResourceInternal(newResource, importOptions, forceReimport);
@@ -285,7 +285,7 @@ namespace bs
 
 	ProjectLibrary::DirectoryEntry* ProjectLibrary::addDirectoryInternal(DirectoryEntry* parent, const Path& dirPath)
 	{
-		DirectoryEntry* newEntry = bs_new<DirectoryEntry>(dirPath, dirPath.getWTail(), parent);
+		DirectoryEntry* newEntry = bs_new<DirectoryEntry>(dirPath, dirPath.getTail(), parent);
 		parent->mChildren.push_back(newEntry);
 
 		onEntryAdded(newEntry->path);
@@ -364,7 +364,7 @@ namespace bs
 		bool forceReimport, bool pruneResourceMetas)
 	{
 		Path metaPath = fileEntry->path;
-		metaPath.setFilename(metaPath.getWFilename() + L".meta");
+		metaPath.setFilename(metaPath.getFilename() + ".meta");
 
 		if(fileEntry->meta == nullptr)
 		{
@@ -424,7 +424,7 @@ namespace bs
 
 				// Don't load dependencies because we don't need them, but also because they might not be in the manifest
 				// which would screw up their UUIDs.
-				importedResources.push_back({ L"primary", gResources().load(fileEntry->path, ResourceLoadFlag::KeepSourceData) });
+				importedResources.push_back({ "primary", gResources().load(fileEntry->path, ResourceLoadFlag::KeepSourceData) });
 			}
 
 			if(fileEntry->meta == nullptr)
@@ -551,7 +551,7 @@ namespace bs
 				{
 					String uuidStr = entry.value.getUUID().toString();
 
-					internalResourcesPath.setFilename(toWString(uuidStr) + L".asset");
+					internalResourcesPath.setFilename(uuidStr + ".asset");
 					gResources().save(entry.value, internalResourcesPath, true);
 
 					const UUID& uuid = entry.value.getUUID();
@@ -586,29 +586,29 @@ namespace bs
 		return lastModifiedTime <= resource->lastUpdateTime;
 	}
 
-	Vector<ProjectLibrary::LibraryEntry*> ProjectLibrary::search(const WString& pattern)
+	Vector<ProjectLibrary::LibraryEntry*> ProjectLibrary::search(const String& pattern)
 	{
 		return search(pattern, {});
 	}
 
-	Vector<ProjectLibrary::LibraryEntry*> ProjectLibrary::search(const WString& pattern, const Vector<UINT32>& typeIds)
+	Vector<ProjectLibrary::LibraryEntry*> ProjectLibrary::search(const String& pattern, const Vector<UINT32>& typeIds)
 	{
 		Vector<LibraryEntry*> foundEntries;
 
-		std::wregex escape(L"[.^$|()\\[\\]{}*+?\\\\]");
-		WString replace(L"\\\\&");
-		WString escapedPattern = std::regex_replace(pattern, escape, replace, std::regex_constants::match_default | std::regex_constants::format_sed);
+		std::regex escape("[.^$|()\\[\\]{}*+?\\\\]");
+		String replace("\\\\&");
+		String escapedPattern = std::regex_replace(pattern, escape, replace, std::regex_constants::match_default | std::regex_constants::format_sed);
 
 		// For some reason MSVC stdlib implementation requires a different pattern than stdlib one
 #if BS_PLATFORM == BS_PLATFORM_WIN32
-		std::wregex wildcard(L"\\\\\\*");
+		std::regex wildcard("\\\\\\*");
 #else
-		std::wregex wildcard(L"\\\\\\\\\\*");
+		std::regex wildcard("\\\\\\\\\\*");
 #endif
-		WString wildcardReplace(L".*");
-		WString searchPattern = std::regex_replace(escapedPattern, wildcard, L".*");
+		String wildcardReplace(".*");
+		String searchPattern = std::regex_replace(escapedPattern, wildcard, ".*");
 
-		std::wregex searchRegex(searchPattern, std::regex_constants::ECMAScript | std::regex_constants::icase);
+		std::regex searchRegex(searchPattern, std::regex_constants::ECMAScript | std::regex_constants::icase);
 
 		Stack<DirectoryEntry*> todo;
 		todo.push(mRootEntry);
@@ -702,7 +702,7 @@ namespace bs
 				current = nullptr;
 				for (auto& child : dirEntry->mChildren)
 				{
-					if (Path::comparePathElem(curElem, UTF8::fromWide(child->elementName)))
+					if (Path::comparePathElem(curElem, child->elementName))
 					{
 						idx++;
 						current = child;
@@ -764,7 +764,7 @@ namespace bs
 				auto& resourceMetas = fileEntry->meta->getResourceMetaData();
 				for(auto& resMeta : resourceMetas)
 				{
-					if (resMeta->getUniqueName() == path.getWTail())
+					if (resMeta->getUniqueName() == path.getTail())
 						return resMeta;
 				}
 
@@ -776,7 +776,7 @@ namespace bs
 				DirectoryEntry* dirEntry = static_cast<DirectoryEntry*>(entry);
 				for (auto& child : dirEntry->mChildren)
 				{
-					if (Path::comparePathElem(path.getTail(), UTF8::fromWide(child->elementName)))
+					if (Path::comparePathElem(path.getTail(), child->elementName))
 					{
 						if (child->type == LibraryEntryType::File)
 						{
@@ -833,7 +833,7 @@ namespace bs
 
 		deleteEntry(assetPath);
 
-		resource->setName(path.getWFilename(false));
+		resource->setName(path.getFilename(false));
 
 		Path absPath = assetPath.getAbsolute(getResourcesFolder());
 		Resources::instance().save(resource, absPath, false);
@@ -979,7 +979,7 @@ namespace bs
 				newEntryParent->mChildren.push_back(oldEntry);
 				oldEntry->parent = newEntryParent;
 				oldEntry->path = newFullPath;
-				oldEntry->elementName = newFullPath.getWTail();
+				oldEntry->elementName = newFullPath.getTail();
 
 				if(oldEntry->type == LibraryEntryType::Directory) // Update child paths
 				{
@@ -1088,7 +1088,7 @@ namespace bs
 				for (auto& child : sourceDir->mChildren)
 				{
 					Path childDestPath = destDir->path;
-					childDestPath.append(child->path.getWTail());
+					childDestPath.append(child->path.getTail());
 
 					if (child->type == LibraryEntryType::File)
 					{
@@ -1158,7 +1158,7 @@ namespace bs
 		resEntry->meta->setIncludeInBuild(include);
 
 		Path metaPath = resEntry->path;
-		metaPath.setFilename(metaPath.getWFilename() + L".meta");
+		metaPath.setFilename(metaPath.getFilename() + ".meta");
 
 		FileEncoder fs(metaPath);
 		fs.encode(resEntry->meta.get());
@@ -1180,7 +1180,7 @@ namespace bs
 		resMeta->mUserData = userData;
 
 		Path metaPath = fileEntry->path;
-		metaPath.setFilename(metaPath.getWFilename() + L".meta");
+		metaPath.setFilename(metaPath.getFilename() + ".meta");
 
 		FileEncoder fs(metaPath);
 		fs.encode(fileEntry->meta.get());
@@ -1275,21 +1275,21 @@ namespace bs
 	Path ProjectLibrary::getMetaPath(const Path& path) const
 	{
 		Path metaPath = path;
-		metaPath.setFilename(metaPath.getWFilename() + L".meta");
+		metaPath.setFilename(metaPath.getFilename() + ".meta");
 
 		return metaPath;
 	}
 
 	bool ProjectLibrary::isMeta(const Path& fullPath) const
 	{
-		return fullPath.getWExtension() == L".meta";
+		return fullPath.getExtension() == ".meta";
 	}
 
 	bool ProjectLibrary::isNative(const Path& path) const
 	{
-		WString extension = path.getWExtension();
+		String extension = path.getExtension();
 
-		return extension == L".asset" || extension == L".prefab";
+		return extension == ".asset" || extension == ".prefab";
 	}
 
 	void ProjectLibrary::unloadLibrary()
@@ -1301,7 +1301,7 @@ namespace bs
 		mResourcesFolder = Path::BLANK;
 
 		clearEntries();
-		mRootEntry = bs_new<DirectoryEntry>(mResourcesFolder, mResourcesFolder.getWTail(), nullptr);
+		mRootEntry = bs_new<DirectoryEntry>(mResourcesFolder, mResourcesFolder.getTail(), nullptr);
 
 		mDependencies.clear();
 		gResources().unregisterResourceManifest(mResourceManifest);
@@ -1382,7 +1382,7 @@ namespace bs
 		mResourcesFolder = mProjectFolder;
 		mResourcesFolder.append(RESOURCES_DIR);
 
-		mRootEntry = bs_new<DirectoryEntry>(mResourcesFolder, mResourcesFolder.getWTail(), nullptr);
+		mRootEntry = bs_new<DirectoryEntry>(mResourcesFolder, mResourcesFolder.getTail(), nullptr);
 
 		Path libraryEntriesPath = mProjectFolder;
 		libraryEntriesPath.append(PROJECT_INTERNAL_DIR);
@@ -1437,7 +1437,7 @@ namespace bs
 						if (resEntry->meta == nullptr)
 						{
 							Path metaPath = resEntry->path;
-							metaPath.setFilename(metaPath.getWFilename() + L".meta");
+							metaPath.setFilename(metaPath.getFilename() + ".meta");
 
 							if (FileSystem::isFile(metaPath))
 							{

+ 8 - 8
Source/EditorCore/Library/BsProjectLibrary.h

@@ -34,11 +34,11 @@ namespace bs
 		struct LibraryEntry
 		{
 			LibraryEntry();
-			LibraryEntry(const Path& path, const WString& name, DirectoryEntry* parent, LibraryEntryType type);
+			LibraryEntry(const Path& path, const String& name, DirectoryEntry* parent, LibraryEntryType type);
 
 			LibraryEntryType type; /**< Specific type of this entry. */
 			Path path; /**< Absolute path to the entry. */
-			WString elementName; /**< Name of the entry. */
+			String elementName; /**< Name of the entry. */
 
 			DirectoryEntry* parent; /**< Folder this entry is located in. */
 		};
@@ -47,7 +47,7 @@ namespace bs
 		struct FileEntry : public LibraryEntry
 		{
 			FileEntry();
-			FileEntry(const Path& path, const WString& name, DirectoryEntry* parent);
+			FileEntry(const Path& path, const String& name, DirectoryEntry* parent);
 
 			SPtr<ProjectFileMeta> meta; /**< Meta file containing various information about the resource(s). */
 			std::time_t lastUpdateTime; /**< Timestamp of when we last imported the resource. */
@@ -57,7 +57,7 @@ namespace bs
 		struct DirectoryEntry : public LibraryEntry
 		{
 			DirectoryEntry();
-			DirectoryEntry(const Path& path, const WString& name, DirectoryEntry* parent);
+			DirectoryEntry(const Path& path, const String& name, DirectoryEntry* parent);
 
 			Vector<LibraryEntry*> mChildren; /**< Child files or folders. */
 		};
@@ -121,7 +121,7 @@ namespace bs
 		 * @return		A list of entries matching the pattern. Values returned by this method are transient, they may be
 		 *				destroyed on any following ProjectLibrary call.
 		 */
-		Vector<LibraryEntry*> search(const WString& pattern);
+		Vector<LibraryEntry*> search(const String& pattern);
 
 		/**
 		 * Searches the library for a pattern, but only among specific resource types.
@@ -131,7 +131,7 @@ namespace bs
 		 * @return		A list of entries matching the pattern. Values returned by this method are transient, they may be
 		 *				destroyed on any following ProjectLibrary call.
 		 */
-		Vector<LibraryEntry*> search(const WString& pattern, const Vector<UINT32>& typeIds);
+		Vector<LibraryEntry*> search(const String& pattern, const Vector<UINT32>& typeIds);
 
 		/**
 		 * Returns resource path based on its UUID.
@@ -380,8 +380,8 @@ namespace bs
 		/** Deletes all library entries. */
 		void clearEntries();
 
-		static const WString LIBRARY_ENTRIES_FILENAME;
-		static const WString RESOURCE_MANIFEST_FILENAME;
+		static const char* LIBRARY_ENTRIES_FILENAME;
+		static const char* RESOURCE_MANIFEST_FILENAME;
 
 		SPtr<ResourceManifest> mResourceManifest;
 		DirectoryEntry* mRootEntry;

+ 9 - 3
Source/EditorCore/Library/BsProjectResourceMeta.cpp

@@ -2,6 +2,7 @@
 //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
 #include "Library/BsProjectResourceMeta.h"
 #include "RTTI/BsProjectResourceMetaRTTI.h"
+#include "String/BsUnicode.h"
 
 namespace bs
 {
@@ -11,11 +12,16 @@ namespace bs
 
 	}
 
-	SPtr<ProjectResourceMeta> ProjectResourceMeta::create(const WString& name, const UUID& uuid, UINT32 typeId,
+	String ProjectResourceMeta::getUniqueName() const
+	{
+		return UTF8::fromWide(mName);
+	}
+
+	SPtr<ProjectResourceMeta> ProjectResourceMeta::create(const String& name, const UUID& uuid, UINT32 typeId,
 		const SPtr<ResourceMetaData>& resourceMetaData)
 	{
 		SPtr<ProjectResourceMeta> meta = bs_shared_ptr_new<ProjectResourceMeta>(ConstructPrivately());
-		meta->mName = name;
+		meta->mName = UTF8::toWide(name); // Using wide string internally to keep compatibility with older versions
 		meta->mUUID = uuid;
 		meta->mTypeId = typeId;
 		meta->mResourceMeta = resourceMetaData;
@@ -117,4 +123,4 @@ namespace bs
 	{
 		return ProjectFileMeta::getRTTIStatic();
 	}
-}
+}

+ 2 - 2
Source/EditorCore/Library/BsProjectResourceMeta.h

@@ -29,11 +29,11 @@ namespace bs
 		 * @param[in]	resourceMetaData	Non-project library specific meta-data.
 		 * @return							New project library resource meta data instance.
 		 */
-		static SPtr<ProjectResourceMeta> create(const WString& name, const UUID& uuid, UINT32 typeId, 
+		static SPtr<ProjectResourceMeta> create(const String& name, const UUID& uuid, UINT32 typeId, 
 			const SPtr<ResourceMetaData>& resourceMetaData);
 
 		/** Returns the name of the resource, unique within the file containing the resource. */
-		const WString& getUniqueName() const { return mName; }
+		String getUniqueName() const;
 
 		/**	Returns the UUID of the resource this meta data belongs to. */
 		const UUID& getUUID() const { return mUUID; }

+ 13 - 42
Source/EditorCore/RTTI/BsPlatformInfoRTTI.h

@@ -16,39 +16,17 @@ namespace bs
 	class BS_ED_EXPORT PlatformInfoRTTI : public RTTIType <PlatformInfo, IReflectable, PlatformInfoRTTI>
 	{
 	private:
-		WString& getDefines(PlatformInfo* obj) { return obj->defines; }
-		void setDefines(PlatformInfo* obj, WString& val) { obj->defines = val; }
-
-		PlatformType& getType(PlatformInfo* obj) { return obj->type; }
-		void setType(PlatformInfo* obj, PlatformType& val) { obj->type = val; }
-
-		WeakResourceHandle<Prefab>& getMainScene(PlatformInfo* obj) { return obj->mainScene; }
-		void setMainScene(PlatformInfo* obj, WeakResourceHandle<Prefab>& val) { obj->mainScene = val; }
-
-		bool& getFullscreen(PlatformInfo* obj) { return obj->fullscreen; }
-		void setFullscreen(PlatformInfo* obj, bool& val) { obj->fullscreen = val; }
-
-		UINT32& getWindowedWidth(PlatformInfo* obj) { return obj->windowedWidth; }
-		void setWindowedWidth(PlatformInfo* obj, UINT32& val) { obj->windowedWidth = val; }
-
-		UINT32& getWindowedHeight(PlatformInfo* obj) { return obj->windowedHeight; }
-		void setWindowedHeight(PlatformInfo* obj, UINT32& val) { obj->windowedHeight = val; }
-
-		bool& getDebug(PlatformInfo* obj) { return obj->debug; }
-		void setDebug(PlatformInfo* obj, bool& val) { obj->debug = val; }
+		BS_BEGIN_RTTI_MEMBERS
+			BS_RTTI_MEMBER_PLAIN(defines, 0)
+			BS_RTTI_MEMBER_PLAIN(type, 1)
+			BS_RTTI_MEMBER_REFL(mainScene, 2)
+			BS_RTTI_MEMBER_PLAIN(fullscreen, 3)
+			BS_RTTI_MEMBER_PLAIN(windowedWidth, 4)
+			BS_RTTI_MEMBER_PLAIN(windowedHeight, 5)
+			BS_RTTI_MEMBER_PLAIN(debug, 6)
+		BS_END_RTTI_MEMBERS
 
 	public:
-		PlatformInfoRTTI()
-		{
-			addPlainField("defines", 0, &PlatformInfoRTTI::getDefines, &PlatformInfoRTTI::setDefines);
-			addPlainField("type", 1, &PlatformInfoRTTI::getType, &PlatformInfoRTTI::setType);
-			addReflectableField("mainScene", 2, &PlatformInfoRTTI::getMainScene, &PlatformInfoRTTI::setMainScene);
-			addPlainField("fullscreen", 3, &PlatformInfoRTTI::getFullscreen, &PlatformInfoRTTI::setFullscreen);
-			addPlainField("windowedWidth", 4, &PlatformInfoRTTI::getWindowedWidth, &PlatformInfoRTTI::setWindowedWidth);
-			addPlainField("windowedHeight", 5, &PlatformInfoRTTI::getWindowedHeight, &PlatformInfoRTTI::setWindowedHeight);
-			addPlainField("debug", 6, &PlatformInfoRTTI::getDebug, &PlatformInfoRTTI::setDebug);
-		}
-
 		const String& getRTTIName() override
 		{
 			static String name = "PlatformInfo";
@@ -69,19 +47,12 @@ namespace bs
 	class BS_ED_EXPORT WinPlatformInfoRTTI : public RTTIType <WinPlatformInfo, PlatformInfo, WinPlatformInfoRTTI>
 	{
 	private:
-		WeakResourceHandle<Texture>& getIcon(WinPlatformInfo* obj) { return obj->icon; }
-		void setIcon(WinPlatformInfo* obj, WeakResourceHandle<Texture>& val) { obj->icon = val; }
-
-		WString& getTitlebarText(WinPlatformInfo* obj) { return obj->titlebarText; }
-		void setTitlebarText(WinPlatformInfo* obj, WString& val) { obj->titlebarText = val; }
+		BS_BEGIN_RTTI_MEMBERS
+			BS_RTTI_MEMBER_REFL(icon, 9)
+			BS_RTTI_MEMBER_PLAIN(titlebarText, 10)
+		BS_END_RTTI_MEMBERS
 
 	public:
-		WinPlatformInfoRTTI()
-		{
-			addReflectableField("icon", 9, &WinPlatformInfoRTTI::getIcon, &WinPlatformInfoRTTI::setIcon);
-			addPlainField("titlebarText", 10, &WinPlatformInfoRTTI::getTitlebarText, &WinPlatformInfoRTTI::setTitlebarText);
-		}
-
 		const String& getRTTIName() override
 		{
 			static String name = "WinPlatformInfo";

+ 26 - 8
Source/EditorCore/RTTI/BsProjectLibraryEntriesRTTI.h

@@ -5,6 +5,7 @@
 #include "BsEditorPrerequisites.h"
 #include "Reflection/BsRTTIType.h"
 #include "Library/BsProjectLibraryEntries.h"
+#include "String/BsUnicode.h"
 
 namespace bs
 {
@@ -53,10 +54,13 @@ namespace bs
 			memory += sizeof(UINT32);
 			size += sizeof(UINT32);
 
+			// For compatibility, encoding the name as a wide string
+			WString elemName = UTF8::toWide(data.elementName);
+
 			UINT32 type = (UINT32)data.type;
 			memory = rttiWriteElem(type, memory, size);
 			memory = rttiWriteElem(data.path, memory, size);
-			memory = rttiWriteElem(data.elementName, memory, size);
+			memory = rttiWriteElem(elemName, memory, size);
 			memory = rttiWriteElem(data.lastUpdateTime, memory, size);
 
 			memcpy(memoryStart, &size, sizeof(UINT32));
@@ -73,7 +77,11 @@ namespace bs
 			data.type = (bs::ProjectLibrary::LibraryEntryType)type;
 
 			memory = rttiReadElem(data.path, memory);
-			memory = rttiReadElem(data.elementName, memory);
+
+			WString elemName;
+			memory = rttiReadElem(elemName, memory);
+			data.elementName = UTF8::fromWide(elemName);
+
 			memory = rttiReadElem(data.lastUpdateTime, memory);
 
 			return size;
@@ -81,8 +89,10 @@ namespace bs
 
 		static UINT32 getDynamicSize(const bs::ProjectLibrary::FileEntry& data)	
 		{ 
-			UINT64 dataSize = sizeof(UINT32) + rttiGetElemSize(data.type) + rttiGetElemSize(data.path) + rttiGetElemSize(data.elementName) +
-				rttiGetElemSize(data.lastUpdateTime);
+			WString elemName = UTF8::toWide(data.elementName);
+
+			UINT64 dataSize = sizeof(UINT32) + rttiGetElemSize(data.type) + rttiGetElemSize(data.path) + 
+				rttiGetElemSize(elemName) + rttiGetElemSize(data.lastUpdateTime);
 
 #if BS_DEBUG_MODE
 			if(dataSize > std::numeric_limits<UINT32>::max())
@@ -106,9 +116,12 @@ namespace bs
 			memory += sizeof(UINT32);
 			size += sizeof(UINT32);
 
+			// For compatibility, encoding the name as a wide string
+			WString elemName = UTF8::toWide(data.elementName);
+
 			memory = rttiWriteElem(data.type, memory, size);
 			memory = rttiWriteElem(data.path, memory, size);
-			memory = rttiWriteElem(data.elementName, memory, size);
+			memory = rttiWriteElem(elemName, memory, size);
 
 			UINT32 numChildren = (UINT32)data.mChildren.size();
 			memory = rttiWriteElem(numChildren, memory, size);
@@ -138,7 +151,10 @@ namespace bs
 
 			memory = rttiReadElem(data.type, memory);
 			memory = rttiReadElem(data.path, memory);
-			memory = rttiReadElem(data.elementName, memory);
+
+			WString elemName;
+			memory = rttiReadElem(elemName, memory);
+			data.elementName = UTF8::fromWide(elemName);
 
 			UINT32 numChildren = 0;
 			memory = rttiReadElem(numChildren, memory);
@@ -171,7 +187,9 @@ namespace bs
 
 		static UINT32 getDynamicSize(const bs::ProjectLibrary::DirectoryEntry& data)	
 		{ 
-			UINT64 dataSize = sizeof(UINT32) + rttiGetElemSize(data.type) + rttiGetElemSize(data.path) + rttiGetElemSize(data.elementName);
+			WString elemName = UTF8::toWide(data.elementName);
+			UINT64 dataSize = sizeof(UINT32) + rttiGetElemSize(data.type) + rttiGetElemSize(data.path) + 
+				rttiGetElemSize(elemName);
 
 			dataSize += sizeof(UINT32);
 
@@ -202,4 +220,4 @@ namespace bs
 
 	/** @} */
 	/** @endcond */
-}
+}

+ 2 - 2
Source/EditorCore/Scene/BsGizmoManager.h

@@ -219,7 +219,7 @@ namespace bs
 		 * @param[in]	font		Font to use for rendering the text's characters.
 		 * @param[in]	fontSize	Size of the characters, in points.
 		 */
-		void drawText(const Vector3& position, const WString& text, const HFont& font, UINT32 fontSize = 16);
+		void drawText(const Vector3& position, const String& text, const HFont& font, UINT32 fontSize = 16);
 
 		/**
 		 * Clears all gizmo data, but doesn't update the meshes or the render data. (Calling update would create empty
@@ -366,7 +366,7 @@ namespace bs
 		struct TextData : CommonData
 		{
 			Vector3 position;
-			WString text;
+			String text;
 			HFont font;
 			UINT32 fontSize;
 		};

+ 1 - 1
Source/EditorCore/SceneView/BsGizmoManager.cpp

@@ -395,7 +395,7 @@ namespace bs
 		mIdxToSceneObjectMap[iconData.idx] = mActiveSO;
 	}
 
-	void GizmoManager::drawText(const Vector3& position, const WString& text, const HFont& font, UINT32 fontSize)
+	void GizmoManager::drawText(const Vector3& position, const String& text, const HFont& font, UINT32 fontSize)
 	{
 		HFont myFont = font;
 		if (myFont == nullptr)

+ 2 - 2
Source/EditorCore/UndoRedo/BsCmdBreakPrefab.cpp

@@ -5,7 +5,7 @@
 
 namespace bs
 {
-	CmdBreakPrefab::CmdBreakPrefab(const WString& description, const HSceneObject& sceneObject)
+	CmdBreakPrefab::CmdBreakPrefab(const String& description, const HSceneObject& sceneObject)
 		:EditorCommand(description), mSceneObject(sceneObject)
 	{
 
@@ -17,7 +17,7 @@ namespace bs
 
 	}
 	
-	void CmdBreakPrefab::execute(const HSceneObject& sceneObject, const WString& description)
+	void CmdBreakPrefab::execute(const HSceneObject& sceneObject, const String& description)
 	{
 		// Register command and commit it
 		CmdBreakPrefab* command = new (bs_alloc<CmdBreakPrefab>()) CmdBreakPrefab(description, sceneObject);

+ 2 - 2
Source/EditorCore/UndoRedo/BsCmdBreakPrefab.h

@@ -25,7 +25,7 @@ namespace bs
 		 * @param[in]	sceneObject		Scene object whose prefab link to break.
 		 * @param[in]	description		Optional description of what exactly the command does.
 		 */
-		static void execute(const HSceneObject& sceneObject, const WString& description = StringUtil::WBLANK);
+		static void execute(const HSceneObject& sceneObject, const String& description = StringUtil::BLANK);
 
 		/** @copydoc EditorCommand::commit */
 		void commit() override;
@@ -36,7 +36,7 @@ namespace bs
 	private:
 		friend class UndoRedo;
 
-		CmdBreakPrefab(const WString& description, const HSceneObject& sceneObject);
+		CmdBreakPrefab(const String& description, const HSceneObject& sceneObject);
 
 		/**	Clears all internal cached data. Should be called whenever a change is commited. */
 		void clear();

+ 3 - 3
Source/EditorCore/UndoRedo/BsCmdCloneSO.cpp

@@ -5,7 +5,7 @@
 
 namespace bs
 {
-	CmdCloneSO::CmdCloneSO(const WString& description, const Vector<HSceneObject>& originals)
+	CmdCloneSO::CmdCloneSO(const String& description, const Vector<HSceneObject>& originals)
 		:EditorCommand(description), mOriginals(originals)
 	{
 
@@ -16,7 +16,7 @@ namespace bs
 
 	}
 
-	HSceneObject CmdCloneSO::execute(const HSceneObject& sceneObject, const WString& description)
+	HSceneObject CmdCloneSO::execute(const HSceneObject& sceneObject, const String& description)
 	{
 		// Register command and commit it
 		CmdCloneSO* command = new (bs_alloc<CmdCloneSO>()) CmdCloneSO(description, { sceneObject });
@@ -31,7 +31,7 @@ namespace bs
 		return HSceneObject();
 	}
 
-	Vector<HSceneObject> CmdCloneSO::execute(const Vector<HSceneObject>& sceneObjects, const WString& description)
+	Vector<HSceneObject> CmdCloneSO::execute(const Vector<HSceneObject>& sceneObjects, const String& description)
 	{
 		// Register command and commit it
 		CmdCloneSO* command = new (bs_alloc<CmdCloneSO>()) CmdCloneSO(description, sceneObjects);

+ 3 - 3
Source/EditorCore/UndoRedo/BsCmdCloneSO.h

@@ -26,7 +26,7 @@ namespace bs
 		 * @param[in]	description		Optional description of what exactly the command does.
 		 * @return						Cloned object.
 		 */
-		static HSceneObject execute(const HSceneObject& sceneObject, const WString& description = StringUtil::WBLANK);
+		static HSceneObject execute(const HSceneObject& sceneObject, const String& description = StringUtil::BLANK);
 
 		/**
 		 * Creates new scene object(s) by cloning existing objects. Automatically registers the command with undo/redo 
@@ -36,7 +36,7 @@ namespace bs
 		 * @param[in]	description		Optional description of what exactly the command does.
 		 * @return						Cloned objects.
 		 */
-		static Vector<HSceneObject> execute(const Vector<HSceneObject>& sceneObjects, const WString& description = StringUtil::WBLANK);
+		static Vector<HSceneObject> execute(const Vector<HSceneObject>& sceneObjects, const String& description = StringUtil::BLANK);
 
 		/** @copydoc EditorCommand::commit */
 		void commit() override;
@@ -47,7 +47,7 @@ namespace bs
 	private:
 		friend class UndoRedo;
 
-		CmdCloneSO(const WString& description, const Vector<HSceneObject>& originals);
+		CmdCloneSO(const String& description, const Vector<HSceneObject>& originals);
 
 		Vector<HSceneObject> mOriginals;
 		Vector<HSceneObject> mClones;

+ 2 - 2
Source/EditorCore/UndoRedo/BsCmdCreateSO.cpp

@@ -5,7 +5,7 @@
 
 namespace bs
 {
-	CmdCreateSO::CmdCreateSO(const WString& description, const String& name, UINT32 flags)
+	CmdCreateSO::CmdCreateSO(const String& description, const String& name, UINT32 flags)
 		:EditorCommand(description), mName(name), mFlags(flags)
 	{
 
@@ -16,7 +16,7 @@ namespace bs
 
 	}
 
-	HSceneObject CmdCreateSO::execute(const String& name, UINT32 flags, const WString& description)
+	HSceneObject CmdCreateSO::execute(const String& name, UINT32 flags, const String& description)
 	{
 		// Register command and commit it
 		CmdCreateSO* command = new (bs_alloc<CmdCreateSO>()) CmdCreateSO(description, name, flags);

+ 2 - 2
Source/EditorCore/UndoRedo/BsCmdCreateSO.h

@@ -26,7 +26,7 @@ namespace bs
 		 * @param[in]	description	Optional description of what exactly the command does.
 		 * @return					Newly created scene object.
 		 */
-		static HSceneObject execute(const String& name, UINT32 flags, const WString& description = StringUtil::WBLANK);
+		static HSceneObject execute(const String& name, UINT32 flags, const String& description = StringUtil::BLANK);
 
 		/** @copydoc EditorCommand::commit */
 		void commit() override;
@@ -37,7 +37,7 @@ namespace bs
 	private:
 		friend class UndoRedo;
 
-		CmdCreateSO(const WString& description, const String& name, UINT32 flags);
+		CmdCreateSO(const String& description, const String& name, UINT32 flags);
 
 		String mName;
 		UINT32 mFlags;

+ 2 - 2
Source/EditorCore/UndoRedo/BsCmdDeleteSO.cpp

@@ -7,7 +7,7 @@
 
 namespace bs
 {
-	CmdDeleteSO::CmdDeleteSO(const WString& description, const HSceneObject& sceneObject)
+	CmdDeleteSO::CmdDeleteSO(const String& description, const HSceneObject& sceneObject)
 		: EditorCommand(description), mSceneObject(sceneObject), mSerializedObject(nullptr), mSerializedObjectSize(0)
 		, mSerializedObjectParentId(0)
 	{
@@ -32,7 +32,7 @@ namespace bs
 		}
 	}
 
-	void CmdDeleteSO::execute(const HSceneObject& sceneObject, const WString& description)
+	void CmdDeleteSO::execute(const HSceneObject& sceneObject, const String& description)
 	{
 		// Register command and commit it
 		CmdDeleteSO* command = new (bs_alloc<CmdDeleteSO>()) CmdDeleteSO(description, sceneObject);

+ 2 - 2
Source/EditorCore/UndoRedo/BsCmdDeleteSO.h

@@ -26,7 +26,7 @@ namespace bs
 		 * @param[in]	sceneObject	Scene object to delete.
 		 * @param[in]	description	Optional description of what exactly the command does.
 		 */
-		static void execute(const HSceneObject& sceneObject, const WString& description = StringUtil::WBLANK);
+		static void execute(const HSceneObject& sceneObject, const String& description = StringUtil::BLANK);
 
 		/** @copydoc EditorCommand::commit */
 		void commit() override;
@@ -37,7 +37,7 @@ namespace bs
 	private:
 		friend class UndoRedo;
 
-		CmdDeleteSO(const WString& description, const HSceneObject& sceneObject);
+		CmdDeleteSO(const String& description, const HSceneObject& sceneObject);
 
 		/**
 		 * Saves the state of the specified object, all of its children and components. Make sure to call clear() when you

+ 2 - 2
Source/EditorCore/UndoRedo/BsCmdInputFieldValueChange.h

@@ -29,7 +29,7 @@ namespace bs
 		 * @param[in]	description	Optional description of what exactly the command does.
 		 */
 		static void execute(InputFieldType* inputField, const ValueType& value, 
-			const WString& description = StringUtil::WBLANK)
+			const String& description = StringUtil::BLANK)
 		{
 			CmdInputFieldValueChange* command = 
 				new (bs_alloc<CmdInputFieldValueChange>()) CmdInputFieldValueChange(description, inputField, value);
@@ -54,7 +54,7 @@ namespace bs
 	private:
 		friend class UndoRedo;
 
-		CmdInputFieldValueChange(const WString& description, InputFieldType* inputField, const ValueType& value)
+		CmdInputFieldValueChange(const String& description, InputFieldType* inputField, const ValueType& value)
 			:EditorCommand(description), mOldValue(inputField->getValue()), mNewValue(value), mInputField(inputField)
 		{ }
 

+ 2 - 2
Source/EditorCore/UndoRedo/BsCmdInstantiateSO.cpp

@@ -6,7 +6,7 @@
 
 namespace bs
 {
-	CmdInstantiateSO::CmdInstantiateSO(const WString& description, const HPrefab& prefab)
+	CmdInstantiateSO::CmdInstantiateSO(const String& description, const HPrefab& prefab)
 		:EditorCommand(description), mPrefab(prefab)
 	{
 
@@ -17,7 +17,7 @@ namespace bs
 
 	}
 
-	HSceneObject CmdInstantiateSO::execute(const HPrefab& prefab, const WString& description)
+	HSceneObject CmdInstantiateSO::execute(const HPrefab& prefab, const String& description)
 	{
 		// Register command and commit it
 		CmdInstantiateSO* command = new (bs_alloc<CmdInstantiateSO>()) CmdInstantiateSO(description, prefab);

+ 2 - 2
Source/EditorCore/UndoRedo/BsCmdInstantiateSO.h

@@ -28,7 +28,7 @@ namespace bs
 		 * @param[in]	description		Optional description of what exactly the command does.
 		 * @return						Instantiated object.
 		 */
-		static HSceneObject execute(const HPrefab& prefab, const WString& description = StringUtil::WBLANK);
+		static HSceneObject execute(const HPrefab& prefab, const String& description = StringUtil::BLANK);
 
 		/** @copydoc EditorCommand::commit */
 		void commit() override;
@@ -39,7 +39,7 @@ namespace bs
 	private:
 		friend class UndoRedo;
 
-		CmdInstantiateSO(const WString& description, const HPrefab& prefab);
+		CmdInstantiateSO(const String& description, const HPrefab& prefab);
 
 		HPrefab mPrefab;
 		HSceneObject mSceneObject;

+ 2 - 2
Source/EditorCore/UndoRedo/BsCmdRecordSO.cpp

@@ -7,7 +7,7 @@
 
 namespace bs
 {
-	CmdRecordSO::CmdRecordSO(const WString& description, const HSceneObject& sceneObject, bool recordHierarchy)
+	CmdRecordSO::CmdRecordSO(const String& description, const HSceneObject& sceneObject, bool recordHierarchy)
 		: EditorCommand(description), mSceneObject(sceneObject), mRecordHierarchy(recordHierarchy)
 		, mSerializedObject(nullptr), mSerializedObjectSize(0)
 	{
@@ -31,7 +31,7 @@ namespace bs
 		}
 	}
 
-	void CmdRecordSO::execute(const HSceneObject& sceneObject, bool recordHierarchy, const WString& description)
+	void CmdRecordSO::execute(const HSceneObject& sceneObject, bool recordHierarchy, const String& description)
 	{
 		// Register command and commit it
 		CmdRecordSO* command = new (bs_alloc<CmdRecordSO>()) CmdRecordSO(description, sceneObject, recordHierarchy);

+ 2 - 2
Source/EditorCore/UndoRedo/BsCmdRecordSO.h

@@ -31,7 +31,7 @@ namespace bs
 		 * @param[in]	description		Optional description of what exactly the command does.
 		 */
 		static void execute(const HSceneObject& sceneObject, bool recordHierarchy = false, 
-			const WString& description = StringUtil::WBLANK);
+			const String& description = StringUtil::BLANK);
 
 		/** @copydoc EditorCommand::commit */
 		void commit() override;
@@ -42,7 +42,7 @@ namespace bs
 	private:
 		friend class UndoRedo;
 
-		CmdRecordSO(const WString& description, const HSceneObject& sceneObject, bool recordHierarchy);
+		CmdRecordSO(const String& description, const HSceneObject& sceneObject, bool recordHierarchy);
 
 		/**
 		 * Saves the state of the specified object, all of its children and components. Make sure to call clear() when you

+ 3 - 3
Source/EditorCore/UndoRedo/BsCmdReparentSO.cpp

@@ -5,7 +5,7 @@
 
 namespace bs
 {
-	CmdReparentSO::CmdReparentSO(const WString& description, const Vector<HSceneObject>& sceneObjects, const HSceneObject& newParent)
+	CmdReparentSO::CmdReparentSO(const String& description, const Vector<HSceneObject>& sceneObjects, const HSceneObject& newParent)
 		:EditorCommand(description), mSceneObjects(sceneObjects), mNewParent(newParent)
 	{
 		for(auto& sceneObject : mSceneObjects)
@@ -15,7 +15,7 @@ namespace bs
 	}
 
 	void CmdReparentSO::execute(const Vector<HSceneObject>& sceneObjects, const HSceneObject& newParent,
-		const WString& description)
+		const String& description)
 	{
 		// Register command and commit it
 		CmdReparentSO* command = new (bs_alloc<CmdReparentSO>()) CmdReparentSO(description, sceneObjects, newParent);
@@ -25,7 +25,7 @@ namespace bs
 		commandPtr->commit();
 	}
 
-	void CmdReparentSO::execute(HSceneObject& sceneObject, const HSceneObject& newParent, const WString& description)
+	void CmdReparentSO::execute(HSceneObject& sceneObject, const HSceneObject& newParent, const String& description)
 	{
 		// Register command and commit it
 		CmdReparentSO* command = new (bs_alloc<CmdReparentSO>()) CmdReparentSO(description, { sceneObject }, newParent);

+ 3 - 3
Source/EditorCore/UndoRedo/BsCmdReparentSO.h

@@ -28,7 +28,7 @@ namespace bs
 		 * @param[in]	description		Optional description of what exactly the command does.
 		 */
 		static void execute(const Vector<HSceneObject>& sceneObjects, const HSceneObject& newParent, 
-			const WString& description = StringUtil::WBLANK);
+			const String& description = StringUtil::BLANK);
 
 		/**
 		 * Creates and executes the command on the provided scene object. Automatically registers the command with
@@ -39,7 +39,7 @@ namespace bs
 		 * @param[in]	description		Optional description of what exactly the command does.
 		 */
 		static void execute(HSceneObject& sceneObject, const HSceneObject& newParent, 
-			const WString& description = StringUtil::WBLANK);
+			const String& description = StringUtil::BLANK);
 
 		/** @copydoc EditorCommand::commit */
 		void commit() override;
@@ -50,7 +50,7 @@ namespace bs
 	private:
 		friend class UndoRedo;
 
-		CmdReparentSO(const WString& description, const Vector<HSceneObject>& sceneObjects, const HSceneObject& newParent);
+		CmdReparentSO(const String& description, const Vector<HSceneObject>& sceneObjects, const HSceneObject& newParent);
 
 		Vector<HSceneObject> mSceneObjects;
 		Vector<HSceneObject> mOldParents;

+ 1 - 1
Source/EditorCore/UndoRedo/BsEditorCommand.cpp

@@ -4,7 +4,7 @@
 
 namespace bs
 {
-	EditorCommand::EditorCommand(const WString& description)
+	EditorCommand::EditorCommand(const String& description)
 		:mDescription(description), mId(0)
 	{ }
 }

+ 2 - 2
Source/EditorCore/UndoRedo/BsEditorCommand.h

@@ -17,7 +17,7 @@ namespace bs
 	class BS_ED_EXPORT EditorCommand
 	{
 	public:
-		EditorCommand(const WString& description);
+		EditorCommand(const String& description);
 		virtual ~EditorCommand() { }
 
 		/**	Applies the command, committing the change. */
@@ -35,7 +35,7 @@ namespace bs
 		/** Triggers when a command is removed from an undo/redo stack. */
 		virtual void onCommandRemoved() {}
 
-		WString mDescription;
+		String mDescription;
 		UINT32 mId;
 	};
 

+ 213 - 213
Source/EditorCore/Utility/BsBuiltinEditorResources.h

@@ -154,10 +154,10 @@ namespace bs
 		HSpriteTexture getLogMessageIcon(LogMessageIcon icon, UINT32 size, bool dark) const;
 
 		/**	Returns text contained in the default "empty" shader. */
-		WString getEmptyShaderCode() const;
+		String getEmptyShaderCode() const;
 
 		/**	Returns text contained in the default "empty" C# script. */
-		WString getEmptyCSScriptCode() const;
+		String getEmptyCSScriptCode() const;
 
 		/**	Returns image data the Banshee Engine splash screen. */
 		static SPtr<PixelData> getSplashScreen();
@@ -191,13 +191,13 @@ namespace bs
 		SPtr<GUISkin> generateGUISkin();
 
 		/**	Loads a GUI skin texture with the specified filename. */
-		HSpriteTexture getGUITexture(const WString& name) const;
+		HSpriteTexture getGUITexture(const String& name) const;
 
 		/**	Loads a GUI icon with the specified filename. */
-		HSpriteTexture getGUIIcon(const WString& name) const;
+		HSpriteTexture getGUIIcon(const String& name) const;
 
 		/**	Loads a shader with the specified filename */
-		HShader getShader(const WString& name) const;
+		HShader getShader(const String& name) const;
 
 		HShader mShaderDockOverlay;
 		HShader mShaderSceneGrid;
@@ -244,243 +244,243 @@ namespace bs
 
 		Path ResourceManifestPath;
 
-		static const WString DefaultFontFilename;
-		static const WString DefaultAAFontFilename;
+		static const String DefaultFontFilename;
+		static const String DefaultAAFontFilename;
 		static const UINT32 DefaultFontSize;
 		static const UINT32 TitleFontSize;
 
 		static const Color TextNormalColor;
 		static const Color TextActiveColor;
 
-		static const WString GUISkinFile;
-
-		static const WString FolderIconTex;
-		static const WString MeshIconTex;
-		static const WString TextureIconTex;
-		static const WString FontIconTex;
-		static const WString PlainTextIconTex;
-		static const WString ScriptCodeIconTex;
-		static const WString ShaderIconTex;
-		static const WString ShaderIncludeIconTex;
-		static const WString MaterialIconTex;
-		static const WString SpriteTextureIconTex;
-		static const WString PrefabIconTex;
-		static const WString GUISkinIconTex;
-		static const WString PhysicsMaterialIconTex;
-		static const WString PhysicsMeshIconTex;
-		static const WString AudioClipIconTex;
-		static const WString AnimationClipIconTex;
-
-		static const WString WindowBackgroundTex;
-
-		static const WString WindowFrameNormal;
-		static const WString WindowFrameFocused;
-
-		static const WString TabBarBackgroundTex;
-		static const WString TitleBarBackgroundTex;
-
-		static const WString CloseButtonNormalTex;
-		static const WString CloseButtonHoverTex;
-		static const WString CloseButtonActiveTex;
-
-		static const WString MinButtonNormalTex;
-		static const WString MinButtonHoverTex;
-		static const WString MinButtonActiveTex;
-
-		static const WString MaxButtonNormalTex;
-		static const WString MaxButtonHoverTex;
-		static const WString MaxButtonActiveTex;
-
-		static const WString TabButtonNormalTex;
-		static const WString TabButtonFocusedTex;
-
-		static const WString ButtonNormalTex;
-		static const WString ButtonHoverTex;
-		static const WString ButtonActiveTex;
-
-		static const WString ButtonLeftNormalTex;
-		static const WString ButtonLeftHoverTex;
-		static const WString ButtonLeftActiveTex;
-
-		static const WString ButtonRightNormalTex;
-		static const WString ButtonRightHoverTex;
-		static const WString ButtonRightActiveTex;
-
-		static const WString ToggleNormalTex;
-		static const WString ToggleHoverTex;
-		static const WString ToggleNormalOnTex;
-		static const WString ToggleHoverOnTex;
-
-		static const WString ObjectDropBtnNormalTex;
-		static const WString ObjectDropBtnNormalOnTex;
-		static const WString ObjectClearBtnNormalTex;
-		static const WString ObjectClearBtnHoverTex;
-		static const WString ObjectClearBtnActiveTex;
-
-		static const WString SliderHBackgroundTex;
-		static const WString SliderHFillTex;
-		static const WString SliderVBackgroundTex;
-		static const WString SliderVFillTex;
-		static const WString SliderHandleNormalTex;
-		static const WString SliderHandleHoverTex;
-		static const WString SliderHandleActiveTex;
+		static const String GUISkinFile;
+
+		static const String FolderIconTex;
+		static const String MeshIconTex;
+		static const String TextureIconTex;
+		static const String FontIconTex;
+		static const String PlainTextIconTex;
+		static const String ScriptCodeIconTex;
+		static const String ShaderIconTex;
+		static const String ShaderIncludeIconTex;
+		static const String MaterialIconTex;
+		static const String SpriteTextureIconTex;
+		static const String PrefabIconTex;
+		static const String GUISkinIconTex;
+		static const String PhysicsMaterialIconTex;
+		static const String PhysicsMeshIconTex;
+		static const String AudioClipIconTex;
+		static const String AnimationClipIconTex;
+
+		static const String WindowBackgroundTex;
+
+		static const String WindowFrameNormal;
+		static const String WindowFrameFocused;
+
+		static const String TabBarBackgroundTex;
+		static const String TitleBarBackgroundTex;
+
+		static const String CloseButtonNormalTex;
+		static const String CloseButtonHoverTex;
+		static const String CloseButtonActiveTex;
+
+		static const String MinButtonNormalTex;
+		static const String MinButtonHoverTex;
+		static const String MinButtonActiveTex;
+
+		static const String MaxButtonNormalTex;
+		static const String MaxButtonHoverTex;
+		static const String MaxButtonActiveTex;
+
+		static const String TabButtonNormalTex;
+		static const String TabButtonFocusedTex;
+
+		static const String ButtonNormalTex;
+		static const String ButtonHoverTex;
+		static const String ButtonActiveTex;
+
+		static const String ButtonLeftNormalTex;
+		static const String ButtonLeftHoverTex;
+		static const String ButtonLeftActiveTex;
+
+		static const String ButtonRightNormalTex;
+		static const String ButtonRightHoverTex;
+		static const String ButtonRightActiveTex;
+
+		static const String ToggleNormalTex;
+		static const String ToggleHoverTex;
+		static const String ToggleNormalOnTex;
+		static const String ToggleHoverOnTex;
+
+		static const String ObjectDropBtnNormalTex;
+		static const String ObjectDropBtnNormalOnTex;
+		static const String ObjectClearBtnNormalTex;
+		static const String ObjectClearBtnHoverTex;
+		static const String ObjectClearBtnActiveTex;
+
+		static const String SliderHBackgroundTex;
+		static const String SliderHFillTex;
+		static const String SliderVBackgroundTex;
+		static const String SliderVFillTex;
+		static const String SliderHandleNormalTex;
+		static const String SliderHandleHoverTex;
+		static const String SliderHandleActiveTex;
 
-		static const WString FoldoutOpenNormalTex;
-		static const WString FoldoutOpenHoverTex;
-		static const WString FoldoutOpenActiveTex;
-		static const WString FoldoutClosedNormalTex;
-		static const WString FoldoutClosedHoverTex;
-		static const WString FoldoutClosedActiveTex;
+		static const String FoldoutOpenNormalTex;
+		static const String FoldoutOpenHoverTex;
+		static const String FoldoutOpenActiveTex;
+		static const String FoldoutClosedNormalTex;
+		static const String FoldoutClosedHoverTex;
+		static const String FoldoutClosedActiveTex;
 
-		static const WString InputBoxNormalTex;
-		static const WString InputBoxHoverTex;
-		static const WString InputBoxFocusedTex;
+		static const String InputBoxNormalTex;
+		static const String InputBoxHoverTex;
+		static const String InputBoxFocusedTex;
 
-		static const WString ScrollBarUpNormalTex;
-		static const WString ScrollBarUpHoverTex;
-		static const WString ScrollBarUpActiveTex;
+		static const String ScrollBarUpNormalTex;
+		static const String ScrollBarUpHoverTex;
+		static const String ScrollBarUpActiveTex;
 
-		static const WString ScrollBarDownNormalTex;
-		static const WString ScrollBarDownHoverTex;
-		static const WString ScrollBarDownActiveTex;
+		static const String ScrollBarDownNormalTex;
+		static const String ScrollBarDownHoverTex;
+		static const String ScrollBarDownActiveTex;
 
-		static const WString ScrollBarLeftNormalTex;
-		static const WString ScrollBarLeftHoverTex;
-		static const WString ScrollBarLeftActiveTex;
+		static const String ScrollBarLeftNormalTex;
+		static const String ScrollBarLeftHoverTex;
+		static const String ScrollBarLeftActiveTex;
 
-		static const WString ScrollBarRightNormalTex;
-		static const WString ScrollBarRightHoverTex;
-		static const WString ScrollBarRightActiveTex;
+		static const String ScrollBarRightNormalTex;
+		static const String ScrollBarRightHoverTex;
+		static const String ScrollBarRightActiveTex;
 
-		static const WString ScrollBarHandleHorzNormalTex;
-		static const WString ScrollBarHandleHorzHoverTex;
-		static const WString ScrollBarHandleHorzActiveTex;
-
-		static const WString ScrollBarHandleVertNormalTex;
-		static const WString ScrollBarHandleVertHoverTex;
-		static const WString ScrollBarHandleVertActiveTex;
+		static const String ScrollBarHandleHorzNormalTex;
+		static const String ScrollBarHandleHorzHoverTex;
+		static const String ScrollBarHandleHorzActiveTex;
+
+		static const String ScrollBarHandleVertNormalTex;
+		static const String ScrollBarHandleVertHoverTex;
+		static const String ScrollBarHandleVertActiveTex;
 
-		static const WString ScrollBarResizeableHandleHorzNormalTex;
-		static const WString ScrollBarResizeableHandleHorzHoverTex;
-		static const WString ScrollBarResizeableHandleHorzActiveTex;
+		static const String ScrollBarResizeableHandleHorzNormalTex;
+		static const String ScrollBarResizeableHandleHorzHoverTex;
+		static const String ScrollBarResizeableHandleHorzActiveTex;
 
-		static const WString ScrollBarResizeableHandleVertNormalTex;
-		static const WString ScrollBarResizeableHandleVertHoverTex;
-		static const WString ScrollBarResizeableHandleVertActiveTex;
+		static const String ScrollBarResizeableHandleVertNormalTex;
+		static const String ScrollBarResizeableHandleVertHoverTex;
+		static const String ScrollBarResizeableHandleVertActiveTex;
 
-		static const WString ScrollBarHBgTex;
-		static const WString ScrollBarVBgTex;
+		static const String ScrollBarHBgTex;
+		static const String ScrollBarVBgTex;
 
-		static const WString DropDownBtnNormalTex;
-		static const WString DropDownBtnHoverTex;
-		static const WString DropDownBtnActiveTex;
-
-		static const WString DropDownBoxBgTex;
-		static const WString DropDownBoxSideBgTex;
-		static const WString DropDownBoxHandleTex;
-
-		static const WString DropDownBoxEntryNormalTex;
-		static const WString DropDownBoxEntryHoverTex;
-
-		static const WString DropDownBoxEntryToggleNormalTex;
-		static const WString DropDownBoxEntryToggleHoverTex;
-		static const WString DropDownBoxEntryToggleNormalOnTex;
-		static const WString DropDownBoxEntryToggleHoverOnTex;
-
-		static const WString DropDownBoxBtnUpNormalTex;
-		static const WString DropDownBoxBtnUpHoverTex;
-
-		static const WString DropDownBoxBtnDownNormalTex;
-		static const WString DropDownBoxBtnDownHoverTex;
-
-		static const WString DropDownBoxEntryExpNormalTex;
-		static const WString DropDownBoxEntryExpHoverTex;
-
-		static const WString DropDownSeparatorTex;
-
-		static const WString MenuBarBgTex;
-		static const WString MenuBarBansheeLogoTex;
-
-		static const WString MenuBarBtnNormalTex;
-		static const WString MenuBarBtnHoverTex;
-		static const WString MenuBarBtnActiveTex;
-
-		static const WString MenuBarLineNormalTex;
-		static const WString MenuBarLineActiveTex;
-
-		static const WString ToolBarBtnNormalTex;
-		static const WString ToolBarBtnHoverTex;
-		static const WString ToolBarBtnActiveTex;
-
-		static const WString ToolBarSeparatorTex;
-
-		static const WString TreeViewExpandButtonOffNormal;
-		static const WString TreeViewExpandButtonOffHover;
-		static const WString TreeViewExpandButtonOnNormal;
-		static const WString TreeViewExpandButtonOnHover;
-
-		static const WString TreeViewHighlightBackground;
-		static const WString TreeViewEditBox;
-
-		static const WString TreeViewElementHighlight;
-		static const WString TreeViewElementSepHighlight;
+		static const String DropDownBtnNormalTex;
+		static const String DropDownBtnHoverTex;
+		static const String DropDownBtnActiveTex;
+
+		static const String DropDownBoxBgTex;
+		static const String DropDownBoxSideBgTex;
+		static const String DropDownBoxHandleTex;
+
+		static const String DropDownBoxEntryNormalTex;
+		static const String DropDownBoxEntryHoverTex;
+
+		static const String DropDownBoxEntryToggleNormalTex;
+		static const String DropDownBoxEntryToggleHoverTex;
+		static const String DropDownBoxEntryToggleNormalOnTex;
+		static const String DropDownBoxEntryToggleHoverOnTex;
+
+		static const String DropDownBoxBtnUpNormalTex;
+		static const String DropDownBoxBtnUpHoverTex;
+
+		static const String DropDownBoxBtnDownNormalTex;
+		static const String DropDownBoxBtnDownHoverTex;
+
+		static const String DropDownBoxEntryExpNormalTex;
+		static const String DropDownBoxEntryExpHoverTex;
+
+		static const String DropDownSeparatorTex;
+
+		static const String MenuBarBgTex;
+		static const String MenuBarBansheeLogoTex;
+
+		static const String MenuBarBtnNormalTex;
+		static const String MenuBarBtnHoverTex;
+		static const String MenuBarBtnActiveTex;
+
+		static const String MenuBarLineNormalTex;
+		static const String MenuBarLineActiveTex;
+
+		static const String ToolBarBtnNormalTex;
+		static const String ToolBarBtnHoverTex;
+		static const String ToolBarBtnActiveTex;
+
+		static const String ToolBarSeparatorTex;
+
+		static const String TreeViewExpandButtonOffNormal;
+		static const String TreeViewExpandButtonOffHover;
+		static const String TreeViewExpandButtonOnNormal;
+		static const String TreeViewExpandButtonOnHover;
+
+		static const String TreeViewHighlightBackground;
+		static const String TreeViewEditBox;
+
+		static const String TreeViewElementHighlight;
+		static const String TreeViewElementSepHighlight;
 
-		static const WString ColorPickerSliderHorzHandleTex;
-		static const WString ColorPickerSliderVertHandleTex;
-		static const WString ColorPickerSlider2DHandleTex;
+		static const String ColorPickerSliderHorzHandleTex;
+		static const String ColorPickerSliderVertHandleTex;
+		static const String ColorPickerSlider2DHandleTex;
 
-		static const WString ProgressBarFillTex;
-		static const WString ProgressBarBgTex;
+		static const String ProgressBarFillTex;
+		static const String ProgressBarBgTex;
 
-		static const WString SelectionAreaTex;
-		static const WString SelectionBgTex;
+		static const String SelectionAreaTex;
+		static const String SelectionBgTex;
 
-		static const WString TextureDropTex;
-		static const WString TextureDropOnTex;
+		static const String TextureDropTex;
+		static const String TextureDropOnTex;
 
-		static const WString XButtonNormalTex;
-		static const WString XButtonHoverTex;
-		static const WString XButtonActiveTex;
+		static const String XButtonNormalTex;
+		static const String XButtonHoverTex;
+		static const String XButtonActiveTex;
 
-		static const WString StatusBarBgTex;
-		static const WString ScrollAreaBgTex;
+		static const String StatusBarBgTex;
+		static const String ScrollAreaBgTex;
 
-		static const WString InspectorTitleBgTex;
-		static const WString InspectorContentBgTex;
-		static const WString InspectorContentBgAlternateTex;
+		static const String InspectorTitleBgTex;
+		static const String InspectorContentBgTex;
+		static const String InspectorContentBgAlternateTex;
 
-		static const WString LibraryEntryFirstBgTex;
-		static const WString LibraryEntryBgTex;
-		static const WString LibraryEntryLastBgTex;
+		static const String LibraryEntryFirstBgTex;
+		static const String LibraryEntryBgTex;
+		static const String LibraryEntryLastBgTex;
 
-		static const WString LibraryEntryVertFirstBgTex;
-		static const WString LibraryEntryVertBgTex;
-		static const WString LibraryEntryVertLastBgTex;
+		static const String LibraryEntryVertFirstBgTex;
+		static const String LibraryEntryVertBgTex;
+		static const String LibraryEntryVertLastBgTex;
 
-		static const WString ShaderDockOverlayFile;
-		static const WString ShaderSceneGridFile;
-		static const WString ShaderPickingCullNoneFile;
-		static const WString ShaderPickingCullCWFile;
-		static const WString ShaderPickingCullCCWFile;
-		static const WString ShaderPickingAlphaCullNoneFile;
-		static const WString ShaderPickingAlphaCullCWFile;
-		static const WString ShaderPickingAlphaCullCCWFile;
-		static const WString ShaderLineGizmoFile;
-		static const WString ShaderSolidGizmoFile;
-		static const WString ShaderWireGizmoFile;
-		static const WString ShaderLineHandleFile;
-		static const WString ShaderSolidHandleFile;
-		static const WString ShaderHandleClearAlphaFile;
-		static const WString ShaderIconGizmoFile;
-		static const WString ShaderGizmoPickingFile;
-		static const WString ShaderGizmoPickingAlphaFile;
-		static const WString ShaderTextGizmoFile;
-		static const WString ShaderSelectionFile;
+		static const String ShaderDockOverlayFile;
+		static const String ShaderSceneGridFile;
+		static const String ShaderPickingCullNoneFile;
+		static const String ShaderPickingCullCWFile;
+		static const String ShaderPickingCullCCWFile;
+		static const String ShaderPickingAlphaCullNoneFile;
+		static const String ShaderPickingAlphaCullCWFile;
+		static const String ShaderPickingAlphaCullCCWFile;
+		static const String ShaderLineGizmoFile;
+		static const String ShaderSolidGizmoFile;
+		static const String ShaderWireGizmoFile;
+		static const String ShaderLineHandleFile;
+		static const String ShaderSolidHandleFile;
+		static const String ShaderHandleClearAlphaFile;
+		static const String ShaderIconGizmoFile;
+		static const String ShaderGizmoPickingFile;
+		static const String ShaderGizmoPickingAlphaFile;
+		static const String ShaderTextGizmoFile;
+		static const String ShaderSelectionFile;
 
-		static const WString EmptyShaderCodeFile;
-		static const WString EmptyCSScriptCodeFile;
+		static const String EmptyShaderCodeFile;
+		static const String EmptyCSScriptCodeFile;
 
-		static const wchar_t* SplashScreenName;
+		static const char* SplashScreenName;
 	};
 
 	/** @} */

+ 12 - 7
Source/EditorCore/Win32/BsVSCodeEditor.cpp

@@ -16,6 +16,7 @@
 #include "Win32/dte80a.tlh"
 
 #include "Win32/Setup.Configuration.h"
+#include "String/BsUnicode.h"
 _COM_SMARTPTR_TYPEDEF(ISetupInstance, __uuidof(ISetupInstance));
 _COM_SMARTPTR_TYPEDEF(ISetupInstance2, __uuidof(ISetupInstance2));
 _COM_SMARTPTR_TYPEDEF(IEnumSetupInstances, __uuidof(IEnumSetupInstances));
@@ -152,7 +153,8 @@ namespace bs
 			if (FAILED(CreateClassMoniker(clsID, &dteMoniker)))
 				return nullptr;
 
-			CComBSTR bstrSolution(solutionPath.toWString(Path::PathType::Windows).c_str());
+			WString wideSolutionPath = UTF8::toWide(solutionPath.toString(Path::PathType::Windows));
+			CComBSTR bstrSolution(wideSolutionPath.c_str());
 			CComPtr<IMoniker> moniker;
 			ULONG count = 0;
 			while (enumMoniker->Next(1, &moniker, &count) == S_OK)
@@ -212,7 +214,8 @@ namespace bs
 			if (FAILED(dte->get_Solution(&solution)))
 				return nullptr;
 
-			CComBSTR bstrSolution(solutionPath.toWString(Path::PathType::Windows).c_str());
+			WString wideSolutionPath = UTF8::toWide(solutionPath.toString(Path::PathType::Windows));
+			CComBSTR bstrSolution(wideSolutionPath.c_str());
 			if (FAILED(solution->Open(bstrSolution)))
 				return nullptr;
 
@@ -245,7 +248,9 @@ namespace bs
 			if (FAILED(dte->get_ItemOperations(&itemOperations)))
 				return false;
 
-			CComBSTR bstrFilePath(filePath.toWString(Path::PathType::Windows).c_str());
+			WString wideFilePath = UTF8::toWide(filePath.toString(Path::PathType::Windows));
+
+			CComBSTR bstrFilePath(wideFilePath.c_str());
 			CComBSTR bstrKind(EnvDTE::vsViewKindPrimary);
 			CComPtr<EnvDTE::Window> window = nullptr;
 			if (FAILED(itemOperations->OpenFile(bstrFilePath, bstrKind, &window)))
@@ -339,7 +344,7 @@ namespace bs
 		String solutionString = CSProject::writeSolution(csProjVer, data);
 		solutionString = StringUtil::replaceAll(solutionString, "\n", "\r\n");
 		Path solutionPath = outputPath;
-		solutionPath.append(data.name + L".sln");
+		solutionPath.append(data.name + ".sln");
 
 		for (auto& project : data.projects)
 		{
@@ -347,7 +352,7 @@ namespace bs
 			projectString = StringUtil::replaceAll(projectString, "\n", "\r\n");
 
 			Path projectPath = outputPath;
-			projectPath.append(project.name + L".csproj");
+			projectPath.append(project.name + ".csproj");
 
 			SPtr<DataStream> projectStream = FileSystem::createAndOpenFile(projectPath);
 			projectStream->write(projectString.c_str(), projectString.size() * sizeof(String::value_type));
@@ -421,7 +426,7 @@ namespace bs
 
 			VSVersionInfo info;
 			info.name = version.second.name;
-			info.execPath = installPath.append(version.second.executable);
+			info.execPath = UTF8::fromWide(installPath.append(version.second.executable));
 			info.CLSID = clsID;
 			info.version = version.first;
 
@@ -495,7 +500,7 @@ namespace bs
 			{
 				VSVersionInfo info;
 				info.name = WString(bstrName);
-				info.execPath = Path(WString(bstrInstallationPath)) + Path(L"Common7/IDE/devenv.exe");
+				info.execPath = Path(UTF8::fromWide(WString(bstrInstallationPath))) + Path("Common7/IDE/devenv.exe");
 				info.version = VisualStudioVersion::VS2017;
 				info.CLSID = L"{3829D1F4-A427-4C75-B63C-7ABB7521B225}";
 

+ 3 - 3
Source/EditorCore/Win32/BsWin32BrowseDialogs.cpp

@@ -39,7 +39,7 @@ namespace bs
 
 	void setDefaultPath(IFileDialog* dialog, const Path& defaultPath)
 	{
-		WString pathStr = defaultPath.toWString();
+		WString pathStr = UTF8::toWide(defaultPath.toString());
 		const wchar_t* defaultPathW = pathStr.c_str();
 
 		IShellItem* folder;
@@ -74,7 +74,7 @@ namespace bs
 
 			LPWSTR name;
 			shellItem->GetDisplayName(SIGDN_FILESYSPATH, &name);
-			paths.push_back((Path)name);
+			paths.push_back((Path)UTF8::fromWide(WString(name)));
 			CoTaskMemFree(name);
 		}
 	}
@@ -151,7 +151,7 @@ namespace bs
 				LPWSTR filePath = nullptr;
 				shellItem->GetDisplayName(SIGDN_FILESYSPATH, &filePath);
 
-				paths.push_back((Path)filePath);
+				paths.push_back((Path)UTF8::fromWide(WString(filePath)));
 				CoTaskMemFree(filePath);
 
 				shellItem->Release();

+ 4 - 4
Source/Scripting/SBansheeEditor/BsEditorScriptLibrary.cpp

@@ -57,21 +57,21 @@ namespace bs
 		}
 		else // Otherwise just additively load them
 		{
-			MonoManager::instance().loadAssembly(engineAssemblyPath.toWString(), ENGINE_ASSEMBLY);
+			MonoManager::instance().loadAssembly(engineAssemblyPath.toString(), ENGINE_ASSEMBLY);
 			ScriptAssemblyManager::instance().loadAssemblyInfo(ENGINE_ASSEMBLY);
 
 			if (FileSystem::exists(gameAssemblyPath))
 			{
-				MonoManager::instance().loadAssembly(gameAssemblyPath.toWString(), SCRIPT_GAME_ASSEMBLY);
+				MonoManager::instance().loadAssembly(gameAssemblyPath.toString(), SCRIPT_GAME_ASSEMBLY);
 				ScriptAssemblyManager::instance().loadAssemblyInfo(SCRIPT_GAME_ASSEMBLY);
 			}
 
-			MonoManager::instance().loadAssembly(editorAssemblyPath.toWString(), EDITOR_ASSEMBLY);
+			MonoManager::instance().loadAssembly(editorAssemblyPath.toString(), EDITOR_ASSEMBLY);
 			ScriptAssemblyManager::instance().loadAssemblyInfo(EDITOR_ASSEMBLY);
 
 			if (FileSystem::exists(editorScriptAssemblyPath))
 			{
-				MonoManager::instance().loadAssembly(editorScriptAssemblyPath.toWString(), SCRIPT_EDITOR_ASSEMBLY);
+				MonoManager::instance().loadAssembly(editorScriptAssemblyPath.toString(), SCRIPT_EDITOR_ASSEMBLY);
 				ScriptAssemblyManager::instance().loadAssemblyInfo(SCRIPT_EDITOR_ASSEMBLY);
 			}
 

+ 1 - 1
Source/Scripting/SBansheeEditor/BsEditorScriptManager.cpp

@@ -127,7 +127,7 @@ namespace bs
 
 	void EditorScriptManager::loadMonoTypes()
 	{
-		WString editorAssemblyPath = gEditorApplication().getEditorAssemblyPath().toWString();
+		String editorAssemblyPath = gEditorApplication().getEditorAssemblyPath().toString();
 		mEditorAssembly = &MonoManager::instance().loadAssembly(editorAssemblyPath, EDITOR_ASSEMBLY);
 
 		mProgramEdClass = mEditorAssembly->getClass("BansheeEditor", "Program");

+ 3 - 3
Source/Scripting/SBansheeEditor/BsGUIGameObjectField.cpp

@@ -38,7 +38,7 @@ namespace bs
 		}
 
 		mDropButton = GUIDropButton::create((UINT32)DragAndDropType::SceneObject, GUIOptions(GUIOption::flexibleWidth()), getSubStyleName(BuiltinEditorResources::ObjectFieldDropBtnStyleName));
-		mClearButton = GUIButton::create(HString(L""), getSubStyleName(BuiltinEditorResources::ObjectFieldClearBtnStyleName));
+		mClearButton = GUIButton::create(HString(""), getSubStyleName(BuiltinEditorResources::ObjectFieldClearBtnStyleName));
 		mClearButton->onClick.connect(std::bind(&GUIGameObjectField::onClearButtonClicked, this));
 
 		mLayout->addElement(mDropButton);
@@ -184,7 +184,7 @@ namespace bs
 				return;
 
 			mInstanceId = value->getInstanceId();
-			mDropButton->setContent(GUIContent(HString(toWString(value->getName()) + L" (" + toWString(mType) + L")")));
+			mDropButton->setContent(GUIContent(HString(value->getName() + " (" + mType + ")")));
 		}
 		else
 		{
@@ -192,7 +192,7 @@ namespace bs
 				return;
 
 			mInstanceId = 0;
-			mDropButton->setContent(GUIContent(HString(L"None (" + toWString(mType) + L")")));
+			mDropButton->setContent(GUIContent(HString("None (" + mType + ")")));
 		}
 
 		if (triggerEvent)

+ 5 - 5
Source/Scripting/SBansheeEditor/BsGUIResourceField.cpp

@@ -42,7 +42,7 @@ namespace bs
 
 		mDropButton = GUIDropButton::create((UINT32)DragAndDropType::Resources, GUIOptions(GUIOption::flexibleWidth()), 
 			getSubStyleName(BuiltinEditorResources::ObjectFieldDropBtnStyleName));
-		mClearButton = GUIButton::create(HString(L""), getSubStyleName(BuiltinEditorResources::ObjectFieldClearBtnStyleName));
+		mClearButton = GUIButton::create(HString(""), getSubStyleName(BuiltinEditorResources::ObjectFieldClearBtnStyleName));
 		mClearButton->onClick.connect(std::bind(&GUIResourceField::onClearButtonClicked, this));
 
 		mLayout->addElement(mDropButton);
@@ -187,7 +187,7 @@ namespace bs
 
 				mUUID = value.getUUID();
 
-				WString title = value->getName() + L" (" + toWString(mType) + L")";
+				String title = value->getName() + " (" + mType + ")";
 				mDropButton->setContent(GUIContent(HEString(title)));
 			}
 		}
@@ -217,7 +217,7 @@ namespace bs
 
 				mUUID = value.getUUID();
 
-				WString title = value->getName() + L" (" + toWString(mType) + L")";
+				String title = value->getName() + " (" + mType + ")";
 				mDropButton->setContent(GUIContent(HEString(title)));
 			}
 		}
@@ -235,11 +235,11 @@ namespace bs
 		Path resPath = gProjectLibrary().uuidToPath(mUUID);
 		if (!resPath.isEmpty())
 		{
-			WString title = resPath.getWFilename(false) + L" (" + toWString(mType) + L")";
+			String title = resPath.getFilename(false) + " (" + mType + ")";
 			mDropButton->setContent(GUIContent(HEString(title)));
 		}
 		else
-			mDropButton->setContent(GUIContent(HEString(L"None (" + toWString(mType) + L")")));
+			mDropButton->setContent(GUIContent(HEString("None (" + mType + ")")));
 
 		if (triggerEvent)
 		{

+ 2 - 2
Source/Scripting/SBansheeEditor/BsGUITextureField.cpp

@@ -36,7 +36,7 @@ namespace bs
 		}
 
 		mDropButton = GUIDropButton::create((UINT32)DragAndDropType::Resources, getSubStyleName(BuiltinEditorResources::TextureFieldDropStyleName));
-		mClearButton = GUIButton::create(HString(L""), getSubStyleName(BuiltinEditorResources::TextureFieldClearBtnStyleName));
+		mClearButton = GUIButton::create(HString(""), getSubStyleName(BuiltinEditorResources::TextureFieldClearBtnStyleName));
 		mClearButton->onClick.connect(std::bind(&GUITextureField::onClearButtonClicked, this));
 
 		GUIPanel* dropTargetPanel = mLayout->addNewElement<GUIPanel>();
@@ -216,7 +216,7 @@ namespace bs
 		}
 		else
 		{
-			mDropButton->setContent(GUIContent(HString(L"(None)")));
+			mDropButton->setContent(GUIContent(HString("(None)")));
 			mClearButton->setVisible(false);
 		}
 

+ 1 - 1
Source/Scripting/SBansheeEditor/BsManagedEditorCommand.cpp

@@ -193,7 +193,7 @@ namespace bs
 	}
 
 	CmdManaged::CmdManaged(ScriptCmdManaged* scriptObj)
-		: EditorCommand(L""), mScriptObj(scriptObj), mRefCount(0)
+		: EditorCommand(""), mScriptObj(scriptObj), mRefCount(0)
 	{
 
 	}

+ 6 - 6
Source/Scripting/SBansheeEditor/BsMenuItemManager.cpp

@@ -98,7 +98,7 @@ namespace bs
 				const Vector<MonoMethod*>& methods = curClass->getAllMethods();
 				for (auto& curMethod : methods)
 				{
-					WString path;
+					String path;
 					ShortcutKey shortcutKey = ShortcutKey::NONE;
 					INT32 priority = 0;
 					bool separator = false;
@@ -108,11 +108,11 @@ namespace bs
 
 						if (separator)
 						{
-							Vector<WString> pathElements = StringUtil::split(path, L"/");
-							WString separatorPath;
+							Vector<String> pathElements = StringUtil::split(path, "/");
+							String separatorPath;
 							if (pathElements.size() > 1)
 							{
-								const WString& lastElem = pathElements[pathElements.size() - 1];
+								const String& lastElem = pathElements[pathElements.size() - 1];
 								separatorPath = path;
 								separatorPath.erase(path.size() - lastElem.size() - 1, lastElem.size() + 1);
 							}
@@ -129,7 +129,7 @@ namespace bs
 		}
 	}
 
-	bool MenuItemManager::parseMenuItemMethod(MonoMethod* method, WString& path, ShortcutKey& shortcut, INT32& priority, bool& separator) const
+	bool MenuItemManager::parseMenuItemMethod(MonoMethod* method, String& path, ShortcutKey& shortcut, INT32& priority, bool& separator) const
 	{
 		if (!method->hasAttribute(mMenuItemAttribute))
 			return false;
@@ -146,7 +146,7 @@ namespace bs
 		mPathField->get(menuItemAttrib, &monoPath);
 
 		mShortcutField->get(menuItemAttrib, &shortcut);
-		path = MonoUtil::monoToWString(monoPath);
+		path = MonoUtil::monoToString(monoPath);
 		mPriorityField->get(menuItemAttrib, &priority);
 		mSeparatorField->get(menuItemAttrib, &separator);
 

+ 1 - 1
Source/Scripting/SBansheeEditor/BsMenuItemManager.h

@@ -38,7 +38,7 @@ namespace bs
 		 * @return					True if the method has a MenuItem attribute. If false is returned output parameters
 		 *							from this method are undefined.
 		 */
-		bool parseMenuItemMethod(MonoMethod* method, WString& path, ShortcutKey& shortcut, INT32& priority, bool& separator) const;
+		bool parseMenuItemMethod(MonoMethod* method, String& path, ShortcutKey& shortcut, INT32& priority, bool& separator) const;
 
 		/**
 		 * Triggered when one of the managed menu items is clicked. 

+ 2 - 2
Source/Scripting/SBansheeEditor/BsToolbarItemManager.cpp

@@ -130,14 +130,14 @@ namespace bs
 			MonoString* monoTexturePath;
 			mIconField->get(toolbarItemAttrib, &monoTexturePath);
 
-			Path texturePath = MonoUtil::monoToWString(monoTexturePath);
+			Path texturePath = MonoUtil::monoToString(monoTexturePath);
 			icon = static_resource_cast<SpriteTexture>(gProjectLibrary().load(texturePath));
 		}
 
 		MonoString* tooltipMono;
 		mTooltipField->get(toolbarItemAttrib, &tooltipMono);
 
-		tooltip = HString(MonoUtil::monoToWString(tooltipMono));
+		tooltip = HString(MonoUtil::monoToString(tooltipMono));
 
 		mPriorityField->get(toolbarItemAttrib, &priority);
 		mSeparatorField->get(toolbarItemAttrib, &separator);

+ 6 - 6
Source/Scripting/SBansheeEditor/Wrappers/BsScriptBrowseDialog.cpp

@@ -23,7 +23,7 @@ namespace bs
 	bool ScriptBrowseDialog::internal_OpenFile(MonoString* defaultFolder, MonoString* filterList, bool allowMultiselect,
 											   MonoArray** outPaths)
 	{
-		Path defaultFolderNative = MonoUtil::monoToWString(defaultFolder);
+		Path defaultFolderNative = MonoUtil::monoToString(defaultFolder);
 		String filterListNative = MonoUtil::monoToString(filterList);
 		
 		FileDialogType type = (FileDialogType)((UINT32)FileDialogType::OpenFile | (UINT32)FileDialogType::Multiselect);
@@ -35,7 +35,7 @@ namespace bs
 
 			for (UINT32 i = 0; i < (UINT32)paths.size(); i++)
 			{
-				MonoString* monoString = MonoUtil::wstringToMono(paths[i].toWString());
+				MonoString* monoString = MonoUtil::stringToMono(paths[i].toString());
 				pathArray.set(i, monoString);
 			}
 
@@ -51,7 +51,7 @@ namespace bs
 
 	bool ScriptBrowseDialog::internal_OpenFolder(MonoString* defaultFolder, MonoString** outPath)
 	{
-		Path defaultFolderNative = MonoUtil::monoToWString(defaultFolder);
+		Path defaultFolderNative = MonoUtil::monoToString(defaultFolder);
 
 		FileDialogType type = FileDialogType::OpenFolder;
 
@@ -60,7 +60,7 @@ namespace bs
 		{
 			if (paths.size() > 0)
 			{
-				MonoString* path = MonoUtil::wstringToMono(paths[0].toWString());
+				MonoString* path = MonoUtil::stringToMono(paths[0].toString());
 				MonoUtil::referenceCopy(outPath, (MonoObject*)path);
 			}
 			else
@@ -77,7 +77,7 @@ namespace bs
 
 	bool ScriptBrowseDialog::internal_SaveFile(MonoString* defaultFolder, MonoString* filterList, MonoString** outPath)
 	{
-		Path defaultFolderNative = MonoUtil::monoToWString(defaultFolder);
+		Path defaultFolderNative = MonoUtil::monoToString(defaultFolder);
 		String filterListNative = MonoUtil::monoToString(filterList);
 
 		FileDialogType type = FileDialogType::Save;
@@ -87,7 +87,7 @@ namespace bs
 		{
 			if (paths.size() > 0)
 			{
-				MonoString* path = MonoUtil::wstringToMono(paths[0].toWString());
+				MonoString* path = MonoUtil::stringToMono(paths[0].toString());
 				MonoUtil::referenceCopy(outPath, (MonoObject*)path);
 			}
 			else

+ 12 - 12
Source/Scripting/SBansheeEditor/Wrappers/BsScriptBuildManager.cpp

@@ -79,24 +79,24 @@ namespace bs
 
 	MonoArray* ScriptBuildManager::internal_GetFrameworkAssemblies(PlatformType type)
 	{
-		Vector<WString> frameworkAssemblies = BuildManager::instance().getFrameworkAssemblies(type);
+		Vector<String> frameworkAssemblies = BuildManager::instance().getFrameworkAssemblies(type);
 
-		ScriptArray outArray = ScriptArray::create<WString>((UINT32)frameworkAssemblies.size());
+		ScriptArray outArray = ScriptArray::create<String>((UINT32)frameworkAssemblies.size());
 		UINT32 idx = 0;
 		for (auto& assemblyName : frameworkAssemblies)
-			outArray.set(idx++, MonoUtil::wstringToMono(assemblyName));
+			outArray.set(idx++, MonoUtil::stringToMono(assemblyName));
 
 		return outArray.getInternal();
 	}
 
 	MonoString* ScriptBuildManager::internal_GetMainExecutable(PlatformType type)
 	{
-		return MonoUtil::wstringToMono(BuildManager::instance().getMainExecutable(type).toWString());
+		return MonoUtil::stringToMono(BuildManager::instance().getMainExecutable(type).toString());
 	}
 
 	MonoString* ScriptBuildManager::internal_GetDefines(PlatformType type)
 	{
-		return MonoUtil::wstringToMono(BuildManager::instance().getDefines(type));
+		return MonoUtil::stringToMono(BuildManager::instance().getDefines(type));
 	}
 
 	MonoArray* ScriptBuildManager::internal_GetNativeBinaries(PlatformType type)
@@ -104,10 +104,10 @@ namespace bs
 		Vector<Path> paths = BuildManager::instance().getNativeBinaries(type);
 
 		UINT32 numEntries = (UINT32)paths.size();
-		ScriptArray outArray = ScriptArray::create<WString>(numEntries);
+		ScriptArray outArray = ScriptArray::create<String>(numEntries);
 		for (UINT32 i = 0; i < numEntries; i++)
 		{
-			outArray.set(i, MonoUtil::wstringToMono(paths[i].toWString()));
+			outArray.set(i, MonoUtil::stringToMono(paths[i].toString()));
 		}
 
 		return outArray.getInternal();
@@ -161,7 +161,7 @@ namespace bs
 			path = BuildManager::instance().getBuildFolder(nativeFolderType, platform);
 		}
 
-		return MonoUtil::wstringToMono(path.toWString());
+		return MonoUtil::stringToMono(path.toString());
 	}
 
 	void ScriptBuildManager::internal_InjectIcons(MonoString* filePath, ScriptPlatformInfo* info)
@@ -169,7 +169,7 @@ namespace bs
 		if (info == nullptr)
 			return;
 
-		Path executablePath = MonoUtil::monoToWString(filePath);
+		Path executablePath = MonoUtil::monoToString(filePath);
 
 		Map<UINT32, SPtr<PixelData>> icons;
 		SPtr<PlatformInfo> platformInfo = info->getPlatformInfo();
@@ -293,7 +293,7 @@ namespace bs
 		} 
 
 		// Copy resources
-		Path buildPath = MonoUtil::monoToWString(buildFolder);
+		Path buildPath = MonoUtil::monoToString(buildFolder);
 
 		Path outputPath = buildPath;
 		outputPath.append(GAME_RESOURCES_FOLDER_NAME);
@@ -375,7 +375,7 @@ namespace bs
 		Path destRoot = BuildManager::instance().getBuildFolder(BuildFolder::DestinationRoot, platformInfo->type);
 		Path destIconFile = destRoot;
 		destIconFile.append(iconFolder);
-		destIconFile.setFilename(BuiltinResources::IconTextureName + L".asset");
+		destIconFile.setFilename(BuiltinResources::IconTextureName + ".asset");
 
 		switch (platformInfo->type)
 		{
@@ -439,7 +439,7 @@ namespace bs
 			}
 		}
 
-		Path outputPath = MonoUtil::monoToWString(buildFolder);
+		Path outputPath = MonoUtil::monoToString(buildFolder);
 		outputPath.append(GAME_SETTINGS_NAME);
 
 		FileEncoder fe(outputPath);

+ 1 - 1
Source/Scripting/SBansheeEditor/Wrappers/BsScriptCodeEditor.cpp

@@ -53,7 +53,7 @@ namespace bs
 
 	void ScriptCodeEditor::internal_OpenFile(MonoString* path, UINT32 line)
 	{
-		Path filePath = MonoUtil::monoToWString(path);
+		Path filePath = MonoUtil::monoToString(path);
 
 		CodeEditorManager::instance().openFile(filePath, line);
 	}

+ 3 - 3
Source/Scripting/SBansheeEditor/Wrappers/BsScriptDragDropManager.cpp

@@ -161,7 +161,7 @@ namespace bs
 		UINT32 idx = 0;
 		for (auto& path : paths)
 		{
-			MonoString* managedPath = MonoUtil::wstringToMono(path.toWString());
+			MonoString* managedPath = MonoUtil::stringToMono(path.toString());
 
 			arrStrings.set(idx, managedPath);
 			idx++;
@@ -181,7 +181,7 @@ namespace bs
 		for (UINT32 i = 0; i < pathsArray.size(); i++)
 		{
 			MonoString* monoPath = pathsArray.get<MonoString*>(i);
-			paths[i] = MonoUtil::monoToWString(monoPath);
+			paths[i] = MonoUtil::monoToString(monoPath);
 		}
 
 		new (bs_alloc<ScriptResourceDragDropData>()) ScriptResourceDragDropData(managedInstance, paths);
@@ -194,7 +194,7 @@ namespace bs
 		UINT32 idx = 0;
 		for (auto& path : instance->mPaths)
 		{
-			MonoString* managedPath = MonoUtil::wstringToMono(path.toWString());
+			MonoString* managedPath = MonoUtil::stringToMono(path.toString());
 
 			arrStrings.set(idx, managedPath);
 			idx++;

Some files were not shown because too many files changed in this diff