Marko Pintera пре 10 година
родитељ
комит
598f1785c6

+ 4 - 1
SBansheeEngine/Include/BsManagedComponent.h

@@ -10,7 +10,10 @@ namespace BansheeEngine
 
 	/**
 	 * @brief	Component that internally wraps a managed component object
-	 *			that can be of user-defined type.
+	 *			that can be of user-defined type. Acts as interop interop layer
+	 *			between native Component and a managed user defined component type
+	 *			since managed types cannot simply derive from Component
+	 *			to implement its functionality.
 	 */
 	class BS_SCR_BE_EXPORT ManagedComponent : public Component
 	{

+ 4 - 1
SBansheeEngine/Include/BsManagedResourceMetaData.h

@@ -5,6 +5,9 @@
 
 namespace BansheeEngine
 {
+	/**
+	 * @brief	Resource meta-data for user-defined managed resources.
+	 */
 	class BS_SCR_BE_EXPORT ManagedResourceMetaData : public ResourceMetaData
 	{
 	public:
@@ -17,6 +20,6 @@ namespace BansheeEngine
 	public:
 		friend class ManagedResourceMetaDataRTTI;
 		static RTTITypeBase* getRTTIStatic();
-		virtual RTTITypeBase* getRTTI() const;
+		virtual RTTITypeBase* getRTTI() const override;
 	};
 }

+ 20 - 3
SBansheeEngine/Include/BsScriptAsyncOp.h

@@ -6,23 +6,40 @@
 
 namespace BansheeEngine
 {
+	/**
+	 * @brief	Interop class between C++ & CLR for AsyncOp.
+	 */
 	class BS_SCR_BE_EXPORT ScriptAsyncOp : public ScriptObject<ScriptAsyncOp>
 	{
 	public:
 		SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "AsyncOp")
 
+		/**
+		 * @brief	Creates a new managed AsyncOp instance.
+		 *
+		 * @param	op						Native AsyncOp to wrap.
+		 * @param	asyncOpToReturnValue	Callback that converts the returned value from native async op
+		 *									to a managed object.
+		 */
 		static MonoObject* create(const AsyncOp& op, std::function<MonoObject*(const AsyncOp&)> asyncOpToReturnValue);
 
 	private:
 		ScriptAsyncOp(MonoObject* instance);
+
+		/**
+		 * @brief	Finishes construction of the AsyncOp wrapper. Must be called before using the object.
+		 */
 		void initialize(const AsyncOp& op, std::function<MonoObject*(const AsyncOp&)> asyncOpToReturnValue);
 
+		AsyncOp mAsyncOp;
+		std::function<MonoObject*(const AsyncOp&)> mConvertCallback;
+
+		/************************************************************************/
+		/* 								CLR HOOKS						   		*/
+		/************************************************************************/
 		static void internal_createInstance(MonoObject* managedInstance);
 		static void internal_isComplete(ScriptAsyncOp* thisPtr, bool* value);
 		static MonoObject* internal_getReturnValue(ScriptAsyncOp* thisPtr);
 		static void internal_blockUntilComplete(ScriptAsyncOp* thisPtr);
-
-		AsyncOp mAsyncOp;
-		std::function<MonoObject*(const AsyncOp&)> mConvertCallback;
 	};
 }

+ 12 - 0
SBansheeEngine/Include/BsScriptBoneWeight.h

