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

Fixed a couple of exceptions on handle manager shutdown
Somewhat fixed cone rendering

Marko Pintera 11 лет назад
Родитель
Сommit
76fbe5db43

+ 4 - 4
BansheeEngine/Source/BsShapeMeshes3D.cpp

@@ -643,15 +643,15 @@ namespace BansheeEngine
 		for (UINT32 i = 0; i < numTriangles - 1; i++)
 		for (UINT32 i = 0; i < numTriangles - 1; i++)
 		{
 		{
 			outIndices[i * 3 + 0] = curVertOffset + topIdx;
 			outIndices[i * 3 + 0] = curVertOffset + topIdx;
-			outIndices[i * 3 + 1] = curVertOffset + i;
-			outIndices[i * 3 + 2] = curVertOffset + i + 1;
+			outIndices[i * 3 + 1] = curVertOffset + i + 1;
+			outIndices[i * 3 + 2] = curVertOffset + i;
 		}
 		}
 
 
 		{
 		{
 			UINT32 i = numTriangles - 1;
 			UINT32 i = numTriangles - 1;
 			outIndices[i * 3 + 0] = vertexOffset + topIdx;
 			outIndices[i * 3 + 0] = vertexOffset + topIdx;
-			outIndices[i * 3 + 1] = vertexOffset + i;
-			outIndices[i * 3 + 2] = vertexOffset + 0;
+			outIndices[i * 3 + 1] = vertexOffset + 0;
+			outIndices[i * 3 + 2] = vertexOffset + i;
 		}
 		}
 	}
 	}
 
 

+ 2 - 2
MBansheeEditor/Scene/MoveHandle.cs

