Browse Source

Various Script related work

Marko Pintera 12 years ago
parent
commit
00b903fcaf

+ 4 - 0
BansheeEngine/BansheeEngine.vcxproj

@@ -227,6 +227,8 @@
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>
   <ItemGroup>
     <ClInclude Include="Include\BsApplication.h" />
     <ClInclude Include="Include\BsApplication.h" />
+    <ClInclude Include="Include\BsScriptComponent.h" />
+    <ClInclude Include="Include\BsScriptGUIWidget.h" />
     <ClInclude Include="Include\BsDrawHelper3D.h" />
     <ClInclude Include="Include\BsDrawHelper3D.h" />
     <ClInclude Include="Include\BsDrawHelperTemplate.h" />
     <ClInclude Include="Include\BsDrawHelperTemplate.h" />
     <ClInclude Include="Include\BsDragAndDropManager.h" />
     <ClInclude Include="Include\BsDragAndDropManager.h" />
@@ -351,7 +353,9 @@
     <ClCompile Include="Source\BsGUIScrollArea.cpp" />
     <ClCompile Include="Source\BsGUIScrollArea.cpp" />
     <ClCompile Include="Source\BsScriptAssembly.cpp" />
     <ClCompile Include="Source\BsScriptAssembly.cpp" />
     <ClCompile Include="Source\BsScriptClass.cpp" />
     <ClCompile Include="Source\BsScriptClass.cpp" />
+    <ClCompile Include="Source\BsScriptComponent.cpp" />
     <ClCompile Include="Source\BsScriptField.cpp" />
     <ClCompile Include="Source\BsScriptField.cpp" />
+    <ClCompile Include="Source\BsScriptGUIWidget.cpp" />
     <ClCompile Include="Source\BsScriptManager.cpp" />
     <ClCompile Include="Source\BsScriptManager.cpp" />
     <ClCompile Include="Source\BsScriptMethod.cpp" />
     <ClCompile Include="Source\BsScriptMethod.cpp" />
     <ClCompile Include="Source\BsScriptMeta.cpp" />
     <ClCompile Include="Source\BsScriptMeta.cpp" />

+ 12 - 0
BansheeEngine/BansheeEngine.vcxproj.filters

@@ -270,6 +270,12 @@
     <ClInclude Include="Include\BsScriptTexture2D.h">
     <ClInclude Include="Include\BsScriptTexture2D.h">
       <Filter>Header Files\Script</Filter>
       <Filter>Header Files\Script</Filter>
     </ClInclude>
     </ClInclude>
+    <ClInclude Include="Include\BsScriptGUIWidget.h">
+      <Filter>Header Files\Script</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsScriptComponent.h">
+      <Filter>Header Files\Script</Filter>
+    </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="Source\BsGUIElement.cpp">
     <ClCompile Include="Source\BsGUIElement.cpp">
@@ -473,5 +479,11 @@
     <ClCompile Include="Source\BsEngineAssembly.cpp">
     <ClCompile Include="Source\BsEngineAssembly.cpp">
       <Filter>Source Files\Script</Filter>
       <Filter>Source Files\Script</Filter>
     </ClCompile>
     </ClCompile>
+    <ClCompile Include="Source\BsScriptGUIWidget.cpp">
+      <Filter>Source Files\Script</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsScriptComponent.cpp">
+      <Filter>Source Files\Script</Filter>
+    </ClCompile>
   </ItemGroup>
   </ItemGroup>
 </Project>
 </Project>

+ 2 - 0
BansheeEngine/Include/BsApplication.h

@@ -27,6 +27,8 @@ namespace BansheeEngine
 			 * @brief	Frees up all resources allocated during startUp, and while the application was running.
 			 * @brief	Frees up all resources allocated during startUp, and while the application was running.
 			 */
 			 */
 			void shutDown();
 			void shutDown();
+
+			const CM::ViewportPtr& getPrimaryViewport() const;
 	private:
 	private:
 		boost::signals::connection updateCallbackConn;
 		boost::signals::connection updateCallbackConn;
 
 

