Browse Source

Started work on SceneView

Marko Pintera 11 years ago
parent
commit
31b55e513f

+ 4 - 0
BansheeEditor/BansheeEditor.vcxproj

@@ -316,6 +316,8 @@
     <ClInclude Include="Include\BsGUIVector2Field.h" />
     <ClInclude Include="Include\BsGUIVector2Field.h" />
     <ClInclude Include="Include\BsDebugCamera.h" />
     <ClInclude Include="Include\BsDebugCamera.h" />
     <ClInclude Include="Include\BsResourceImporter.h" />
     <ClInclude Include="Include\BsResourceImporter.h" />
+    <ClInclude Include="Include\BsSceneCameraController.h" />
+    <ClInclude Include="Include\BsSceneEditorWidget.h" />
     <ClInclude Include="Include\BsTestTextSprite.h" />
     <ClInclude Include="Include\BsTestTextSprite.h" />
     <ClInclude Include="Include\DbgEditorWidget1.h" />
     <ClInclude Include="Include\DbgEditorWidget1.h" />
     <ClInclude Include="Include\DbgEditorWidget2.h" />
     <ClInclude Include="Include\DbgEditorWidget2.h" />
@@ -366,6 +368,8 @@
     <ClCompile Include="Source\BsProjectLibraryEntries.cpp" />
     <ClCompile Include="Source\BsProjectLibraryEntries.cpp" />
     <ClCompile Include="Source\BsProjectResourceMeta.cpp" />
     <ClCompile Include="Source\BsProjectResourceMeta.cpp" />
     <ClCompile Include="Source\BsResourceImporter.cpp" />
     <ClCompile Include="Source\BsResourceImporter.cpp" />
+    <ClCompile Include="Source\BsSceneCameraController.cpp" />
+    <ClCompile Include="Source\BsSceneEditorWidget.cpp" />
     <ClCompile Include="Source\BsUndoRedo.cpp" />
     <ClCompile Include="Source\BsUndoRedo.cpp" />
     <ClCompile Include="Source\BsDebugCamera.cpp" />
     <ClCompile Include="Source\BsDebugCamera.cpp" />
     <ClCompile Include="Source\BsEditorApplication.cpp" />
     <ClCompile Include="Source\BsEditorApplication.cpp" />

+ 12 - 0
BansheeEditor/BansheeEditor.vcxproj.filters

@@ -204,6 +204,12 @@
     <ClInclude Include="Include\BsGUIFoldout.h">
     <ClInclude Include="Include\BsGUIFoldout.h">
       <Filter>Header Files\Editor</Filter>
       <Filter>Header Files\Editor</Filter>
     </ClInclude>
     </ClInclude>
+    <ClInclude Include="Include\BsSceneEditorWidget.h">
+      <Filter>Header Files\Editor</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsSceneCameraController.h">
+      <Filter>Header Files\Editor</Filter>
+    </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="Source\BsEditorWidgetContainer.cpp">
     <ClCompile Include="Source\BsEditorWidgetContainer.cpp">
@@ -356,5 +362,11 @@
     <ClCompile Include="Source\BsGUIFoldout.cpp">
     <ClCompile Include="Source\BsGUIFoldout.cpp">
       <Filter>Source Files\Editor</Filter>
       <Filter>Source Files\Editor</Filter>
     </ClCompile>
     </ClCompile>
+    <ClCompile Include="Source\BsSceneEditorWidget.cpp">
+      <Filter>Source Files\Editor</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsSceneCameraController.cpp">
+      <Filter>Source Files\Editor</Filter>
+    </ClCompile>
   </ItemGroup>
   </ItemGroup>
 </Project>
 </Project>

+ 4 - 0
BansheeEditor/Include/BsEditorApplication.h

@@ -15,6 +15,8 @@ namespace BansheeEngine
 		static void startUp(RenderSystemPlugin renderSystemPlugin);
 		static void startUp(RenderSystemPlugin renderSystemPlugin);
 
 
 		bool isProjectLoaded() const;
 		bool isProjectLoaded() const;
