Просмотр исходного кода

Refactor: Added a lookup table for script reflectable types and refactored how are native wrapper <-> managed mappings registered with the system

BearishSun 6 лет назад
Родитель
Сommit
0d97f9df93

+ 18 - 9
Source/EditorScript/BsEditorScriptLibrary.cpp

@@ -10,6 +10,8 @@
 #include "BsMonoAssembly.h"
 #include "Scene/BsGameObjectManager.h"
 
+#include "Generated/BsEditorBuiltinReflectableTypesLookup.generated.h"
+
 namespace bs
 {
 	EditorScriptLibrary::EditorScriptLibrary()
@@ -20,6 +22,11 @@ namespace bs
 	{
 		EngineScriptLibrary::initialize();
 
+		mEditorTypeMappings.reflectableObjects = EditorBuiltinReflectableTypes::getEntries();
+
+		MonoManager::instance().loadAssembly(getEditorAssemblyPath(), EDITOR_ASSEMBLY);
+		ScriptAssemblyManager::instance().loadAssemblyInfo(EDITOR_ASSEMBLY, mEditorTypeMappings);
+
 		EditorScriptManager::startUp();
 		
 		mQuitRequestedEvent = gEditorApplication().onQuitRequested.connect([]()
@@ -48,42 +55,44 @@ namespace bs
 		// Do a full refresh if we have already loaded script assemblies
 		if (mScriptAssembliesLoaded)
 		{
-			Vector<std::pair<String, Path>> assemblies;
+			Vector<AssemblyRefreshInfo> assemblies;
 
-			assemblies.push_back({ ENGINE_ASSEMBLY, engineAssemblyPath });
+			assemblies.push_back(AssemblyRefreshInfo(ENGINE_ASSEMBLY, &engineAssemblyPath, &mEngineTypeMappings));
 			if (gEditorApplication().isProjectLoaded())
 			{
 				if (FileSystem::exists(gameAssemblyPath))
-					assemblies.push_back({ SCRIPT_GAME_ASSEMBLY, gameAssemblyPath });
+					assemblies.push_back(AssemblyRefreshInfo(SCRIPT_GAME_ASSEMBLY, &gameAssemblyPath, &BuiltinTypeMappings::EMPTY));
 			}
 
-			assemblies.push_back({ EDITOR_ASSEMBLY, editorAssemblyPath });
+			assemblies.push_back(AssemblyRefreshInfo(EDITOR_ASSEMBLY, &editorAssemblyPath, &mEditorTypeMappings));
 			if (gEditorApplication().isProjectLoaded())
 			{
 				if (FileSystem::exists(editorScriptAssemblyPath))
-					assemblies.push_back({ SCRIPT_EDITOR_ASSEMBLY, editorScriptAssemblyPath });
+					assemblies.push_back(AssemblyRefreshInfo(SCRIPT_EDITOR_ASSEMBLY, &editorScriptAssemblyPath, &BuiltinTypeMappings::EMPTY));
 			}
 
 			ScriptObjectManager::instance().refreshAssemblies(assemblies);
 		}
 		else // Otherwise just additively load them
 		{
+			ScriptAssemblyManager::instance().clearAssemblyInfo();
+
 			MonoManager::instance().loadAssembly(engineAssemblyPath.toString(), ENGINE_ASSEMBLY);
-			ScriptAssemblyManager::instance().loadAssemblyInfo(ENGINE_ASSEMBLY);
+			ScriptAssemblyManager::instance().loadAssemblyInfo(ENGINE_ASSEMBLY, mEngineTypeMappings);
 
 			if (FileSystem::exists(gameAssemblyPath))
 			{
 				MonoManager::instance().loadAssembly(gameAssemblyPath.toString(), SCRIPT_GAME_ASSEMBLY);
-				ScriptAssemblyManager::instance().loadAssemblyInfo(SCRIPT_GAME_ASSEMBLY);
+				ScriptAssemblyManager::instance().loadAssemblyInfo(SCRIPT_GAME_ASSEMBLY, BuiltinTypeMappings());
 			}
 
 			MonoManager::instance().loadAssembly(editorAssemblyPath.toString(), EDITOR_ASSEMBLY);
-			ScriptAssemblyManager::instance().loadAssemblyInfo(EDITOR_ASSEMBLY);
+			ScriptAssemblyManager::instance().loadAssemblyInfo(EDITOR_ASSEMBLY, mEditorTypeMappings);
 
 			if (FileSystem::exists(editorScriptAssemblyPath))
 			{
 				MonoManager::instance().loadAssembly(editorScriptAssemblyPath.toString(), SCRIPT_EDITOR_ASSEMBLY);
-				ScriptAssemblyManager::instance().loadAssemblyInfo(SCRIPT_EDITOR_ASSEMBLY);
+				ScriptAssemblyManager::instance().loadAssemblyInfo(SCRIPT_EDITOR_ASSEMBLY, BuiltinTypeMappings());
 			}
 
 			mScriptAssembliesLoaded = true;

+ 2 - 0
Source/EditorScript/BsEditorScriptLibrary.h

@@ -47,6 +47,8 @@ namespace bs
 		}
 
 	private:
+		BuiltinTypeMappings mEditorTypeMappings;
+
 		bool mScriptAssembliesLoaded;
 		HEvent mQuitRequestedEvent;
 	};

+ 0 - 1
Source/EditorScript/BsEditorScriptManager.cpp

@@ -39,7 +39,6 @@ namespace bs
 		GameResourceManager::instance().setLoader(resourceLoader);
 
 		loadMonoTypes();
-		ScriptAssemblyManager::instance().loadAssemblyInfo(EDITOR_ASSEMBLY);
 
 		ScriptUndoRedo::startUp();
 		ScriptEditorInput::startUp();

+ 42 - 0
Source/EditorScript/Generated/BsEditorBuiltinReflectableTypesLookup.generated.h

@@ -0,0 +1,42 @@
+//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
+//************** Copyright (c) 2016-2019 Marko Pintera ([email protected]). All rights reserved. *******************//
+#pragma once
+
+#include "Serialization/BsBuiltinReflectableTypesLookup.h"
+#include "Reflection/BsRTTIType.h"
+#include "../../bsf/Source/Foundation/bsfCore/Audio/BsAudioClipImportOptions.h"
+#include "BsScriptAudioClipImportOptions.editor.generated.h"
+#include "../../bsf/Source/Foundation/bsfCore/Importer/BsMeshImportOptions.h"
+#include "BsScriptImportedAnimationEvents.editor.generated.h"
+#include "../../bsf/Source/Foundation/bsfCore/Importer/BsImportOptions.h"
+#include "BsScriptImportOptions.editor.generated.h"
+#include "../../bsf/Source/Foundation/bsfCore/Importer/BsTextureImportOptions.h"
+#include "BsScriptTextureImportOptions.editor.generated.h"
+#include "../../bsf/Source/Foundation/bsfCore/Importer/BsMeshImportOptions.h"
+#include "BsScriptAnimationSplitInfo.editor.generated.h"
+#include "../../bsf/Source/Foundation/bsfCore/Importer/BsMeshImportOptions.h"
+#include "BsScriptMeshImportOptions.editor.generated.h"
+#include "../../bsf/Source/Foundation/bsfCore/Importer/BsShaderImportOptions.h"
+#include "BsScriptShaderImportOptions.editor.generated.h"
+#include "../../bsf/Source/Foundation/bsfCore/Text/BsFontImportOptions.h"
+#include "BsScriptFontImportOptions.editor.generated.h"
+#include "../../bsf/Source/Foundation/bsfEngine/Resources/BsScriptCodeImportOptions.h"
+#include "BsScriptScriptCodeImportOptions.editor.generated.h"
+
+namespace bs
+{
+	LOOKUP_BEGIN(EditorBuiltinReflectableTypes)
+		ADD_ENTRY(AudioClipImportOptions, ScriptAudioClipImportOptions)
+		ADD_ENTRY(ImportedAnimationEvents, ScriptImportedAnimationEvents)
+		ADD_ENTRY(ImportOptions, ScriptImportOptions)
+		ADD_ENTRY(TextureImportOptions, ScriptTextureImportOptions)
+		ADD_ENTRY(AnimationSplitInfo, ScriptAnimationSplitInfo)
+		ADD_ENTRY(MeshImportOptions, ScriptMeshImportOptions)
+		ADD_ENTRY(ShaderImportOptions, ScriptShaderImportOptions)
+		ADD_ENTRY(FontImportOptions, ScriptFontImportOptions)
+		ADD_ENTRY(ScriptCodeImportOptions, ScriptScriptCodeImportOptions)
+	LOOKUP_END
+}
+#undef LOOKUP_BEGIN
+#undef ADD_ENTRY
+#undef LOOKUP_END

+ 1 - 1
Source/bsf

@@ -1 +1 @@
-Subproject commit a3b948998a730485418a0d5aebd15d0df098218d
+Subproject commit 6c289b3f6a27b59b41d987b32e9cd04eb3fdafb0