+ 2 - 0
BansheeEngine/Include/BsScriptClass.h

@@ -33,6 +33,8 @@ namespace BansheeEngine
 		
 		
 		MonoObject* invokeMethod(const CM::String& name, MonoObject* instance = nullptr, void** params = nullptr, CM::UINT32 numParams = 0);
 		MonoObject* invokeMethod(const CM::String& name, MonoObject* instance = nullptr, void** params = nullptr, CM::UINT32 numParams = 0);
 		void addInternalCall(const CM::String& name, const void* method);
 		void addInternalCall(const CM::String& name, const void* method);
+
+		MonoObject* createInstance() const;
 	private:
 	private:
 		friend class ScriptAssembly;
 		friend class ScriptAssembly;
 
 

+ 24 - 0
BansheeEngine/Include/BsScriptComponent.h

@@ -0,0 +1,24 @@
+#pragma once
+
+#include "BsPrerequisites.h"
+#include "CmComponent.h"
+#include "BsScriptManager.h"
+
+namespace BansheeEngine
+{
+	class BS_EXPORT ScriptComponent : CM::Component
+	{
+	public:
+		virtual ~ScriptComponent() {}
+
+	protected:
+		friend class CM::SceneObject;
+
+		ScriptComponent(const CM::HSceneObject& parent, MonoObject* managedInstance);
+
+		virtual void update();
+
+		MonoObject* mManagedInstance;
+		std::function<void()> mUpdateThunk;
+	};
+}

+ 25 - 0
BansheeEngine/Include/BsScriptGUIWidget.h

@@ -0,0 +1,25 @@
+#pragma once
+
+#include "BsPrerequisites.h"
+#include "BsScriptObject.h"
+#include "BsGUIWidget.h"
+
+namespace BansheeEngine
+{
+	class BS_EXPORT ScriptGUIWidget : public ScriptObject<ScriptGUIWidget>
+	{
+	public:
+		static void initMetaData();
+
+		static ScriptGUIWidget* create(const CM::HSceneObject& sceneObject);
+	private:
+		static void internal_createInstance(MonoObject* instance, CM::SceneObject* sceneObject);
+		static void internal_destroyInstance(ScriptGUIWidget* nativeInstance);
+
+		static void initRuntimeData();
+
+		ScriptGUIWidget(const HGUIWidget& widget);
+
+		HGUIWidget mWidget;
+	};
+}

+ 5 - 1
BansheeEngine/Include/BsScriptManager.h

@@ -27,7 +27,11 @@ namespace BansheeEngine
 		static const CM::String MONO_LIB_DIR;
 		static const CM::String MONO_LIB_DIR;
 		static const CM::String MONO_ETC_DIR;
 		static const CM::String MONO_ETC_DIR;
 
 
-		static CM::UnorderedMap<CM::String, CM::Vector<ScriptMeta*>::type>::type mTypesToInitialize;
+		static CM::UnorderedMap<CM::String, CM::Vector<ScriptMeta*>::type>::type& getTypesToInitialize()
+		{
+			static CM::UnorderedMap<CM::String, CM::Vector<ScriptMeta*>::type>::type mTypesToInitialize;
+			return mTypesToInitialize;
+		}
 
 
 		MonoDomain* mDomain;
 		MonoDomain* mDomain;
 		CM::UnorderedMap<CM::String, ScriptAssembly*>::type mAssemblies;
 		CM::UnorderedMap<CM::String, ScriptAssembly*>::type mAssemblies;

+ 1 - 1
BansheeEngine/Include/BsScriptObject.h

@@ -23,7 +23,7 @@ namespace BansheeEngine
 	 * @brief	 Base class for objects that can be extended using Mono scripting
 	 * @brief	 Base class for objects that can be extended using Mono scripting
 	 */
 	 */
 	template <class Type>
 	template <class Type>