+		bool isGameViewFocused() const;
+		bool isSceneViewFocused() const;
 		const Path& getActiveProjectPath() const;
 		const Path& getActiveProjectPath() const;
 	private:
 	private:
 		virtual void onStartUp();
 		virtual void onStartUp();
@@ -46,4 +48,6 @@ namespace BansheeEngine
 		HTexture mTestTexRef;
 		HTexture mTestTexRef;
 		HMesh mDbgMeshRef;
 		HMesh mDbgMeshRef;
 	};
 	};
+
+	BS_ED_EXPORT EditorApplication& gEditorApplication();
 }
 }

+ 3 - 0
BansheeEditor/Include/BsEditorWidget.h

@@ -38,6 +38,9 @@ namespace BansheeEngine
 		EditorWidgetBase(const HString& displayName, const String& name, EditorWidgetContainer& parentContainer);
 		EditorWidgetBase(const HString& displayName, const String& name, EditorWidgetContainer& parentContainer);
 		virtual ~EditorWidgetBase();
 		virtual ~EditorWidgetBase();
 
 
+		virtual void doOnMoved(INT32 x, INT32 y);
+		virtual void doOnResized(UINT32 width, UINT32 height);
+
 		String mName;
 		String mName;
 		HString mDisplayName;
 		HString mDisplayName;
 		EditorWidgetContainer* mParent;
 		EditorWidgetContainer* mParent;

+ 56 - 0
BansheeEditor/Include/BsSceneCameraController.h

@@ -0,0 +1,56 @@
+#pragma once
+
+#include "BsPrerequisites.h"
+#include "BsComponent.h"
+#include "BsMath.h"
+#include "BsVirtualInput.h"
+
+namespace BansheeEngine
+{
+	class SceneCameraController : public Component
+	{
+	public:
+		virtual void update();
+
+		static const String MOVE_FORWARD_BTN;
+		static const String MOVE_LEFT_BTN;
+		static const String MOVE_RIGHT_BTN;
+		static const String MOVE_BACKWARD_BTN;
+		static const String FAST_MOVE_BTN;
+		static const String ROTATE_BTN;
+		static const String HORIZONTAL_AXIS;
+		static const String VERTICAL_AXIS;
+
+	private:
+		float mCurrentSpeed;
+
+		Degree mPitch;
+		Degree mYaw;
+		bool mLastButtonState;
+
+		HCamera mCamera;
+
+		VirtualButton mMoveForward;
+		VirtualButton mMoveLeft;
+		VirtualButton mMoveRight;
+		VirtualButton mMoveBackward;
+		VirtualButton mFastMove;
+		VirtualButton mRotate;
+		VirtualAxis mHorizontal;
+		VirtualAxis mVertical;
+
+		static const float START_SPEED;
+		static const float TOP_SPEED;
+		static const float ACCELERATION;
+		static const float FAST_MODE_MULTIPLIER;
+		static const float ROTATION_SPEED; // Degrees/second
+
+		/************************************************************************/
+		/* 						COMPONENT OVERRIDES                      		*/
+		/************************************************************************/
+	protected:
+		friend class SceneObject;
+
+		SceneCameraController(const HSceneObject& parent);
+	};
+}

+ 30 - 0
BansheeEditor/Include/BsSceneEditorWidget.h

@@ -0,0 +1,30 @@
+#pragma once
+
+#include "BsEditorPrerequisites.h"
+#include "BsEditorWidget.h"
+
+namespace BansheeEngine
+{
+	class SceneEditorWidget : public EditorWidget<SceneEditorWidget>
+	{
+	public:
+		SceneEditorWidget(const ConstructPrivately& dummy, EditorWidgetContainer& parentContainer);
+		virtual ~SceneEditorWidget();
+
+		virtual void _update();
+
+		static SceneEditorWidget* instance();
+		static SceneEditorWidget* open();
+		static void close();
+		static const String& getTypeName();
+
+	protected:
+		void doOnResized(UINT32 width, UINT32 height);
+
+	private:
+		static SceneEditorWidget* Instance;
+
+		RenderTexturePtr mSceneRenderTarget;
+		HCamera mCamera;
+	};
+}

+ 18 - 0
BansheeEditor/Source/BsEditorApplication.cpp