@@ -6,12 +6,24 @@
 
 namespace BansheeEngine
 {
+	/**
+	 * @brief	Interop class between C++ & CLR for BoneWeight.
+	 */
 	class BS_SCR_BE_EXPORT ScriptBoneWeight : public ScriptObject <ScriptBoneWeight>
 	{
 	public:
 		SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "BoneWeight")
 
+		/**
+		 * @brief	Unboxes a boxed managed BoneWeight struct and returns
+		 *			the native version of the structure.
+		 */
 		static BoneWeight unbox(MonoObject* obj);
+
+		/**
+		 * @brief	Boxes a native BoneWeight struct and returns
+		 *			a managed object containing it.
+		 */
 		static MonoObject* box(const BoneWeight& value);
 
 	private:

+ 8 - 2
SBansheeEngine/Include/BsScriptBuiltin.h

@@ -5,15 +5,21 @@
 
 namespace BansheeEngine
 {
+	/**
+	 * @brief	Interop class between C++ & CLR for ScriptResourceManager.
+	 */
 	class BS_SCR_BE_EXPORT ScriptBuiltin : public ScriptObject <ScriptBuiltin>
 	{
 	public:
 		SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "Builtin")
 
 	private:
+		ScriptBuiltin(MonoObject* instance);
+
+		/************************************************************************/
+		/* 								CLR HOOKS						   		*/
+		/************************************************************************/
 		static MonoObject* internal_getWhiteTexture();
 		static MonoObject* internal_getDiffuseShader();
-		
-		ScriptBuiltin(MonoObject* instance);
 	};
 }

+ 16 - 3
SBansheeEngine/Include/BsScriptCameraHandler.h

@@ -13,19 +13,35 @@
 
 namespace BansheeEngine
 {
+	/**
+	 * @brief	Interop class between C++ & CLR for CameraHandler.
+	 */
 	class BS_SCR_BE_EXPORT ScriptCameraHandler : public ScriptObject<ScriptCameraHandler>
 	{
 	public:
 		SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "CameraHandler")
 
+		/**
+		 * @brief	Returns the wrapped native CameraHandler object.
+		 */
 		SPtr<CameraHandler> getInternal() const { return mCameraHandler; }
 
 	private:
 		ScriptCameraHandler(MonoObject* managedInstance, const HSceneObject& parentSO);
 		~ScriptCameraHandler();
 
+		/**
+		 * @brief	Updates the internal camera handler from the transform of the
+		 *			provided scene object.
+		 */
 		void updateView(const HSceneObject& parent);
 
+		SPtr<CameraHandler> mCameraHandler;
+		UINT32 mLastUpdateHash;
+
+		/************************************************************************/
+		/* 								CLR HOOKS						   		*/
+		/************************************************************************/
 		static void internal_Create(MonoObject* managedInstance, ScriptSceneObject* parentSO);
 
 		static float internal_GetAspect(ScriptCameraHandler* instance);
@@ -101,8 +117,5 @@ namespace BansheeEngine
 
 		static void internal_UpdateView(ScriptCameraHandler* instance, ScriptSceneObject* parent);
 		static void internal_OnDestroy(ScriptCameraHandler* instance);
-
-		SPtr<CameraHandler> mCameraHandler;
-		UINT32 mLastUpdateHash;
 	};
 }

+ 12 - 0
SBansheeEngine/Include/BsScriptColor.h

