Browse Source

Scene view movement is now only active while in focus
Right clicking on an editor window now properly sets its focus
Fixed incorrectly bound Backspace for alternate scene view movement

Marko Pintera 10 years ago
parent
commit
ed523bc01d

+ 3 - 0
BansheeCore/Source/BsCoreSceneManager.cpp

@@ -46,6 +46,9 @@ namespace BansheeEngine
 		{
 			HSceneObject currentGO = todo.top();
 			todo.pop();
+
+			if (!currentGO->getActive(true))
+				continue;
 			                  
 			const Vector<HComponent>& components = currentGO->getComponents();
 

+ 1 - 1
BansheeEditor/Source/BsEditorWidgetManager.cpp

@@ -46,7 +46,7 @@ namespace BansheeEngine
 
 	void EditorWidgetManager::update()
 	{
-		if (gInput().isPointerButtonDown(PointerEventButton::Left))
+		if (gInput().isPointerButtonDown(PointerEventButton::Left) || gInput().isPointerButtonDown(PointerEventButton::Right))
 		{
 			for (auto& widgetData : mActiveWidgets)
 			{

+ 1 - 1
MBansheeEditor/EditorApplication.cs

@@ -94,7 +94,7 @@ namespace BansheeEditor
             inputConfig.RegisterButton(SceneCamera.MoveLeftBinding, ButtonCode.A);
             inputConfig.RegisterButton(SceneCamera.MoveRightBinding, ButtonCode.D);
             inputConfig.RegisterButton(SceneCamera.MoveForwardBinding, ButtonCode.Up);
-            inputConfig.RegisterButton(SceneCamera.MoveBackBinding, ButtonCode.Back);
+            inputConfig.RegisterButton(SceneCamera.MoveBackBinding, ButtonCode.Down);
             inputConfig.RegisterButton(SceneCamera.MoveLeftBinding, ButtonCode.Left);
             inputConfig.RegisterButton(SceneCamera.MoveRightBinding, ButtonCode.Right);
             inputConfig.RegisterButton(SceneCamera.FastMoveBinding, ButtonCode.LeftShift);

+ 0 - 2
MBansheeEditor/Scene/SceneCamera.cs

@@ -52,8 +52,6 @@ namespace BansheeEditor
 
         private void Update()
         {
-            // TODO - Only move if scene view is focused
-
 		    bool goingForward = VirtualInput.IsButtonHeld(moveForwardBtn);
 		    bool goingBack = VirtualInput.IsButtonHeld(moveBackwardBtn);
 		    bool goingLeft = VirtualInput.IsButtonHeld(moveLeftBtn);

+ 5 - 1
MBansheeEditor/Scene/SceneWindow.cs

@@ -194,7 +194,6 @@ namespace BansheeEditor
 
                         for (int i = 0; i < draggedPaths.Length; i++)
                         {
-
                             LibraryEntry entry = ProjectLibrary.GetEntry(draggedPaths[i]);
                             if (entry != null && entry.Type == LibraryEntryType.File)
                             {
@@ -245,7 +244,12 @@ namespace BansheeEditor
             }
 
             if (!HasFocus)
+            {
+                cameraController.SceneObject.Active = false;
                 return;
+            }
+            else
+                cameraController.SceneObject.Active = true;
 
             if (inBounds)
             {

+ 12 - 0
MBansheeEngine/SceneObject.cs

@@ -17,6 +17,12 @@ namespace BansheeEngine
             set { Internal_SetParent(mCachedPtr, value); }
         }
 
+        public bool Active
+        {
+            get { return Internal_GetActive(mCachedPtr); }
+            set { Internal_SetActive(mCachedPtr, value); }
+        }
+
         public Vector3 Position
         {
             get
@@ -261,6 +267,12 @@ namespace BansheeEngine
         [MethodImpl(MethodImplOptions.InternalCall)]
         private static extern string Internal_GetName(IntPtr nativeInstance);
 
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetActive(IntPtr nativeInstance, bool value);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern bool Internal_GetActive(IntPtr nativeInstance);
+
         [MethodImpl(MethodImplOptions.InternalCall)]
         private static extern void Internal_SetParent(IntPtr nativeInstance, SceneObject parent);
 

+ 2 - 0
SBansheeEngine/Include/BsScriptSceneObject.h

@@ -26,6 +26,8 @@ namespace BansheeEngine
 
 		static void internal_setName(ScriptSceneObject* nativeInstance, MonoString* name);
 		static MonoString* internal_getName(ScriptSceneObject* nativeInstance);
+		static void internal_setActive(ScriptSceneObject* nativeInstance, bool value);
+		static bool internal_getActive(ScriptSceneObject* nativeInstance);
 
 		static void internal_setParent(ScriptSceneObject* nativeInstance, MonoObject* parent);
 		static MonoObject* internal_getParent(ScriptSceneObject* nativeInstance);

+ 18 - 0
SBansheeEngine/Source/BsScriptSceneObject.cpp

@@ -25,6 +25,8 @@ namespace BansheeEngine
 		metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptSceneObject::internal_createInstance);
 		metaData.scriptClass->addInternalCall("Internal_GetName", &ScriptSceneObject::internal_getName);
 		metaData.scriptClass->addInternalCall("Internal_SetName", &ScriptSceneObject::internal_setName);
+		metaData.scriptClass->addInternalCall("Internal_GetActive", &ScriptSceneObject::internal_getActive);
+		metaData.scriptClass->addInternalCall("Internal_SetActive", &ScriptSceneObject::internal_setActive);
 		metaData.scriptClass->addInternalCall("Internal_GetParent", &ScriptSceneObject::internal_getParent);
 		metaData.scriptClass->addInternalCall("Internal_SetParent", &ScriptSceneObject::internal_setParent);
 		metaData.scriptClass->addInternalCall("Internal_GetNumChildren", &ScriptSceneObject::internal_getNumChildren);
@@ -84,6 +86,22 @@ namespace BansheeEngine
 		return MonoUtil::stringToMono(MonoManager::instance().getDomain(), name);
 	}
 
+	void ScriptSceneObject::internal_setActive(ScriptSceneObject* nativeInstance, bool value)
+	{
+		if (checkIfDestroyed(nativeInstance))
+			return;
+
+		nativeInstance->mSceneObject->setActive(value);
+	}
+
+	bool ScriptSceneObject::internal_getActive(ScriptSceneObject* nativeInstance)
+	{
+		if (checkIfDestroyed(nativeInstance))
+			return false;
+
+		return nativeInstance->mSceneObject->getActive(true);
+	}
+
 	void ScriptSceneObject::internal_setParent(ScriptSceneObject* nativeInstance, MonoObject* parent)
 	{
 		if (checkIfDestroyed(nativeInstance))

+ 0 - 1
TODO.txt

@@ -56,7 +56,6 @@ Code quality improvements:
 ----------------------------------------------------------------------
 Polish stage 1
 
-Float field scroll value doesn't seem to persist when it comes to the inspector window
 Fix DX11 (and possibly DX9) rendering
 After undocking ProjectWindow the auto-scroll seems to be stuck in up position
 Decent looking default layout