-	class BS_EXPORT ScriptObject
+	class ScriptObject
 	{
 	{
 	public:
 	public:
 		ScriptObject()
 		ScriptObject()

+ 6 - 0
BansheeEngine/Source/BsApplication.cpp

@@ -85,6 +85,12 @@ namespace BansheeEngine
 		PROFILE_CALL(GUIManager::instance().update(), "GUI");
 		PROFILE_CALL(GUIManager::instance().update(), "GUI");
 	}
 	}
 
 
+	const CM::ViewportPtr& Application::getPrimaryViewport() const
+	{
+		// TODO - Need a way to determine primary viewport!
+		return nullptr;
+	}
+
 	Application& gBansheeApp()
 	Application& gBansheeApp()
 	{
 	{
 		static Application application;
 		static Application application;

+ 8 - 0
BansheeEngine/Source/BsScriptClass.cpp

@@ -1,6 +1,7 @@
 #include "BsScriptClass.h"
 #include "BsScriptClass.h"
 #include "BsScriptMethod.h"
 #include "BsScriptMethod.h"
 #include "BsScriptField.h"
 #include "BsScriptField.h"
+#include "BsScriptManager.h"
 #include "CmUtil.h"
 #include "CmUtil.h"
 #include "CmException.h"
 #include "CmException.h"
 
 
@@ -99,4 +100,11 @@ namespace BansheeEngine
 		String fullMethodName = mFullName + "::" + name;
 		String fullMethodName = mFullName + "::" + name;
 		mono_add_internal_call(fullMethodName.c_str(), method);
 		mono_add_internal_call(fullMethodName.c_str(), method);
 	}
 	}
+
+	MonoObject* ScriptClass::createInstance() const
+	{
+		MonoObject* obj = mono_object_new(ScriptManager::instance().getDomain(), mClass);
+
+		return obj;
+	}
 }
 }

+ 26 - 0
BansheeEngine/Source/BsScriptComponent.cpp

@@ -0,0 +1,26 @@
+#include "BsScriptComponent.h"
+#include "CmException.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	ScriptComponent::ScriptComponent(const CM::HSceneObject& parent, MonoObject* managedInstance)
+		:Component(parent), mManagedInstance(managedInstance), mUpdateThunk(nullptr)
+	{
+		MonoClass* monoClass = mono_object_get_class(mManagedInstance);
+
+		if(monoClass == nullptr)
+			CM_EXCEPT(InternalErrorException, "Cannot retrieve class from MonoObject.");
+
+		MonoMethod* updateMethod = mono_class_get_method_from_name(monoClass, "Update", 0);
+		if(updateMethod != nullptr)
+			mUpdateThunk = (void(*)())mono_method_get_unmanaged_thunk(updateMethod);
+	}
+
+	void ScriptComponent::update()
+	{
+		if(mUpdateThunk != nullptr)
+			mUpdateThunk();
+	}
+}

+ 50 - 0
BansheeEngine/Source/BsScriptGUIWidget.cpp

@@ -0,0 +1,50 @@
+#include "BsScriptGUIWidget.h"
+#include "BsScriptMeta.h"
+#include "BsScriptField.h"
+#include "BsScriptClass.h"
+#include "BsScriptManager.h"
+#include "CmSceneObject.h"
+#include "BsGUIWidget.h"
+#include "BsApplication.h"
+#include "BsScriptComponent.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	ScriptGUIWidget::ScriptGUIWidget(const HGUIWidget& widget)
+		:mWidget(widget)
+	{
+
+	}
+
+	void ScriptGUIWidget::initMetaData()
+	{
+		metaData = ScriptMeta("MBansheeEngine", "BansheeEngine", "GUIWidget", &ScriptGUIWidget::initRuntimeData);
+
+		ScriptManager::registerScriptType(&metaData);
+	}
+
+	void ScriptGUIWidget::initRuntimeData()
+	{
+		metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptGUIWidget::internal_createInstance);
+		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUIWidget::internal_destroyInstance);
+	}
+
+	void ScriptGUIWidget::internal_createInstance(MonoObject* instance, SceneObject* sceneObject)
+	{
+		HGUIWidget widget = sceneObject->addComponent<GUIWidget>(gBansheeApp().getPrimaryViewport().get());
+		sceneObject->addComponent<ScriptComponent>(instance);
+
+		ScriptGUIWidget* nativeInstance = new (cm_alloc<ScriptGUIWidget>()) ScriptGUIWidget(widget);
+		nativeInstance->createInstance();
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptGUIWidget::internal_destroyInstance(ScriptGUIWidget* nativeInstance)
+	{
+		nativeInstance->destroyInstance();
+		cm_delete(nativeInstance);
+	}
+}