@@ -10,6 +10,7 @@
 #include "BsPath.h"
 #include "BsPath.h"
 #include "BsResourceImporter.h"
 #include "BsResourceImporter.h"
 #include "BsEditorWidgetLayout.h"
 #include "BsEditorWidgetLayout.h"
+#include "BsSceneEditorWidget.h"
 
 
 // DEBUG ONLY
 // DEBUG ONLY
 #include "DbgEditorWidget1.h"
 #include "DbgEditorWidget1.h"
@@ -134,6 +135,8 @@ namespace BansheeEngine
 		if (layout != nullptr)
 		if (layout != nullptr)
 			EditorWidgetManager::instance().setLayout(layout);
 			EditorWidgetManager::instance().setLayout(layout);
 
 
+		SceneEditorWidget::open();
+
 		/************************************************************************/
 		/************************************************************************/
 		/* 								DEBUG CODE                      		*/
 		/* 								DEBUG CODE                      		*/
 		/************************************************************************/
 		/************************************************************************/
@@ -383,6 +386,16 @@ namespace BansheeEngine
 		return true; // TODO - DEBUG ONLY
 		return true; // TODO - DEBUG ONLY
 	}
 	}
 
 
+	bool EditorApplication::isGameViewFocused() const
+	{
+		return false; // TODO
+	}
+
+	bool EditorApplication::isSceneViewFocused() const
+	{
+		return true; // TODO
+	}
+
 	const Path& EditorApplication::getActiveProjectPath() const
 	const Path& EditorApplication::getActiveProjectPath() const
 	{
 	{
 		static Path dummyProjectPath = L"D:\\DummyBansheeProject\\";
 		static Path dummyProjectPath = L"D:\\DummyBansheeProject\\";
@@ -412,4 +425,9 @@ namespace BansheeEngine
 		FileSerializer fs;
 		FileSerializer fs;
 		fs.encode(layout.get(), layoutPath);
 		fs.encode(layout.get(), layoutPath);
 	}
 	}
+
+	EditorApplication& gEditorApplication()
+	{
+		return static_cast<EditorApplication&>(EditorApplication::instance());
+	}
 }
 }

+ 13 - 3
BansheeEditor/Source/BsEditorWidget.cpp

@@ -42,8 +42,7 @@ namespace BansheeEngine
 		if(mContent != nullptr)
 		if(mContent != nullptr)
 			mContent->setPosition(x, y);
 			mContent->setPosition(x, y);
 
 
-		if(!onMoved.empty())
-			onMoved(x, y);
+		doOnMoved(x, y);
 	}
 	}
 
 
 	void EditorWidgetBase::_setSize(UINT32 width, UINT32 height)
 	void EditorWidgetBase::_setSize(UINT32 width, UINT32 height)
@@ -54,7 +53,18 @@ namespace BansheeEngine
 		if(mContent != nullptr)
 		if(mContent != nullptr)
 			mContent->setSize(width, height);
 			mContent->setSize(width, height);
 
 
-		if(!onResized.empty())
+		doOnResized(width, height);
+	}
+
+	void EditorWidgetBase::doOnMoved(INT32 x, INT32 y)
+	{
+		if (!onMoved.empty())
+			onMoved(x, y);
+	}
+
+	void EditorWidgetBase::doOnResized(UINT32 width, UINT32 height)
+	{
+		if (!onResized.empty())
 			onResized(width, height);
 			onResized(width, height);
 	}
 	}
 
 

+ 21 - 19
BansheeEditor/Source/BsMainEditorWindow.cpp

@@ -11,6 +11,8 @@
 #include "BsGUILayout.h"
 #include "BsGUILayout.h"
 #include "BsEditorTestSuite.h"
 #include "BsEditorTestSuite.h"
 #include "BsTestOutput.h"
 #include "BsTestOutput.h"
+#include "BsVirtualInput.h"
+#include "BsSceneCameraController.h"
 
 
 // DEBUG ONLY
 // DEBUG ONLY
 #include "BsTestTextSprite.h"
 #include "BsTestTextSprite.h"