@@ -6,12 +6,24 @@
 
 namespace BansheeEngine
 {
+	/**
+	 * @brief	Interop class between C++ & CLR for ScriptColor.
+	 */
 	class BS_SCR_BE_EXPORT ScriptColor : public ScriptObject <ScriptColor>
 	{
 	public:
 		SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "Color")
 
+		/**
+		 * @brief	Unboxes a boxed managed Color struct and returns
+		 *			the native version of the structure.
+		 */
 		static Color unbox(MonoObject* obj);
+
+		/**
+		 * @brief	Boxes a native Color struct and returns
+		 *			a managed object containing it.
+		 */
 		static MonoObject* box(const Color& value);
 
 	private:

+ 40 - 12
SBansheeEngine/Include/BsScriptComponent.h

@@ -7,40 +7,68 @@
 
 namespace BansheeEngine
 {
+	/**
+	 * @brief	Interop class between C++ & CLR for ManagedComponent.
+	 */
 	class BS_SCR_BE_EXPORT ScriptComponent : public ScriptObject<ScriptComponent, ScriptGameObjectBase>
 	{
 	public:
 		SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "Component")
 
-		virtual HGameObject getNativeHandle() const { return mManagedComponent; }
-		virtual void setNativeHandle(const HGameObject& gameObject);
+		/**
+		 * @copydoc	ScriptGameObjectBase::getNativeHandle
+		 */
+		virtual HGameObject getNativeHandle() const override { return mManagedComponent; }
 
-		void setManagedComponent(const GameObjectHandle<ManagedComponent>& managedComponent);
+		/**
+		 * @copydoc	ScriptGameObjectBase::setNativeHandle
+		 */
+		virtual void setNativeHandle(const HGameObject& gameObject) override;
 
 	private:
 		friend class ScriptGameObjectManager;
 
-		static void internal_createInstance(MonoObject* instance);
-		static MonoObject* internal_addComponent(MonoObject* parentSceneObject, MonoReflectionType* type);
-		static MonoObject* internal_getComponent(MonoObject* parentSceneObject, MonoReflectionType* type);
-		static MonoArray* internal_getComponents(MonoObject* parentSceneObject);
-		static void internal_removeComponent(MonoObject* parentSceneObject, MonoReflectionType* type);
-		static MonoObject* internal_getSceneObject(ScriptComponent* nativeInstance);
-
-		static bool checkIfDestroyed(const GameObjectHandleBase& handle);
-
 		ScriptComponent(MonoObject* instance);
 		~ScriptComponent() {}
 
+		/**
+		 * @copydoc	ScriptObjectBase::beginRefresh
+		 */
 		virtual ScriptObjectBackup beginRefresh() override;
+
+		/**
+		 * @copydoc	ScriptObjectBase::endRefresh
+		 */
 		virtual void endRefresh(const ScriptObjectBackup& backupData) override;
+
+		/**
+		 * @copydoc	ScriptObjectBase::_createManagedInstance
+		 */
 		virtual MonoObject* _createManagedInstance(bool construct) override;
 
+		/**
+		 * @copydoc	ScriptObjectBase::_onManagedInstanceDeleted
+		 */
 		void _onManagedInstanceDeleted() override;
 
+		/**
+		 * @brief	Checks if the provided game object is destroyed and logs
+		 *			a warning if it is.
+		 */
+		static bool checkIfDestroyed(const GameObjectHandleBase& handle);
+
 		GameObjectHandle<ManagedComponent> mManagedComponent;
 		String mNamespace;
 		String mType;
 		bool mTypeMissing;
+
+		/************************************************************************/
+		/* 								CLR HOOKS						   		*/
+		/************************************************************************/
+		static MonoObject* internal_addComponent(MonoObject* parentSceneObject, MonoReflectionType* type);
+		static MonoObject* internal_getComponent(MonoObject* parentSceneObject, MonoReflectionType* type);
+		static MonoArray* internal_getComponents(MonoObject* parentSceneObject);
+		static void internal_removeComponent(MonoObject* parentSceneObject, MonoReflectionType* type);
+		static MonoObject* internal_getSceneObject(ScriptComponent* nativeInstance);
 	};
 }

+ 19 - 6
SBansheeEngine/Include/BsScriptContextMenu.h

@@ -5,27 +5,40 @@
 
 namespace BansheeEngine
 {
+	/**
+	 * @brief	Interop class between C++ & CLR for GUIContextMenu.
+	 */
 	class BS_SCR_BE_EXPORT ScriptContextMenu : public ScriptObject < ScriptContextMenu >
 	{
 	public:
 		SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "ContextMenu")
 
+		/**
+		 * @brief	Returns the internal native context menu object.
+		 */
 		GUIContextMenuPtr getInternal() const { return mContextMenu; }
 
 	private:
-		static void internal_CreateInstance(MonoObject* instance);
-		static void internal_AddItem(ScriptContextMenu* instance, MonoString* path, UINT32 callbackIdx, ShortcutKey shortcut);
-		static void internal_AddSeparator(ScriptContextMenu* instance, MonoString* path);
-		static void internal_SetLocalizedName(ScriptContextMenu* instance, MonoString* label, ScriptHString* name);
-
 		ScriptContextMenu(MonoObject* instance);
 
+		/**
+		 * @brief	Triggered when an item in the context menu is clicked.
+		 *
+		 * @param	idx	Sequential index of the item that was clicked.
+		 */
 		void onContextMenuItemTriggered(UINT32 idx);
 
 		GUIContextMenuPtr mContextMenu;
 
+		/************************************************************************/
+		/* 								CLR HOOKS						   		*/
+		/************************************************************************/
 		typedef void(__stdcall *OnEntryTriggeredThunkDef) (MonoObject*, UINT32 callbackIdx, MonoException**);
-
 		static OnEntryTriggeredThunkDef onEntryTriggered;
+
+		static void internal_CreateInstance(MonoObject* instance);
+		static void internal_AddItem(ScriptContextMenu* instance, MonoString* path, UINT32 callbackIdx, ShortcutKey shortcut);
+		static void internal_AddSeparator(ScriptContextMenu* instance, MonoString* path);
+		static void internal_SetLocalizedName(ScriptContextMenu* instance, MonoString* label, ScriptHString* name);
 	};
 }

