Przeglądaj źródła

Merge pull request #2024 from John3/SnapToMenu

snapTo Menu
Areloch 6 lat temu
rodzic
commit
477869db57

+ 58 - 0
Templates/BaseGame/game/tools/worldEditor/scripts/menuHandlers.ed.cs

@@ -897,6 +897,64 @@ function EditorDropTypeMenu::setupDefaultState(%this)
 
 //////////////////////////////////////////////////////////////////////////
 
+function EditorSnapToMenu::onSelectItem(%this, %id, %text)
+{
+    EWorldEditor.SnapTo(%id);
+}
+
+function EditorSnapToMenu::setupDefaultState(%this)
+{
+    Parent::setupDefaultState(%this);
+}
+
+function WorldEditor::snapTo(%this, %id)
+{
+    if(%this.getSelectionSize() > 2)
+    {
+        error("Please select two objects before selecting a Snap To function.");
+        return;
+    }
+
+    %objTarget = %this.getSelectedObject(0);  
+    %objToSnap = %this.getSelectedObject(%this.getSelectionSize()-1);
+
+    switch$(%id)
+    {
+    case 0:
+        %objToSnap.setTransform(setWord(%objToSnap.getTransform(), 0, getWord(%objTarget.getTransform(), 0)));
+    case 1:
+        %objTargetXEdge = getWord(%objTarget.getTransform(), 0) + getWord(%objTarget.getObjectBox(), 0);
+        %objToSnapXEdge = %objTargetXEdge - getWord(%objToSnap.getObjectBox(), 3);
+        %objToSnap.setTransform(setWord(%objToSnap.getTransform(), 0, %objToSnapXEdge));
+    case 2:
+        %objTargetXEdge = getWord(%objTarget.getTransform(), 0) + getWord(%objTarget.getObjectBox(), 3);
+        %objToSnapXEdge = %objTargetXEdge - getWord(%objToSnap.getObjectBox(), 0);
+        %objToSnap.setTransform(setWord(%objToSnap.getTransform(), 0, %objToSnapXEdge));
+    case 3:    
+        %objToSnap.setTransform(setWord(%objToSnap.getTransform(), 1, getWord(%objTarget.getTransform(), 1)));    
+    case 4:    
+        %objTargetXEdge = getWord(%objTarget.getTransform(), 1) + getWord(%objTarget.getObjectBox(), 1);    
+        %objToSnapXEdge = %objTargetXEdge - getWord(%objToSnap.getObjectBox(), 4);    
+        %objToSnap.setTransform(setWord(%objToSnap.getTransform(), 1, %objToSnapXEdge));    
+    case 5:    
+        %objTargetXEdge = getWord(%objTarget.getTransform(), 1) + getWord(%objTarget.getObjectBox(), 4);    
+        %objToSnapXEdge = %objTargetXEdge - getWord(%objToSnap.getObjectBox(), 1);    
+        %objToSnap.setTransform(setWord(%objToSnap.getTransform(), 1, %objToSnapXEdge));    
+    case 6:    
+        %objToSnap.setTransform(setWord(%objToSnap.getTransform(), 2, getWord(%objTarget.getTransform(), 2)));    
+    case 7:    
+        %objTargetXEdge = getWord(%objTarget.getTransform(), 2) + getWord(%objTarget.getObjectBox(), 2);    
+        %objToSnapXEdge = %objTargetXEdge - getWord(%objToSnap.getObjectBox(), 5);    
+        %objToSnap.setTransform(setWord(%objToSnap.getTransform(), 2, %objToSnapXEdge));    
+    case 8:    
+        %objTargetXEdge = getWord(%objTarget.getTransform(), 2) + getWord(%objTarget.getObjectBox(), 5);    
+        %objToSnapXEdge = %objTargetXEdge - getWord(%objToSnap.getObjectBox(), 2);    
+        %objToSnap.setTransform(setWord(%objToSnap.getTransform(), 2, %objToSnapXEdge));    
+    }    
+}
+
+//////////////////////////////////////////////////////////////////////////
+
 function EditorAlignBoundsMenu::onSelectItem(%this, %id, %text)
 {
    // Have the editor align all selected objects by the selected bounds.

+ 25 - 1
Templates/BaseGame/game/tools/worldEditor/scripts/menus.ed.cs

@@ -233,8 +233,32 @@ function EditorGui::buildMenus(%this)
       Item[15] = "Manage Bookmarks..." TAB "Ctrl-Shift B" TAB "EditorGui.toggleCameraBookmarkWindow();";
       item[16] = "Jump to Bookmark" TAB %this.cameraBookmarksMenu;
    };
+
    %this.menuBar.insert(%cameraMenu);
-      
+   
+    // Snap Menu  
+    %snapToMenu = new PopupMenu()    
+    {    
+        superClass = "MenuBuilder";    
+        class = "EditorSnapToMenu";    
+
+        barTitle = "SnapTo";  
+
+        // The onSelectItem() callback for this menu re-purposes the command field    
+        // as the MenuBuilder version is not used.    
+        item[0] = "Snap 2nd Object To 1st X" TAB "" TAB "X";    
+        item[1] = "Snap 2nd Object To 1st X+" TAB "" TAB "X+";    
+        item[2] = "Snap 2nd Object To 1st X-" TAB "" TAB "X-";    
+        item[3] = "Snap 2nd Object To 1st Y" TAB "" TAB "Y";    
+        item[4] = "Snap 2nd Object to 1st Y+" TAB "" TAB "Y+";    
+        item[5] = "Snap 2nd Object to 1st Y-" TAB "" TAB "Y-";    
+        item[6] = "Snap 2nd Object To 1st Z" TAB "" TAB "Z";    
+        item[7] = "Snap 2nd Object to 1st Z+" TAB "" TAB "Z+";    
+        item[8] = "Snap 2nd Object to 1st Z-" TAB "" TAB "Z-";    
+
+    };    
+   %this.menuBar.insert(%snapToMenu);  
+
    // Editors Menu
    %editorsMenu = new PopupMenu()
    {