@@ -49,25 +51,25 @@ namespace BansheeEngine
 		mMenuBar->addMenuItem(L"File/Exit", nullptr);
 		mMenuBar->addMenuItem(L"File/Exit", nullptr);
 		mMenuBar->addMenuItem(L"Window/Scene", nullptr);
 		mMenuBar->addMenuItem(L"Window/Scene", nullptr);
 
 
-		// DEBUG ONLY
-
-		RenderTexturePtr sceneRenderTarget = RenderTexture::create(TEX_TYPE_2D, 800, 600);
-		sceneRenderTarget->setPriority(1);
-
-		HSceneObject sceneCameraGO = SceneObject::create("SceneCamera");
-		HCamera sceneCamera = sceneCameraGO->addComponent<Camera>(sceneRenderTarget, 0.0f, 0.0f, 1.0f, 1.0f);
-
-		sceneCamera->setPriority(1);
-		sceneCameraGO->setPosition(Vector3(0,50,1240));
-		sceneCameraGO->lookAt(Vector3(0,50,-300));
-		sceneCamera->setNearClipDistance(5);
-		sceneCamera->setAspectRatio(800.0f / 600.0f);
-
-		GameObjectHandle<DebugCamera> debugCamera = sceneCameraGO->addComponent<DebugCamera>();
-
-		GameObjectHandle<TestTextSprite> textSprite = mSceneObject->addComponent<TestTextSprite>(mCamera->getViewport().get());
-
-		textSprite->init(sceneCamera, "Testing in a new row, does this work?", sceneRenderTarget);
+		// Set up default editor input
+		auto inputConfig = VirtualInput::instance().getConfiguration();
+
+		inputConfig->registerButton(SceneCameraController::MOVE_FORWARD_BTN, BC_W);
+		inputConfig->registerButton(SceneCameraController::MOVE_BACKWARD_BTN, BC_S);
+		inputConfig->registerButton(SceneCameraController::MOVE_LEFT_BTN, BC_A);
+		inputConfig->registerButton(SceneCameraController::MOVE_RIGHT_BTN, BC_D);
+		inputConfig->registerButton(SceneCameraController::MOVE_FORWARD_BTN, BC_UP);
+		inputConfig->registerButton(SceneCameraController::MOVE_BACKWARD_BTN, BC_BACK);
+		inputConfig->registerButton(SceneCameraController::MOVE_LEFT_BTN, BC_LEFT);
+		inputConfig->registerButton(SceneCameraController::MOVE_RIGHT_BTN, BC_RIGHT);
+		inputConfig->registerButton(SceneCameraController::FAST_MOVE_BTN, BC_LSHIFT);
+		inputConfig->registerButton(SceneCameraController::ROTATE_BTN, BC_MOUSE_RIGHT);
+		inputConfig->registerAxis(SceneCameraController::HORIZONTAL_AXIS, VIRTUAL_AXIS_DESC((UINT32)InputAxis::MouseX));
+		inputConfig->registerAxis(SceneCameraController::VERTICAL_AXIS, VIRTUAL_AXIS_DESC((UINT32)InputAxis::MouseY));
+
+		//GameObjectHandle<TestTextSprite> textSprite = mSceneObject->addComponent<TestTextSprite>(mCamera->getViewport().get());
+
+		//textSprite->init(sceneCamera, "Testing in a new row, does this work?", sceneRenderTarget);
 
 
 		//DrawHelper2D::instance().drawQuad(sceneCamera, FRect(0.0f, 0.2f, 0.75f, 0.5f), Color::White, DebugDrawCoordType::Normalized, 250.0f);
 		//DrawHelper2D::instance().drawQuad(sceneCamera, FRect(0.0f, 0.2f, 0.75f, 0.5f), Color::White, DebugDrawCoordType::Normalized, 250.0f);
 		//DrawHelper2D::instance().drawQuad(sceneCamera, FRect(50.0f, 50.0f, 100.0f, 50.0f), Color::Blue, DebugDrawCoordType::Pixel, 250.0f);
 		//DrawHelper2D::instance().drawQuad(sceneCamera, FRect(50.0f, 50.0f, 100.0f, 50.0f), Color::Blue, DebugDrawCoordType::Pixel, 250.0f);

