diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/menuHandlers.ed.cs b/Templates/BaseGame/game/tools/worldEditor/scripts/menuHandlers.ed.cs index c6ca23e46..0f9f38852 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/menuHandlers.ed.cs +++ b/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. diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/menus.ed.cs b/Templates/BaseGame/game/tools/worldEditor/scripts/menus.ed.cs index 69ed628c9..57338ba1f 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/menus.ed.cs +++ b/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() {