diff --git a/Engine/source/T3D/SceneGroup.cpp b/Engine/source/T3D/SceneGroup.cpp index 08195b976..127b5e069 100644 --- a/Engine/source/T3D/SceneGroup.cpp +++ b/Engine/source/T3D/SceneGroup.cpp @@ -164,9 +164,8 @@ void SceneGroup::setTransform(const MatrixF& mat) Parent::setTransform(mat); // Calculate the delta transformation - MatrixF deltaTransform; - oldTransform.inverse(); - deltaTransform.mul(oldTransform, getTransform()); + MatrixF deltaTransform = mat; + deltaTransform.mul(oldTransform.inverse()); if (isServerObject()) { @@ -178,11 +177,19 @@ void SceneGroup::setTransform(const MatrixF& mat) SceneObject* child = dynamic_cast(*itr); if (child) { + // Get the child's current transform MatrixF childTransform = child->getTransform(); - MatrixF relativeTransform; - relativeTransform.mul(deltaTransform, childTransform); - child->setTransform(relativeTransform); - child->setScale(childTransform.getScale()); //we don't modify scale + + // Apply the delta transformation (ignoring scale) + MatrixF updatedTransform = childTransform; + updatedTransform.mul(deltaTransform); + + // Update the child's transform + child->setTransform(updatedTransform); + + PhysicsShape* childPS = dynamic_cast(child); + if (childPS) + childPS->storeRestorePos(); } } } @@ -196,9 +203,8 @@ void SceneGroup::setRenderTransform(const MatrixF& mat) Parent::setRenderTransform(mat); // Calculate the delta transformation - MatrixF deltaTransform; - oldTransform.inverse(); - deltaTransform.mul(oldTransform, getRenderTransform()); + MatrixF deltaTransform = mat; + deltaTransform.mul(oldTransform.inverse()); // Update all child transforms for (SimSetIterator itr(this); *itr; ++itr) @@ -206,11 +212,19 @@ void SceneGroup::setRenderTransform(const MatrixF& mat) SceneObject* child = dynamic_cast(*itr); if (child) { - MatrixF childTransform = child->getRenderTransform(); - MatrixF relativeTransform; - relativeTransform.mul(deltaTransform, childTransform); - child->setRenderTransform(relativeTransform); - child->setScale(childTransform.getScale()); //we don't modify scale + // Get the child's current transform + MatrixF childTransform = child->getTransform(); + + // Apply the delta transformation (ignoring scale) + MatrixF updatedTransform = childTransform; + updatedTransform.mul(deltaTransform); + + // Update the child's transform + child->setTransform(updatedTransform); + + PhysicsShape* childPS = dynamic_cast(child); + if (childPS) + childPS->storeRestorePos(); } } } diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/interfaces/subSceneEditing.tscript b/Templates/BaseGame/game/tools/worldEditor/scripts/interfaces/subSceneEditing.tscript index 435f88b4d..70cf643ba 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/interfaces/subSceneEditing.tscript +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/interfaces/subSceneEditing.tscript @@ -1,33 +1,28 @@ function SubScene::onSelected(%this) { - echo("SELECTED SUBSCENE"); + EWToolsPaletteWindow.clearButtons(); + + //Adds a button to the pallete stack + EWToolsPaletteWindow.addButton("Select", "ToolsModule:arrow_n_image", "EWorldEditorNoneModeBtn::onClick();", "", "Select Arrow", "1"); + EWToolsPaletteWindow.addButton("Move", "ToolsModule:translate_n_image", "SubSceneMoveModeBtn::onClick();", "", "Move Selection", "2"); + EWToolsPaletteWindow.addButton("Rotate", "ToolsModule:rotate_n_image", "SubSceneRotateModeBtn::onClick();", "", "Rotate Selection", "3"); + EWToolsPaletteWindow.addButton("Scale", "ToolsModule:Scale_n_image", "EWorldEditorScaleModeBtn::onClick();", "", "Scale Selection", "4"); - %moveButton = EWToolsPaletteWindow.findButton("Move"); - %rotateButton = EWToolsPaletteWindow.findButton("Rotate"); - - %moveButton.originalCommand = %moveButton.command; - %moveButton.command = "SubSceneMoveModeBtn::onClick();"; - - %rotateButton.originalCommand = %rotateButton.command; - %rotateButton.command = "SubSceneRotateModeBtn::onClick();"; - - EWToolsPaletteWindow.addButton("SubSceneMove", "ToolsModule:translate_n_image", "SubSceneChildMoveModeBtn::onClick();", "", "Move SubScene + Children", "1"); - EWToolsPaletteWindow.addButton("SubSceneRotate", "ToolsModule:rotate_n_image", "SubSceneChildRotateModeBtn::onClick();", "", "Rotate SubScene + Children", "2"); + EWToolsPaletteWindow.addButton("SubSceneMove", "ToolsModule:translate_n_image", "SubSceneChildMoveModeBtn::onClick();", "", "Move SubScene + Children", "5"); + EWToolsPaletteWindow.addButton("SubSceneRotate", "ToolsModule:rotate_n_image", "SubSceneChildRotateModeBtn::onClick();", "", "Rotate SubScene + Children", "6"); EWToolsPaletteWindow.refresh(); } function SubScene::onUnselected(%this) { - echo("UN-SELECTED SUBSCENE"); - EWToolsPaletteWindow.removeButton("SubSceneMove"); - EWToolsPaletteWindow.removeButton("SubSceneRotate"); - - %moveButton = EWToolsPaletteWindow.findButton("Move"); - %rotateButton = EWToolsPaletteWindow.findButton("Rotate"); - - %moveButton.command = %moveButton.originalCommand; - %rotateButton.command = %rotateButton.originalCommand; + EWToolsPaletteWindow.clearButtons(); + + //Adds a button to the pallete stack + EWToolsPaletteWindow.addButton("Select", "ToolsModule:arrow_n_image", "EWorldEditorNoneModeBtn::onClick();", "", "Select Arrow", "1"); + EWToolsPaletteWindow.addButton("Move", "ToolsModule:translate_n_image", "EWorldEditorMoveModeBtn::onClick();", "", "Move Selection", "2"); + EWToolsPaletteWindow.addButton("Rotate", "ToolsModule:rotate_n_image", "EWorldEditorRotateModeBtn::onClick();", "", "Rotate Selection", "3"); + EWToolsPaletteWindow.addButton("Scale", "ToolsModule:Scale_n_image", "EWorldEditorScaleModeBtn::onClick();", "", "Scale Selection", "4"); $SubScene::transformChildren = false;