+ 116 - 0
BansheeEditor/Source/BsSceneCameraController.cpp

@@ -0,0 +1,116 @@
+#include "BsSceneCameraController.h"
+#include "BsVirtualInput.h"
+#include "BsVector3.h"
+#include "BsTime.h"
+#include "BsMath.h"
+#include "BsSceneObject.h"
+#include "BsCamera.h"
+#include "BsPlatform.h"
+#include "BsEditorApplication.h"
+
+namespace BansheeEngine
+{
+	const String SceneCameraController::MOVE_FORWARD_BTN = "SceneForward";
+	const String SceneCameraController::MOVE_LEFT_BTN = "SceneLeft";
+	const String SceneCameraController::MOVE_RIGHT_BTN = "SceneRight";
+	const String SceneCameraController::MOVE_BACKWARD_BTN = "SceneBackward";
+	const String SceneCameraController::FAST_MOVE_BTN = "SceneFastMove";
+	const String SceneCameraController::ROTATE_BTN = "SceneRotate";
+	const String SceneCameraController::HORIZONTAL_AXIS = "SceneHorizontal";
+	const String SceneCameraController::VERTICAL_AXIS = "SceneVertical";
+
+	const float SceneCameraController::START_SPEED = 40.0f;
+	const float SceneCameraController::TOP_SPEED = 130.0f;
+	const float SceneCameraController::ACCELERATION = 10.0f;
+	const float SceneCameraController::FAST_MODE_MULTIPLIER = 2.0f;
+	const float SceneCameraController::ROTATION_SPEED = 0.5f; // Degrees/pixel
+
+	SceneCameraController::SceneCameraController(const HSceneObject& parent)
+		:Component(parent), mPitch(0.0f), mYaw(0.0f), mLastButtonState(false)
+	{
+		setName("SceneCameraController");
+
+		mMoveForward = VirtualButton(MOVE_FORWARD_BTN);
+		mMoveLeft = VirtualButton(MOVE_LEFT_BTN);
+		mMoveRight = VirtualButton(MOVE_RIGHT_BTN);
+		mMoveBackward = VirtualButton(MOVE_BACKWARD_BTN);
+		mFastMove = VirtualButton(FAST_MOVE_BTN);
+		mRotate = VirtualButton(ROTATE_BTN);
+		mHorizontal = VirtualAxis(HORIZONTAL_AXIS);
+		mVertical = VirtualAxis(VERTICAL_AXIS);
+
+		mCamera = sceneObject()->getComponent<Camera>();
+		mCamera->setNearClipDistance(5);
+
+		sceneObject()->setPosition(Vector3(0, 0, 0));
+		sceneObject()->lookAt(Vector3(0, 0, -1));
+	}
+
+	void SceneCameraController::update()
+	{
+		if (!gEditorApplication().isSceneViewFocused())
+			return;
+
+		bool goingForward = gVirtualInput().isButtonHeld(mMoveForward);
+		bool goingBack = gVirtualInput().isButtonHeld(mMoveBackward);
+		bool goingLeft = gVirtualInput().isButtonHeld(mMoveLeft);
+		bool goingRight = gVirtualInput().isButtonHeld(mMoveRight);
+		bool fastMove = gVirtualInput().isButtonHeld(mFastMove);
+		bool camRotating = gVirtualInput().isButtonHeld(mRotate);
+
+		if (camRotating != mLastButtonState)
+		{
+			if (camRotating)
+				Platform::hideCursor();
+			else
+				Platform::showCursor();
+
+			mLastButtonState = camRotating;
+		}
+
+		Vector3 direction = Vector3::ZERO;
+		if (goingForward) direction += SO()->getForward();
+		if (goingBack) direction -= SO()->getForward();
+		if (goingRight) direction += SO()->getRight();
+		if (goingLeft) direction -= SO()->getRight();
+
+		if (direction.squaredLength() != 0)
+		{
+			direction.normalize();
+
+			float multiplier = 1.0f;
+			if (fastMove)
+				multiplier = FAST_MODE_MULTIPLIER;
+
+			mCurrentSpeed = Math::clamp(mCurrentSpeed + ACCELERATION * gTime().getFrameDelta(), START_SPEED, TOP_SPEED);
+			mCurrentSpeed *= multiplier;
+		}
+		else
+		{
+			mCurrentSpeed = 0.0f;
+		}
+
+		float tooSmall = std::numeric_limits<float>::epsilon();
+		if (mCurrentSpeed > tooSmall)
+		{
+			Vector3 velocity = direction * mCurrentSpeed;
+			SO()->move(velocity * gTime().getFrameDelta());
+		}
+
+		if (camRotating)
+		{
+			mYaw += Degree(gVirtualInput().getAxisValue(mHorizontal) * ROTATION_SPEED);
+			mPitch += Degree(gVirtualInput().getAxisValue(mVertical) * ROTATION_SPEED);
+
+			Quaternion yRot;
+			yRot.fromAxisAngle(Vector3::UNIT_Y, Radian(mYaw));
+
+			Quaternion xRot;
+			xRot.fromAxisAngle(yRot.xAxis(), Radian(mPitch));
+
+			Quaternion camRot = xRot * yRot;
+
+			SO()->setRotation(camRot);
+		}
+	}
+}

