Browse Source

Components foldout render (kinda)

Marko Pintera 11 years ago
parent
commit
0714a6ad8d

+ 0 - 3
MBansheeEditor/Inspector/GenericInspector.cs

@@ -30,9 +30,6 @@ namespace BansheeEditor
                 }
             }
 
-
-            // TODO - Add Component foldout
-
             isInitialized = true;
         }
 

+ 3 - 0
SBansheeEditor/Source/BsScriptEditorPlugin.cpp

@@ -2,6 +2,7 @@
 #include "BsScriptEditorWindow.h"
 #include "BsMonoManager.h"
 #include "BsMonoAssembly.h"
+#include "BsRuntimeScriptObjects.h"
 
 namespace BansheeEngine
 {
@@ -20,6 +21,8 @@ namespace BansheeEngine
 		MonoAssembly& assembly = MonoManager::instance().loadAssembly(ENGINE_ASSEMBLY_PATH, ENGINE_ASSEMBLY_NAME);
 		ScriptEditorWindow::registerManagedEditorWindows();
 
+		RuntimeScriptObjects::instance().refreshScriptObjects(BansheeEditorAssemblyName);
+
 		assembly.invoke(ASSEMBLY_ENTRY_POINT);
 
 		return nullptr;

+ 1 - 1
SBansheeEngine/Include/BsScriptGUIInputBox.h

@@ -9,7 +9,7 @@ namespace BansheeEngine
 	class BS_SCR_BE_EXPORT ScriptGUIInputBox : public TScriptGUIElement<ScriptGUIInputBox>
 	{
 	public:
-		SCRIPT_OBJ(BansheeEngineAssemblyName, "BansheeEngine", "GUIInputBox")
+		SCRIPT_OBJ(BansheeEngineAssemblyName, "BansheeEngine", "GUITextBox")
 
 	private:
 		static void internal_createInstance(MonoObject* instance, bool multiline, MonoString* style, MonoArray* guiOptions);

+ 22 - 8
SBansheeEngine/Include/BsScriptObject.h

@@ -3,6 +3,8 @@
 #include "BsScriptEnginePrerequisites.h"
 #include "BsScriptMeta.h"
 #include "CmException.h"
+#include "BsMonoManager.h"
+#include "BsMonoField.h"
 #include <mono/jit/jit.h>
 
 namespace BansheeEngine
@@ -25,19 +27,14 @@ namespace BansheeEngine
 		ScriptObjectBase(MonoObject* instance);
 		virtual ~ScriptObjectBase();
 
-		static const ScriptMeta* getMetaData() { return &metaData; }
-
 		MonoObject* getManagedInstance() const { return mManagedInstance; }
 		virtual void* getNativeRaw() const { return nullptr; }
 
 		virtual void _onManagedInstanceDeleted();
 
 	protected:
-		static ScriptMeta metaData;
+		
 		MonoObject* mManagedInstance;
-
-		static void registerTypeWithManager();
-		static void* getNativeInstance(MonoObject* managedInstance);
 	};
 
 	/**
@@ -54,6 +51,11 @@ namespace BansheeEngine
 			// so we fool it here like we're using the class directly. Otherwise compiler won't generate the code for the member
 			// and our type won't get initialized on start (Actual behavior is a bit more random)
 			initOnStart.makeSureIAmInstantiated();
+
+			Type* param = (Type*)(ScriptObjectBase*)this; // Needed due to multiple inheritance. Safe since Type must point to an class derived from this one.
+
+			if(metaData.thisPtrField != nullptr)
+				metaData.thisPtrField->setValue(instance, &param);
 		}
 
 		virtual ~ScriptObject() 
@@ -61,17 +63,26 @@ namespace BansheeEngine
 
 		static Type* toNative(MonoObject* managedInstance)
 		{
-			return reinterpret_cast<Type*>(getNativeInstance(managedInstance));
+			Type* nativeInstance = nullptr;
+
+			if(metaData.thisPtrField != nullptr)
+				metaData.thisPtrField->getValue(managedInstance, &nativeInstance);
+
+			return nativeInstance;
 		}
 
+		static const ScriptMeta* getMetaData() { return &metaData; }
+
 		static void _initMetaData()
 		{
 			metaData = ScriptMeta(Type::getAssemblyName(), Type::getNamespace(), Type::getTypeName(), &Type::initRuntimeData);
 
-			registerTypeWithManager();
+			MonoManager::registerScriptType(&metaData);
 		}
 
 	protected:
+		static ScriptMeta metaData;
+
 		template <class Type2>
 		static void throwIfInstancesDontMatch(ScriptObject<Type2>* lhs, void* rhs)
 		{
@@ -91,6 +102,9 @@ namespace BansheeEngine
 	template <typename Type>
 	InitScriptObjectOnStart<Type> ScriptObject<Type>::initOnStart;
 
+	template <typename Type>
+	ScriptMeta ScriptObject<Type>::metaData;
+
 #define SCRIPT_OBJ(assembly, namespace, name)		\
 	static String getAssemblyName() { return assembly; }	\
 	static String getNamespace() { return namespace; }		\

+ 2 - 0
SBansheeEngine/Source/BsScriptGUIArea.cpp

@@ -78,6 +78,8 @@ namespace BansheeEngine
 	{
 		RectI parentArea = mParentPanel->getClippedArea();
 		RectI myClippedArea = mArea;
+		myClippedArea.x += parentArea.x;
+		myClippedArea.y += parentArea.y;
 		myClippedArea.clip(parentArea);
 		
 		mGUIArea->setPosition(myClippedArea.x, myClippedArea.y);

+ 0 - 20
SBansheeEngine/Source/BsScriptObject.cpp

@@ -4,15 +4,10 @@
 
 namespace BansheeEngine
 {
-	ScriptMeta ScriptObjectBase::metaData;
-
 	ScriptObjectBase::ScriptObjectBase(MonoObject* instance)
 		:mManagedInstance(instance)
 	{	
-		ScriptObjectBase* param = this;
 
-		if(metaData.thisPtrField != nullptr)
-			metaData.thisPtrField->setValue(instance, &param);
 	}
 
 	ScriptObjectBase::~ScriptObjectBase() 
@@ -25,19 +20,4 @@ namespace BansheeEngine
 	{
 		cm_delete(this);
 	}
-
-	void ScriptObjectBase::registerTypeWithManager()
-	{
-		MonoManager::registerScriptType(&metaData);
-	}
-
-	void* ScriptObjectBase::getNativeInstance(MonoObject* managedInstance)
-	{
-		void* nativeInstance = nullptr;
-
-		if(metaData.thisPtrField != nullptr)
-			metaData.thisPtrField->getValue(managedInstance, &nativeInstance);
-
-		return nativeInstance;
-	}
 }