+ 8 - 2
SBansheeEngine/Include/BsScriptCursor.h

@@ -7,12 +7,20 @@
 
 namespace BansheeEngine
 {
+	/**
+	 * @brief	Interop class between C++ & CLR for Cursor.
+	 */
 	class BS_SCR_BE_EXPORT ScriptCursor : public ScriptObject <ScriptCursor>
 	{
 	public:
 		SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "Cursor")
 
 	private:
+		ScriptCursor(MonoObject* instance);
+
+		/************************************************************************/
+		/* 								CLR HOOKS						   		*/
+		/************************************************************************/
 		static void internal_getScreenPosition(Vector2I* value);
 		static void internal_setScreenPosition(Vector2I value);
 		static void internal_hide();
@@ -25,7 +33,5 @@ namespace BansheeEngine
 		static void internal_setCursorIcon(CursorType cursor, MonoObject* iconData, Vector2I hotspot);
 		static void internal_clearCursorIconStr(MonoString* name);
 		static void internal_clearCursorIcon(CursorType cursor);
-
-		ScriptCursor(MonoObject* instance);
 	};
 }

+ 8 - 2
SBansheeEngine/Include/BsScriptDebug.h

@@ -5,16 +5,22 @@
 
 namespace BansheeEngine
 {
+	/**
+	 * @brief	Interop class between C++ & CLR for Debug.
+	 */
 	class BS_SCR_BE_EXPORT ScriptDebug : public ScriptObject<ScriptDebug>
 	{
 	public:
 		SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "Debug")
 
 	private:
+		ScriptDebug(MonoObject* instance);
+
+		/************************************************************************/
+		/* 								CLR HOOKS						   		*/
+		/************************************************************************/
 		static void internal_log(MonoString* message);
 		static void internal_logWarning(MonoString* message);
 		static void internal_logError(MonoString* message);
-
-		ScriptDebug(MonoObject* instance);
 	};
 }

+ 0 - 5
SBansheeEngine/Source/BsScriptComponent.cpp

@@ -32,11 +32,6 @@ namespace BansheeEngine
 		metaData.scriptClass->addInternalCall("Internal_GetSceneObject", &ScriptComponent::internal_getSceneObject);
 	}
 
-	void ScriptComponent::setManagedComponent(const GameObjectHandle<ManagedComponent>& managedComponent)
-	{
-		mManagedComponent = managedComponent;
-	}
-
 	MonoObject* ScriptComponent::internal_addComponent(MonoObject* parentSceneObject, MonoReflectionType* type)
 	{
 		ScriptSceneObject* scriptSO = ScriptSceneObject::toNative(parentSceneObject);

+ 1 - 1
SBansheeEngine/Source/BsScriptGameObjectManager.cpp

@@ -70,7 +70,7 @@ namespace BansheeEngine
 			BS_EXCEPT(InvalidStateException, "Script component for this Component already exists.");
 
 		ScriptComponent* nativeInstance = new (bs_alloc<ScriptComponent>()) ScriptComponent(existingInstance);
-		nativeInstance->setManagedComponent(component);
+		nativeInstance->setNativeHandle(component);
 		mScriptGameObjects[component->getInstanceId()] = ScriptGameObjectEntry(nativeInstance, true);
 
 		return nativeInstance;