@@ -4,8 +4,8 @@ namespace BansheeEditor
 {
 {
     public sealed class MoveHandle : DefaultHandle
     public sealed class MoveHandle : DefaultHandle
     {
     {
-        private const float CONE_HEIGHT = 0.05f;
-        private const float CONE_RADIUS = 0.05f;
+        private const float CONE_HEIGHT = 0.5f;
+        private const float CONE_RADIUS = 0.5f;
 
 
         private Vector3 delta;
         private Vector3 delta;
 
 

+ 1 - 0
SBansheeEditor/Include/BsScriptEditorPrerequisites.h

@@ -24,6 +24,7 @@ namespace BansheeEngine
 	class ScriptEditorWindow;
 	class ScriptEditorWindow;
 	class GUIGameObjectField;
 	class GUIGameObjectField;
 	class GUIResourceField;
 	class GUIResourceField;
+	class ScriptHandleSliderBase;
 
 
 	static const char* BansheeEditorAssemblyName = "MBansheeEditor";
 	static const char* BansheeEditorAssemblyName = "MBansheeEditor";
 }
 }

+ 4 - 2
SBansheeEditor/Include/BsScriptHandleSlider.h

@@ -12,14 +12,16 @@ namespace BansheeEngine
 	{
 	{
 	public:
 	public:
 		ScriptHandleSliderBase(MonoObject* managedInstance);
 		ScriptHandleSliderBase(MonoObject* managedInstance);
-		virtual ~ScriptHandleSliderBase() {}
+		virtual ~ScriptHandleSliderBase() { }
 
 
 		virtual HandleSlider* getSlider() const = 0;
 		virtual HandleSlider* getSlider() const = 0;
 
 
 	protected:
 	protected:
 		friend class ScriptHandleSlider;
 		friend class ScriptHandleSlider;
+		friend class ScriptHandleSliderManager;
 
 
-		virtual void destroy() = 0;
+		void destroy();
+		virtual void destroyInternal() = 0;
 	};
 	};
 
 
 	class BS_SCR_BED_EXPORT ScriptHandleSlider : public ScriptObject <ScriptHandleSlider>
 	class BS_SCR_BED_EXPORT ScriptHandleSlider : public ScriptObject <ScriptHandleSlider>

+ 1 - 1
SBansheeEditor/Include/BsScriptHandleSliderDisc.h

@@ -15,7 +15,7 @@ namespace BansheeEngine
 
 
 	protected:
 	protected:
 		virtual HandleSlider* getSlider() const { return mSlider; }
 		virtual HandleSlider* getSlider() const { return mSlider; }
-		virtual void destroy();
+		virtual void destroyInternal();
 
 
 	private:
 	private:
 		static void internal_CreateInstance(MonoObject* instance, Vector3 normal, float radius, bool fixedScale, float snapValue);
 		static void internal_CreateInstance(MonoObject* instance, Vector3 normal, float radius, bool fixedScale, float snapValue);

+ 1 - 1
SBansheeEditor/Include/BsScriptHandleSliderLine.h

@@ -15,7 +15,7 @@ namespace BansheeEngine
 
 
 	protected:
 	protected:
 		virtual HandleSlider* getSlider() const { return mSlider; }
 		virtual HandleSlider* getSlider() const { return mSlider; }
-		virtual void destroy();
+		virtual void destroyInternal();
 
 
 	private:
 	private:
 		static void internal_CreateInstance(MonoObject* instance, Vector3 direction, float length, bool fixedScale, float snapValue);
 		static void internal_CreateInstance(MonoObject* instance, Vector3 direction, float length, bool fixedScale, float snapValue);

+ 19 - 0
SBansheeEditor/Include/BsScriptHandleSliderManager.h

@@ -0,0 +1,19 @@
+#pragma once
+
+#include "BsScriptEditorPrerequisites.h"
+#include "BsModule.h"
+
+namespace BansheeEngine
+{
+	class BS_SCR_BED_EXPORT ScriptHandleSliderManager : public Module<ScriptHandleSliderManager>
+	{
+	public:
+		~ScriptHandleSliderManager();
+
+		void registerSlider(ScriptHandleSliderBase* slider);
+		void unregisterSlider(ScriptHandleSliderBase* slider);
+
+	private:
+		Set<ScriptHandleSliderBase*> mSliders;
+	};
+}

+ 1 - 1
SBansheeEditor/Include/BsScriptHandleSliderPlane.h

@@ -15,7 +15,7 @@ namespace BansheeEngine
 
 
 	protected:
 	protected:
 		virtual HandleSlider* getSlider() const { return mSlider; }
 		virtual HandleSlider* getSlider() const { return mSlider; }
-		virtual void destroy();
+		virtual void destroyInternal();
 
 
 	private:
 	private:
 		static void internal_CreateInstance(MonoObject* instance, Vector3 dir1, Vector3 dir2, float length, bool fixedScale, float snapValue);
 		static void internal_CreateInstance(MonoObject* instance, Vector3 dir1, Vector3 dir2, float length, bool fixedScale, float snapValue);

+ 2 - 0
SBansheeEditor/SBansheeEditor.vcxproj

@@ -253,6 +253,7 @@
     <ClInclude Include="Include\BsScriptHandleManager.h" />
     <ClInclude Include="Include\BsScriptHandleManager.h" />
     <ClInclude Include="Include\BsScriptHandleSlider.h" />
     <ClInclude Include="Include\BsScriptHandleSlider.h" />
     <ClInclude Include="Include\BsScriptHandleSliderLine.h" />
     <ClInclude Include="Include\BsScriptHandleSliderLine.h" />
+    <ClInclude Include="Include\BsScriptHandleSliderManager.h" />
     <ClInclude Include="Include\BsScriptHandleSliderPlane.h" />
     <ClInclude Include="Include\BsScriptHandleSliderPlane.h" />
     <ClInclude Include="Include\BsScriptProjectLibrary.h" />
     <ClInclude Include="Include\BsScriptProjectLibrary.h" />
     <ClInclude Include="Include\BsScriptSelection.h" />
     <ClInclude Include="Include\BsScriptSelection.h" />
@@ -285,6 +286,7 @@
     <ClCompile Include="Source\BsScriptHandleSlider.cpp" />
     <ClCompile Include="Source\BsScriptHandleSlider.cpp" />
     <ClCompile Include="Source\BsScriptHandleSliderDisc.cpp" />
     <ClCompile Include="Source\BsScriptHandleSliderDisc.cpp" />
     <ClCompile Include="Source\BsScriptHandleSliderLine.cpp" />
     <ClCompile Include="Source\BsScriptHandleSliderLine.cpp" />
+    <ClCompile Include="Source\BsScriptHandleSliderManager.cpp" />
     <ClCompile Include="Source\BsScriptHandleSliderPlane.cpp" />
     <ClCompile Include="Source\BsScriptHandleSliderPlane.cpp" />
     <ClCompile Include="Source\BsScriptProjectLibrary.cpp" />
     <ClCompile Include="Source\BsScriptProjectLibrary.cpp" />
     <ClCompile Include="Source\BsScriptSelection.cpp" />
     <ClCompile Include="Source\BsScriptSelection.cpp" />

+ 6 - 0
SBansheeEditor/SBansheeEditor.vcxproj.filters

@@ -105,6 +105,9 @@
     <ClInclude Include="Include\BsScriptEditorUtility.h">
     <ClInclude Include="Include\BsScriptEditorUtility.h">
       <Filter>Header Files</Filter>
       <Filter>Header Files</Filter>
     </ClInclude>
     </ClInclude>
+    <ClInclude Include="Include\BsScriptHandleSliderManager.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="Source\BsScriptEditorPlugin.cpp">
     <ClCompile Include="Source\BsScriptEditorPlugin.cpp">
@@ -197,5 +200,8 @@
     <ClCompile Include="Source\BsScriptEditorUtility.cpp">
     <ClCompile Include="Source\BsScriptEditorUtility.cpp">
       <Filter>Source Files</Filter>
       <Filter>Source Files</Filter>
     </ClCompile>
     </ClCompile>
+    <ClCompile Include="Source\BsScriptHandleSliderManager.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
   </ItemGroup>
 </Project>
 </Project>

+ 3 - 0
SBansheeEditor/Source/BsEditorScriptManager.cpp

@@ -7,6 +7,7 @@
 #include "BsRuntimeScriptObjects.h"
 #include "BsRuntimeScriptObjects.h"
 #include "BsScriptGizmoManager.h"
 #include "BsScriptGizmoManager.h"
 #include "BsScriptHandleManager.h"
 #include "BsScriptHandleManager.h"
+#include "BsScriptHandleSliderManager.h"
 #include "BsTime.h"
 #include "BsTime.h"
 #include "BsMath.h"
 #include "BsMath.h"
 
 
@@ -26,6 +27,7 @@ namespace BansheeEngine
 
 
 		RuntimeScriptObjects::instance().refreshScriptObjects(BansheeEditorAssemblyName);
 		RuntimeScriptObjects::instance().refreshScriptObjects(BansheeEditorAssemblyName);
 
 
+		ScriptHandleSliderManager::startUp();
 		ScriptGizmoManager::startUp(RuntimeScriptObjects::instance());
 		ScriptGizmoManager::startUp(RuntimeScriptObjects::instance());
 		HandleManager::startUp<ScriptHandleManager>(RuntimeScriptObjects::instance());
 		HandleManager::startUp<ScriptHandleManager>(RuntimeScriptObjects::instance());
 
 
@@ -41,6 +43,7 @@ namespace BansheeEngine
 
 
 	EditorScriptManager::~EditorScriptManager()
 	EditorScriptManager::~EditorScriptManager()
 	{
 	{
+		ScriptHandleSliderManager::shutDown();
 		HandleManager::shutDown();
 		HandleManager::shutDown();
 		ScriptGizmoManager::shutDown();
 		ScriptGizmoManager::shutDown();
 	}
 	}

+ 1 - 1
SBansheeEditor/Source/BsScriptHandleManager.cpp

@@ -154,7 +154,7 @@ namespace BansheeEngine
 			mPreInputMethod = mHandleBaseClass->getMethod("PreInput", 0);
 			mPreInputMethod = mHandleBaseClass->getMethod("PreInput", 0);
 			mPostInputMethod = mHandleBaseClass->getMethod("PostInput", 0);
 			mPostInputMethod = mHandleBaseClass->getMethod("PostInput", 0);
 			mDrawMethod = mHandleBaseClass->getMethod("Draw", 0);
 			mDrawMethod = mHandleBaseClass->getMethod("Draw", 0);
-			mDestroyThunk = (DestroyThunkDef)mHandleBaseClass->getMethod("Destroy", 0);
+			mDestroyThunk = (DestroyThunkDef)mHandleBaseClass->getMethod("Destroy", 0)->getThunk();
 
 
 			mDefaultHandleManager = nullptr; // Freed on assembly unload, so not valid anymore
 			mDefaultHandleManager = nullptr; // Freed on assembly unload, so not valid anymore
 			mDefaultHandleManagerGCHandle = 0;
 			mDefaultHandleManagerGCHandle = 0;

+ 8 - 0
SBansheeEditor/Source/BsScriptHandleSlider.cpp

@@ -1,13 +1,21 @@
 #include "BsScriptHandleSlider.h"
 #include "BsScriptHandleSlider.h"
 #include "BsScriptMeta.h"
 #include "BsScriptMeta.h"
 #include "BsMonoClass.h"
 #include "BsMonoClass.h"
+#include "BsScriptHandleSliderManager.h"
 
 
 namespace BansheeEngine
 namespace BansheeEngine
 {
 {
 	ScriptHandleSliderBase::ScriptHandleSliderBase(MonoObject* managedInstance)
 	ScriptHandleSliderBase::ScriptHandleSliderBase(MonoObject* managedInstance)
 		:ScriptObjectBase(managedInstance)
 		:ScriptObjectBase(managedInstance)
 	{
 	{
+		ScriptHandleSliderManager::instance().registerSlider(this);
+	}
+
+	void ScriptHandleSliderBase::destroy()
+	{
+		ScriptHandleSliderManager::instance().unregisterSlider(this);
 
 
+		destroyInternal();
 	}
 	}
 
 
 	ScriptHandleSlider::ScriptHandleSlider(MonoObject* instance)
 	ScriptHandleSlider::ScriptHandleSlider(MonoObject* instance)

+ 1 - 1
SBansheeEditor/Source/BsScriptHandleSliderDisc.cpp

@@ -18,7 +18,7 @@ namespace BansheeEngine
 			bs_delete(mSlider);
 			bs_delete(mSlider);
 	}
 	}
 
 
-	void ScriptHandleSliderDisc::destroy()
+	void ScriptHandleSliderDisc::destroyInternal()
 	{
 	{
 		if (mSlider != nullptr)
 		if (mSlider != nullptr)
 			bs_delete(mSlider);
 			bs_delete(mSlider);

+ 1 - 1
SBansheeEditor/Source/BsScriptHandleSliderLine.cpp

@@ -18,7 +18,7 @@ namespace BansheeEngine
 			bs_delete(mSlider);
 			bs_delete(mSlider);
 	}
 	}
 
 
-	void ScriptHandleSliderLine::destroy()
+	void ScriptHandleSliderLine::destroyInternal()
 	{
 	{
 		if (mSlider != nullptr)
 		if (mSlider != nullptr)
 			bs_delete(mSlider);
 			bs_delete(mSlider);

+ 21 - 0
SBansheeEditor/Source/BsScriptHandleSliderManager.cpp

@@ -0,0 +1,21 @@
+#include "BsScriptHandleSliderManager.h"
+#include "BsScriptHandleSlider.h"
+
+namespace BansheeEngine
+{
+	ScriptHandleSliderManager::~ScriptHandleSliderManager()
+	{
+		for (auto& slider : mSliders)
+			slider->destroyInternal();
+	}
+
+	void ScriptHandleSliderManager::registerSlider(ScriptHandleSliderBase* slider)
+	{
+		mSliders.insert(slider);
+	}
+
+	void ScriptHandleSliderManager::unregisterSlider(ScriptHandleSliderBase* slider)
+	{
+		mSliders.erase(slider);
+	}
+}

+ 1 - 1
SBansheeEditor/Source/BsScriptHandleSliderPlane.cpp

@@ -18,7 +18,7 @@ namespace BansheeEngine
 			bs_delete(mSlider);
 			bs_delete(mSlider);
 	}
 	}
 
 
-	void ScriptHandleSliderPlane::destroy()
+	void ScriptHandleSliderPlane::destroyInternal()
 	{
 	{
 		if (mSlider != nullptr)
 		if (mSlider != nullptr)
 			bs_delete(mSlider);
 			bs_delete(mSlider);

+ 1 - 1
SceneView.txt

@@ -6,11 +6,11 @@
 
 
 REFACTOR material getParams* and related classes. Those params should update all gpu program params that share that variable, not just the first found
 REFACTOR material getParams* and related classes. Those params should update all gpu program params that share that variable, not just the first found
 Add a way to render GUI image without alpha
 Add a way to render GUI image without alpha
-Crash related to Handles when object is selected
 Exception related to handle manager on shutdown
 Exception related to handle manager on shutdown
 Cannot pick gizmo icon
 Cannot pick gizmo icon
 Cone handle doesn't render properly
 Cone handle doesn't render properly
 Line slider collider intersection doesn't work properly
 Line slider collider intersection doesn't work properly
+Handles need to render in front of everything
 
 
 Test gizmos
 Test gizmos
  - HOOK UP GIZMO SELECTION and test it
  - HOOK UP GIZMO SELECTION and test it