+ 86 - 0
BansheeEditor/Source/BsSceneEditorWidget.cpp

@@ -0,0 +1,86 @@
+#include "BsSceneEditorWidget.h"
+#include "BsEditorWindow.h"
+#include "BsGUILabel.h"
+#include "BsGUIButton.h"
+#include "BsGUIInputBox.h"
+#include "BsGUIScrollArea.h"
+#include "BsGUIArea.h"
+#include "BsGUILayout.h"
+#include "BsEditorWidgetManager.h"
+#include "BsRenderTexture.h"
+#include "BsSceneObject.h"
+#include "BsSceneCameraController.h"
+#include "BsCamera.h"
+#include "BsGUIRenderTexture.h"
+
+namespace BansheeEngine
+{
+	SceneEditorWidget* SceneEditorWidget::Instance = nullptr;
+
+	SceneEditorWidget::SceneEditorWidget(const ConstructPrivately& dummy, EditorWidgetContainer& parentContainer)
+		:EditorWidget<SceneEditorWidget>(HString(L"SceneEditorWidget"), parentContainer)
+	{
+		GUILayout& layout = mContent->getLayout();
+		
+		mSceneRenderTarget = RenderTexture::create(TEX_TYPE_2D, getWidth(), getHeight());
+		mSceneRenderTarget->setPriority(1);
+
+		HSceneObject sceneCameraGO = SceneObject::create("SceneCamera");
+		mCamera = sceneCameraGO->addComponent<Camera>(mSceneRenderTarget, 0.0f, 0.0f, 1.0f, 1.0f);
+
+		sceneCameraGO->setPosition(Vector3(0, 0, 0));
+		sceneCameraGO->lookAt(Vector3(0, 0, -3));
+
+		mCamera->setPriority(1);
+		mCamera->setNearClipDistance(5);
+		mCamera->setAspectRatio(getWidth() / (float)getHeight());
+
+		sceneCameraGO->addComponent<SceneCameraController>();
+
+		layout.addElement(GUIRenderTexture::create(mSceneRenderTarget));
+	}
+
+	SceneEditorWidget::~SceneEditorWidget()
+	{
+
+	}
+
+	void SceneEditorWidget::_update()
+	{
+
+	}
+
+	void SceneEditorWidget::doOnResized(UINT32 width, UINT32 height)
+	{
+		EditorWidget::doOnResized(width, height);
+
+		// TODO - Need to resize render texture as the widget resizes
+
+		//mSceneRenderTarget->set
+		//mCamera->setAspectRatio(getWidth() / getHeight());
+	}
+
+	SceneEditorWidget* SceneEditorWidget::instance()
+	{
+		return Instance;
+	}
+
+	SceneEditorWidget* SceneEditorWidget::open()
+	{
+		return static_cast<SceneEditorWidget*>(EditorWidgetManager::instance().open(getTypeName()));
+	}
+
+	void SceneEditorWidget::close()
+	{
+		if (Instance != nullptr)
+			EditorWidgetManager::instance().close(Instance);
+
+		Instance = nullptr;
+	}
+
+	const String& SceneEditorWidget::getTypeName()
+	{
+		static String name = "SceneEditorWidget";
+		return name;
+	}
+}

+ 9 - 8
BansheeEngine.sln

@@ -1,7 +1,7 @@
 
 
 Microsoft Visual Studio Solution File, Format Version 12.00
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 2013
 # Visual Studio 2013
-VisualStudioVersion = 12.0.21005.1
+VisualStudioVersion = 12.0.30723.0
 MinimumVisualStudioVersion = 10.0.40219.1
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Notes", "_Notes", "{1D081E5A-615A-4C06-B2DF-0D8D9390DE02}"
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Notes", "_Notes", "{1D081E5A-615A-4C06-B2DF-0D8D9390DE02}"
 	ProjectSection(SolutionItems) = preProject
 	ProjectSection(SolutionItems) = preProject
@@ -16,6 +16,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Notes", "_Notes", "{1D081E
 		Polish.txt = Polish.txt
 		Polish.txt = Polish.txt
 		ProjectLibrary.txt = ProjectLibrary.txt
 		ProjectLibrary.txt = ProjectLibrary.txt
 		ResourceBundles.txt = ResourceBundles.txt
 		ResourceBundles.txt = ResourceBundles.txt
+		SceneView.txt = SceneView.txt
 		SpriteTexture.txt = SpriteTexture.txt
 		SpriteTexture.txt = SpriteTexture.txt
 		TODO.txt = TODO.txt
 		TODO.txt = TODO.txt
 		TODODoc.txt = TODODoc.txt
 		TODODoc.txt = TODODoc.txt
@@ -631,8 +632,13 @@ Global
 		HideSolutionNode = FALSE
 		HideSolutionNode = FALSE
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(NestedProjects) = preSolution
 	GlobalSection(NestedProjects) = preSolution
-		{4259680D-8A9B-4C17-B75B-CA29482AB299} = {1D081E5A-615A-4C06-B2DF-0D8D9390DE02}
+		{876EB338-489E-4727-84DA-8CBBF0DA5B5E} = {363078CE-900A-4B1B-A408-601025EA0A23}
+		{ABC62E37-342E-4345-A374-E37CA06C036E} = {363078CE-900A-4B1B-A408-601025EA0A23}
 		{4F05EF0A-B8DE-424B-8848-6ECEE9D99912} = {32E4E2B7-1B4D-4B06-AD87-57CEE00BC247}
 		{4F05EF0A-B8DE-424B-8848-6ECEE9D99912} = {32E4E2B7-1B4D-4B06-AD87-57CEE00BC247}
+		{A4865386-A95B-41BE-B016-4674F6B4272E} = {363078CE-900A-4B1B-A408-601025EA0A23}
+		{2DA6824A-4D3A-4B59-8AE9-85D3C14074A3} = {363078CE-900A-4B1B-A408-601025EA0A23}
+		{11D4409F-3BF0-4074-B809-B959FB45B1B1} = {7E093EC6-24C6-4832-9482-2D8C0551D3B6}
+		{4E02D5FE-5A98-49C1-93FD-DF841A9FA3DB} = {7E093EC6-24C6-4832-9482-2D8C0551D3B6}
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521} = {32E4E2B7-1B4D-4B06-AD87-57CEE00BC247}
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521} = {32E4E2B7-1B4D-4B06-AD87-57CEE00BC247}
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC} = {32E4E2B7-1B4D-4B06-AD87-57CEE00BC247}
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC} = {32E4E2B7-1B4D-4B06-AD87-57CEE00BC247}
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1} = {32E4E2B7-1B4D-4B06-AD87-57CEE00BC247}
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1} = {32E4E2B7-1B4D-4B06-AD87-57CEE00BC247}
@@ -642,12 +648,7 @@ Global
 		{7F449698-73DF-4203-9F31-0877DBF01695} = {32E4E2B7-1B4D-4B06-AD87-57CEE00BC247}
 		{7F449698-73DF-4203-9F31-0877DBF01695} = {32E4E2B7-1B4D-4B06-AD87-57CEE00BC247}
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A} = {32E4E2B7-1B4D-4B06-AD87-57CEE00BC247}
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A} = {32E4E2B7-1B4D-4B06-AD87-57CEE00BC247}
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B} = {32E4E2B7-1B4D-4B06-AD87-57CEE00BC247}
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B} = {32E4E2B7-1B4D-4B06-AD87-57CEE00BC247}
-		{ABC62E37-342E-4345-A374-E37CA06C036E} = {363078CE-900A-4B1B-A408-601025EA0A23}
-		{A4865386-A95B-41BE-B016-4674F6B4272E} = {363078CE-900A-4B1B-A408-601025EA0A23}
-		{2DA6824A-4D3A-4B59-8AE9-85D3C14074A3} = {363078CE-900A-4B1B-A408-601025EA0A23}
-		{876EB338-489E-4727-84DA-8CBBF0DA5B5E} = {363078CE-900A-4B1B-A408-601025EA0A23}
-		{4E02D5FE-5A98-49C1-93FD-DF841A9FA3DB} = {7E093EC6-24C6-4832-9482-2D8C0551D3B6}
-		{11D4409F-3BF0-4074-B809-B959FB45B1B1} = {7E093EC6-24C6-4832-9482-2D8C0551D3B6}
+		{4259680D-8A9B-4C17-B75B-CA29482AB299} = {1D081E5A-615A-4C06-B2DF-0D8D9390DE02}
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(SubversionScc) = preSolution
 	GlobalSection(SubversionScc) = preSolution
 		Svn-Managed = True
 		Svn-Managed = True

+ 1 - 6
Inspector.txt

@@ -2,19 +2,13 @@ Test custom resources:
  - Can I load them? (Will likely need ProjectLIbrary::load)
  - Can I load them? (Will likely need ProjectLIbrary::load)
  - Can I reference them in Component and will the reference be held after after cloning?
  - Can I reference them in Component and will the reference be held after after cloning?
 
 
-ARRAY TODO:
- - Need a GUIFoldout that doesn't have BG and is just a single button.
-
 TODO:
 TODO:
  - Add SceneObject fields (Name, Position, Rotation, Scale and optional switches between world/local)
  - Add SceneObject fields (Name, Position, Rotation, Scale and optional switches between world/local)
  - Properly hook up UndoRedo, for both in-field and object-wide changes
  - Properly hook up UndoRedo, for both in-field and object-wide changes
    - How do I track Ctrl+Z and Ctrl+Y keys? And in general how do I distinguish when I send
    - How do I track Ctrl+Z and Ctrl+Y keys? And in general how do I distinguish when I send
      input to the game and when to the editor.
      input to the game and when to the editor.
  - GUIColor needs to be hooked up to a window that actually changes its value.
  - GUIColor needs to be hooked up to a window that actually changes its value.
- - Inspector scrolling
 
 
-KEEP IN MIND:
- - Clicking on an object/resource in inspector should ping it in their window
 
 
 
 
 
 
@@ -26,6 +20,7 @@ Polish (SECOND PASS - LATER):
  - Add icons to array clone/delete/up/down buttons
  - Add icons to array clone/delete/up/down buttons
  - Add support for multi-rank array inspector
  - Add support for multi-rank array inspector
  - Add tabbing between fields
  - Add tabbing between fields
+ - Clicking on an object/resource in inspector should ping it in their window
 
 
 ----------------------------------------------
 ----------------------------------------------
 
 

+ 10 - 0
SceneView.txt

@@ -0,0 +1,10 @@
+Resizing SceneView requires a resize() method on RenderTexture
+
+Picking
+ - Create core thread class that accepts a screen coordinate and a camera and it determines object at its position
+ - System then renders all visible objects with diferent colors 
+ - Image then needs to be read back to determine what was hit
+ - Result is returned via async op
+ - Needs to support multi-select where I draw a rectangle on screen
+ - NOTE: I will also need to render gizmos which I assume will all be within a single buffer. This might require special care since normally I can color each buffer with a different color, which won't work in this case.
+     - Similar issue might happen with particles and other systems