+ 2 - 4
BansheeEngine/Source/BsScriptManager.cpp

@@ -15,8 +15,6 @@ namespace BansheeEngine
 	const String ScriptManager::MONO_LIB_DIR = "..\\..\\Mono\\lib";
 	const String ScriptManager::MONO_LIB_DIR = "..\\..\\Mono\\lib";
 	const String ScriptManager::MONO_ETC_DIR = "..\\..\\Mono\\etc";
 	const String ScriptManager::MONO_ETC_DIR = "..\\..\\Mono\\etc";
 
 
-	UnorderedMap<String, Vector<ScriptMeta*>::type>::type ScriptManager::mTypesToInitialize;
-
 	ScriptManager::ScriptManager()
 	ScriptManager::ScriptManager()
 	{
 	{
 		mono_set_dirs(MONO_LIB_DIR.c_str(), MONO_ETC_DIR.c_str()); 
 		mono_set_dirs(MONO_LIB_DIR.c_str(), MONO_ETC_DIR.c_str()); 
@@ -73,7 +71,7 @@ namespace BansheeEngine
 		mAssemblies[name] = assembly;
 		mAssemblies[name] = assembly;
 
 
 		// Fully initialize all types that use this assembly
 		// Fully initialize all types that use this assembly
-		Vector<ScriptMeta*>::type& mTypeMetas = mTypesToInitialize[name];
+		Vector<ScriptMeta*>::type& mTypeMetas = getTypesToInitialize()[name];
 		for(auto& meta : mTypeMetas)
 		for(auto& meta : mTypeMetas)
 		{
 		{
 			meta->scriptClass = &assembly->getClass(meta->ns, meta->name);
 			meta->scriptClass = &assembly->getClass(meta->ns, meta->name);
@@ -95,7 +93,7 @@ namespace BansheeEngine
 
 
 	void ScriptManager::registerScriptType(ScriptMeta* metaData)
 	void ScriptManager::registerScriptType(ScriptMeta* metaData)
 	{
 	{
-		Vector<ScriptMeta*>::type& mMetas = mTypesToInitialize[metaData->assembly];
+		Vector<ScriptMeta*>::type& mMetas = getTypesToInitialize()[metaData->assembly];
 		mMetas.push_back(metaData);
 		mMetas.push_back(metaData);
 	}
 	}
 }
 }

+ 32 - 8
CSharpWrap.txt

@@ -104,18 +104,42 @@ For EditorWindow, add a new class in BansheeEditor, which pretty much does the j
   
   
   ----------------
   ----------------
 
 
-  -----------------
+Eventually make all math classes templates that work on both doubles and floats. (Very low priority)
 
 
-  Math updates
+----------------------------
 
 
-Rename:
-Int2 -> Vector2I
-FRect -> Rect
-Rect -> RectI
+EditorGUI - NOT a component
+ - Internally just a GUIWidget
+ - has AddArea method
+ - has main field that points to main Layout
+ - shares interface with "GUI", which is used for main game window
+ - has a reference to GUISkin. Default is GUISkin.main
 
 
-Add OOBB and intersection methods.
+GUIArea
+ - has layout field
+ - has AddLayoutX, AddLayoutY
 
 
-Eventually make all math classes templates that work on both doubles and floats. (Very low priority)
+GUILayout
+ - has AddButton, AddLabel, AddLayoutX, AddLayoutY
+
+GUIButton, GUILabel
+ - Require GUILayoutOptions, GUIElementStyle upon construction
+ - Have Destroy() methods
+
+GUIElementStyle
+ - Requires font
+ - Requires SpriteTexture
+ - Create DUMMY font and texture classes for now
+
+GUISkin 
+ - Has pointers to GUIElementStyles for button, label, etc. plus support for custom styles using GetStyle(name), SetStyle(name)
+
+When loading resources I need to be able to load both project resources and engine ones. 
+ - BuiltinResources can be used for accessing default resources like GUI skin textures and similar
+ - They're all loaded from a special folder that is set in EditorApplication
+
+
+ BsApplication::getPrimaryViewport is not implemented
 
 
 ----------------------------
 ----------------------------
 
 

+ 2 - 0
CamelotClient/CamelotClient.vcxproj

@@ -270,6 +270,7 @@
     <ClInclude Include="Include\BsGUIWindowFrameWidget.h" />
     <ClInclude Include="Include\BsGUIWindowFrameWidget.h" />
     <ClInclude Include="Include\BsGUIWindowDropArea.h" />
     <ClInclude Include="Include\BsGUIWindowDropArea.h" />
     <ClInclude Include="Include\BsMainEditorWindow.h" />
     <ClInclude Include="Include\BsMainEditorWindow.h" />
+    <ClInclude Include="Include\BsScriptModalWindow.h" />
     <ClInclude Include="Include\CmDebugCamera.h" />
     <ClInclude Include="Include\CmDebugCamera.h" />
     <ClInclude Include="Include\CmTestTextSprite.h" />
     <ClInclude Include="Include\CmTestTextSprite.h" />
     <ClInclude Include="Include\DbgEditorWidget1.h" />
     <ClInclude Include="Include\DbgEditorWidget1.h" />
@@ -292,6 +293,7 @@
     <ClCompile Include="Source\BsGUIWindowFrameWidget.cpp" />
     <ClCompile Include="Source\BsGUIWindowFrameWidget.cpp" />
     <ClCompile Include="Source\BsGUIWindowDropArea.cpp" />
     <ClCompile Include="Source\BsGUIWindowDropArea.cpp" />
     <ClCompile Include="Source\BsMainEditorWindow.cpp" />
     <ClCompile Include="Source\BsMainEditorWindow.cpp" />
+    <ClCompile Include="Source\BsScriptModalWindow.cpp" />
     <ClCompile Include="Source\CmDebugCamera.cpp" />
     <ClCompile Include="Source\CmDebugCamera.cpp" />
     <ClCompile Include="Source\BsEditorApplication.cpp" />
     <ClCompile Include="Source\BsEditorApplication.cpp" />
     <ClCompile Include="Source\CmTestTextSprite.cpp" />
     <ClCompile Include="Source\CmTestTextSprite.cpp" />

+ 12 - 0
CamelotClient/CamelotClient.vcxproj.filters

@@ -19,6 +19,12 @@
     <Filter Include="Source Files\Editor">
     <Filter Include="Source Files\Editor">
       <UniqueIdentifier>{ccd6be96-5773-46cc-a751-18a7007716c3}</UniqueIdentifier>
       <UniqueIdentifier>{ccd6be96-5773-46cc-a751-18a7007716c3}</UniqueIdentifier>
     </Filter>
     </Filter>
+    <Filter Include="Header Files\Editor\Script">
+      <UniqueIdentifier>{ed35c594-9f99-46b1-aef3-a14f123a21e3}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\Editor\Script">
+      <UniqueIdentifier>{6bda4443-8e9f-44f1-8173-d12d0d6311ee}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <Text Include="ReadMe.txt" />
     <Text Include="ReadMe.txt" />
@@ -87,6 +93,9 @@
     <ClInclude Include="Include\BsEditorApplication.h">
     <ClInclude Include="Include\BsEditorApplication.h">
       <Filter>Header Files\Editor</Filter>
       <Filter>Header Files\Editor</Filter>
     </ClInclude>
     </ClInclude>
+    <ClInclude Include="Include\BsScriptModalWindow.h">
+      <Filter>Header Files\Editor\Script</Filter>
+    </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="stdafx.cpp">
     <ClCompile Include="stdafx.cpp">
@@ -149,5 +158,8 @@
     <ClCompile Include="Source\BsEditorApplication.cpp">
     <ClCompile Include="Source\BsEditorApplication.cpp">
       <Filter>Source Files\Editor</Filter>
       <Filter>Source Files\Editor</Filter>
     </ClCompile>
     </ClCompile>
+    <ClCompile Include="Source\BsScriptModalWindow.cpp">
+      <Filter>Source Files\Editor\Script</Filter>
+    </ClCompile>
   </ItemGroup>
   </ItemGroup>
 </Project>
 </Project>

+ 26 - 0
CamelotClient/Include/BsScriptModalWindow.h

@@ -0,0 +1,26 @@
+#pragma once
+
+#include "BsPrerequisites.h"
+#include "BsScriptObject.h"
+
+namespace BansheeEditor
+{
+	class ScriptModalWindow : public BansheeEngine::ScriptObject<ScriptModalWindow>
+	{
+	public:
+		static void initMetaData();
+
+	private:
+		ScriptModalWindow(CM::INT32 left, CM::INT32 top, CM::UINT32 width, CM::UINT32 height);
+
+		static void internal_createInstance(MonoObject* instance, CM::INT32 left, CM::INT32 top, CM::UINT32 width, CM::UINT32 height);
+		static void internal_destroyInstance(ScriptModalWindow* nativeInstance);
+
+		static void initRuntimeData();
+
+		CM::RenderWindowPtr mRenderWindow;
+		CM::HSceneObject mSceneObject;
+		BS::HGUIWidget mGUI;
+		BS::HCamera mCamera;
+	};
+}

+ 69 - 0
CamelotClient/Source/BsScriptModalWindow.cpp

@@ -0,0 +1,69 @@
+#include "BsScriptModalWindow.h"
+#include "BsScriptMeta.h"
+#include "BsScriptField.h"
+#include "BsScriptClass.h"
+#include "BsScriptManager.h"
+#include "CmSceneObject.h"
+#include "CmRenderWindow.h"
+#include "CmApplication.h"
+#include "BsCamera.h"
+#include "BsGUIWidget.h"
+
+using namespace CamelotFramework;
+using namespace BansheeEngine;
+
+namespace BansheeEditor
+{
+	ScriptModalWindow::ScriptModalWindow(INT32 left, INT32 top, UINT32 width, UINT32 height)
+	{
+		RENDER_WINDOW_DESC renderWindowDesc;
+		renderWindowDesc.width = width;
+		renderWindowDesc.height = height;
+		renderWindowDesc.left = left;
+		renderWindowDesc.top = top;
+		renderWindowDesc.title = "ModalWindow";
+		renderWindowDesc.fullscreen = false;
+		renderWindowDesc.border = WindowBorder::None;
+		renderWindowDesc.toolWindow = true;
+
+		mRenderWindow = RenderWindow::create(renderWindowDesc, gApplication().getPrimaryWindow());
+
+		mSceneObject = SceneObject::create("ModalWindow");
+
+		mCamera = mSceneObject->addComponent<Camera>();
+		mCamera->initialize(mRenderWindow, 0.0f, 0.0f, 1.0f, 1.0f);
+		mCamera->setNearClipDistance(5);
+		mCamera->setAspectRatio(1.0f);
+		mCamera->setIgnoreSceneRenderables(true);
+
+		mGUI = mSceneObject->addComponent<GUIWidget>(mCamera->getViewport().get());
+		mGUI->setDepth(128);
+	}
+
+	void ScriptModalWindow::initMetaData()
+	{
+		metaData = ScriptMeta("MBansheeEditor", "BansheeEditor", "ModalWindow", &ScriptModalWindow::initRuntimeData);
+
+		ScriptManager::registerScriptType(&metaData);
+	}
+
+	void ScriptModalWindow::initRuntimeData()
+	{
+		metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptModalWindow::internal_createInstance);
+		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptModalWindow::internal_destroyInstance);
+	}
+
+	void ScriptModalWindow::internal_createInstance(MonoObject* instance, INT32 left, INT32 top, UINT32 width, UINT32 height)
+	{
+		ScriptModalWindow* nativeInstance = new (cm_alloc<ScriptModalWindow>()) ScriptModalWindow(left, top, width, height);
+		nativeInstance->createInstance();
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptModalWindow::internal_destroyInstance(ScriptModalWindow* nativeInstance)
+	{
+		nativeInstance->destroyInstance();
+		cm_delete(nativeInstance);
+	}
+}

+ 8 - 1
MBansheeEditor/MBansheeEditor.csproj

@@ -7,7 +7,7 @@
     <ProjectGuid>{ABC62E37-342E-4345-A374-E37CA06C036E}</ProjectGuid>
     <ProjectGuid>{ABC62E37-342E-4345-A374-E37CA06C036E}</ProjectGuid>
     <OutputType>Library</OutputType>
     <OutputType>Library</OutputType>
     <AppDesignerFolder>Properties</AppDesignerFolder>
     <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>MBansheeEditor</RootNamespace>
+    <RootNamespace>BansheeEditor</RootNamespace>
     <AssemblyName>MBansheeEditor</AssemblyName>
     <AssemblyName>MBansheeEditor</AssemblyName>
     <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
     <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
     <FileAlignment>512</FileAlignment>
@@ -40,9 +40,16 @@
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <Compile Include="EditorApplication.cs" />
     <Compile Include="EditorApplication.cs" />
+    <Compile Include="ModalWindow.cs" />
     <Compile Include="Program.cs" />
     <Compile Include="Program.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\MBansheeEngine\MBansheeEngine.csproj">
+      <Project>{876eb338-489e-4727-84da-8cbbf0da5b5e}</Project>
+      <Name>MBansheeEngine</Name>
+    </ProjectReference>
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
        Other similar extension points exist, see Microsoft.Common.targets.

+ 32 - 0
MBansheeEditor/ModalWindow.cs

@@ -0,0 +1,32 @@
+using System;
+using System.Runtime.InteropServices;
+using BansheeEngine;
+
+namespace BansheeEditor
+{
+    public class ModalWindow : ScriptObject
+    {
+        //protected EditorGUIWidget GUI;
+
+        public ModalWindow(int top, int left, int width, int height)
+        {
+            Internal_CreateInstance(this, top, left, width, height);
+
+            //SceneObject modalWindowSO = new SceneObject("ModalWindow");
+            //modalWindowSO.hideFlags = HideFlags.HideInInspector | HideFlags.DontSave;
+
+            //modalWindowSO->addComponent<EditorGUIWidget>(this);
+        }
+
+        ~ModalWindow()
+        {
+            Internal_DestroyInstance(mCachedPtr);
+        }
+
+        [DllImport("__Internal")]
+        private static extern void Internal_CreateInstance(ModalWindow instance, int top, int left, int width, int height);
+
+        [DllImport("__Internal")]
+        private static extern void Internal_DestroyInstance(IntPtr nativeInstance);
+    }
+}

+ 1 - 1
MBansheeEditor/Program.cs

@@ -1,7 +1,7 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 
 
-namespace MBansheeEditor
+namespace BansheeEditor
 {
 {
     class Program
     class Program
     {
     {

+ 16 - 0
MBansheeEngine/BuiltinResources.cs

@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BansheeEngine
+{
+    class BuiltinResources
+    {
+        public Resource Load<T>(string path) where T : Resource, new()
+        {
+            // TODO -Dummy only
+            return new T();
+        }
+    }
+}

+ 6 - 0
MBansheeEngine/Font.cs

@@ -0,0 +1,6 @@
+namespace BansheeEngine
+{
+    public class Font : Resource // TODO - Dummy class
+    {
+    }
+}

+ 24 - 0
MBansheeEngine/GUIWidget.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Runtime.InteropServices;
+
+namespace BansheeEngine
+{
+    public sealed class GUIWidget : ScriptObject
+    {
+        public GUIWidget()
+        {
+            Internal_CreateInstance(this);
+        }
+
+        ~GUIWidget()
+        {
+            Internal_DestroyInstance(mCachedPtr);
+        }
+
+        [DllImport("__Internal")]
+        private static extern void Internal_CreateInstance(GUIWidget instance);
+
+        [DllImport("__Internal")]
+        private static extern void Internal_DestroyInstance(IntPtr nativeInstance);
+    }
+}

+ 5 - 0
MBansheeEngine/MBansheeEngine.csproj

@@ -40,14 +40,19 @@
     <Reference Include="System.Xml" />
     <Reference Include="System.Xml" />
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
+    <Compile Include="BuiltinResources.cs" />
     <Compile Include="Color.cs" />
     <Compile Include="Color.cs" />
+    <Compile Include="Font.cs" />
+    <Compile Include="GUIWidget.cs" />
     <Compile Include="MathEx.cs" />
     <Compile Include="MathEx.cs" />
     <Compile Include="Matrix3.cs" />
     <Compile Include="Matrix3.cs" />
     <Compile Include="Matrix4.cs" />
     <Compile Include="Matrix4.cs" />
     <Compile Include="Program.cs" />
     <Compile Include="Program.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Quaternion.cs" />
     <Compile Include="Quaternion.cs" />
+    <Compile Include="Resource.cs" />
     <Compile Include="ScriptObject.cs" />
     <Compile Include="ScriptObject.cs" />
+    <Compile Include="SpriteTexture.cs" />
     <Compile Include="Texture2D.cs" />
     <Compile Include="Texture2D.cs" />
     <Compile Include="TextureFormat.cs" />
     <Compile Include="TextureFormat.cs" />
     <Compile Include="Vector2.cs" />
     <Compile Include="Vector2.cs" />

+ 6 - 0
MBansheeEngine/Resource.cs

@@ -0,0 +1,6 @@
+namespace BansheeEngine
+{
+    public class Resource : ScriptObject // TODO - Dummy class
+    {
+    }
+}

+ 6 - 0
MBansheeEngine/SpriteTexture.cs

@@ -0,0 +1,6 @@
+namespace BansheeEngine
+{
+    public class SpriteTexture : Resource // TODO - Dummy class
+    {
+    }
+}

+ 1 - 5
MBansheeEngine/Texture2D.cs

@@ -1,13 +1,9 @@
 using System;
 using System;
-using System.Collections.Generic;
-using System.Linq;
 using System.Runtime.InteropServices;
 using System.Runtime.InteropServices;
-using System.Text;
-using System.Threading.Tasks;
 
 
 namespace BansheeEngine
 namespace BansheeEngine
 {
 {
-    public sealed class Texture2D : ScriptObject
+    public sealed class Texture2D : Resource
     {
     {
         public Texture2D(TextureFormat format, int width, int height, bool hasMipmaps = false, bool gammaCorrection = false)
         public Texture2D(TextureFormat format, int width, int height, bool hasMipmaps = false, bool gammaCorrection = false)
         {
         {

+ 0 - 6
TODO.txt

@@ -63,12 +63,6 @@ Other:
 
 
 -----------------------BACKLOG TODO---------------------------------------------------------------
 -----------------------BACKLOG TODO---------------------------------------------------------------
 
 
-Port Quaternions
- - Update native version with only needed methods and see if there are better ways of calculating some of that stuff
- - Read an article about Quaternions and possibly check out other libraries (GeometricTools?)
- - ALso analyze Vector3::getRotationTo
-   - Possibly move that method to Quaternion
-
 ----------------------------------------------------------------------------------------------
 ----------------------------------------------------------------------------------------------
 Medium priority:
 Medium priority:
  - Mesh loading:
  - Mesh loading: