Jelajahi Sumber

Merge remote-tracking branch '1vanK/EditorNewNodePosition'

Lasse Öörni 10 tahun lalu
induk
melakukan
e59ce6d917

+ 2 - 0
bin/Data/Scripts/Editor.as

@@ -178,6 +178,7 @@ void LoadConfig()
 
     if (!objectElem.isNull)
     {
+        if (objectElem.HasAttribute("newnodemode")) newNodeMode = objectElem.GetInt("newnodemode");
         if (objectElem.HasAttribute("newnodedistance")) newNodeDistance = objectElem.GetFloat("newnodedistance");
         if (objectElem.HasAttribute("movestep")) moveStep = objectElem.GetFloat("movestep");
         if (objectElem.HasAttribute("rotatestep")) rotateStep = objectElem.GetFloat("rotatestep");
@@ -302,6 +303,7 @@ void SaveConfig()
     cameraElem.SetUInt("viewportmode", viewportMode);
     cameraElem.SetInt("mouseorbitmode", mouseOrbitMode);
 
+    objectElem.SetInt("newnodemode", newNodeMode);
     objectElem.SetFloat("newnodedistance", newNodeDistance);
     objectElem.SetFloat("movestep", moveStep);
     objectElem.SetFloat("rotatestep", rotateStep);

+ 10 - 0
bin/Data/Scripts/Editor/EditorSettings.as

@@ -43,6 +43,9 @@ void UpdateEditorSettingsDialog()
     DropDownList@ mouseOrbitEdit = settingsDialog.GetChild("MouseOrbitEdit", true);
     mouseOrbitEdit.selection = mouseOrbitMode;
 
+    DropDownList@ newNodeModeEdit = settingsDialog.GetChild("NewNodeModeEdit", true);
+    newNodeModeEdit.selection = newNodeMode;
+	
     LineEdit@ distanceEdit = settingsDialog.GetChild("DistanceEdit", true);
     distanceEdit.text = String(newNodeDistance);
 
@@ -115,6 +118,7 @@ void UpdateEditorSettingsDialog()
         SubscribeToEvent(limitRotationToggle, "Toggled", "EditLimitRotation");
         SubscribeToEvent(mouseWheelCameraPositionToggle, "Toggled", "EditMouseWheelCameraPosition");
         SubscribeToEvent(mouseOrbitEdit, "ItemSelected", "EditMouseOrbitMode");
+        SubscribeToEvent(newNodeModeEdit, "ItemSelected", "EditNewNodeMode");
         SubscribeToEvent(distanceEdit, "TextChanged", "EditNewNodeDistance");
         SubscribeToEvent(distanceEdit, "TextFinished", "EditNewNodeDistance");
         SubscribeToEvent(moveStepEdit, "TextChanged", "EditMoveStep");
@@ -213,6 +217,12 @@ void EditMouseOrbitMode(StringHash eventType, VariantMap& eventData)
     mouseOrbitMode = edit.selection;
 }
 
+void EditNewNodeMode(StringHash eventType, VariantMap& eventData)
+{
+    DropDownList@ edit = eventData["Element"].GetPtr();
+    newNodeMode = edit.selection;
+}
+
 void EditNewNodeDistance(StringHash eventType, VariantMap& eventData)
 {
     LineEdit@ edit = eventData["Element"].GetPtr();

+ 19 - 1
bin/Data/Scripts/Editor/EditorView.as

@@ -340,7 +340,6 @@ float viewFov = 45.0;
 float cameraBaseSpeed = 10;
 float cameraBaseRotationSpeed = 0.2;
 float cameraShiftSpeedMultiplier = 5;
-float newNodeDistance = 20;
 float moveStep = 0.5;
 float rotateStep = 5;
 float scaleStep = 0.1;
@@ -364,6 +363,16 @@ enum MouseOrbitMode
 bool toggledMouseLock = false;
 int mouseOrbitMode = ORBIT_RELATIVE;
 
+enum NewNodeMode
+{
+    NEW_NODE_CAMERA_DIST = 0,
+    NEW_NODE_IN_CENTER,
+    NEW_NODE_RAYCAST
+}
+
+float newNodeDistance = 20;
+int newNodeMode = NEW_NODE_CAMERA_DIST;
+
 bool showGrid = true;
 bool grid2DMode = false;
 uint gridSize = 16;
@@ -1638,6 +1647,15 @@ void ViewRaycast(bool mouseClick)
 
 Vector3 GetNewNodePosition()
 {
+    if (newNodeMode == NEW_NODE_IN_CENTER)
+        return Vector3(0, 0, 0);
+    if (newNodeMode == NEW_NODE_RAYCAST)
+    {
+        Ray cameraRay = camera.GetScreenRay(0.5, 0.5);
+        Vector3 position, normal;
+        if (GetSpawnPosition(cameraRay, camera.farClip, position, normal, 0, false))
+            return position;
+    }
     return cameraNode.position + cameraNode.worldRotation * Vector3(0, 0, newNodeDistance);
 }
 

+ 29 - 0
bin/Data/UI/EditorSettingsDialog.xml

@@ -114,6 +114,35 @@
                     </element>
                 </element>
                 <element type="BorderImage" style="EditorDivider" />
+                <element style="ListRow">
+                    <attribute name="Layout Spacing" value="8" />
+                    <element type="Text">
+                        <attribute name="Text" value="New node mode" />
+                    </element>
+                    <element type="DropDownList">
+                        <attribute name="Name" value="NewNodeModeEdit" />
+                        <attribute name="Min Size" value="100 0" />
+                        <attribute name="Max Size" value="100 2147483647" />
+                        <attribute name="Resize Popup" value="true" />
+                        <element type="Window" internal="true" popup="true" style="none">
+                            <element type="ListView" internal="true" style="none">
+                                <element type="BorderImage" internal="true" style="none">
+                                    <element internal="true" style="none">
+                                        <element type="Text" style="FileSelectorFilterText">
+                                            <attribute name="Text" value="Use distance" />
+                                        </element>
+                                        <element type="Text" style="FileSelectorFilterText">
+                                            <attribute name="Text" value="In center" />
+                                        </element>
+                                        <element type="Text" style="FileSelectorFilterText">
+                                            <attribute name="Text" value="Reycast" />
+                                        </element>
+                                    </element>
+                                </element>
+                            </element>
+                        </element>
+                    </element>
+                </element>
                 <element style="ListRow">
                     <attribute name="Layout Spacing" value="20" />
                     <element type="Text">