浏览代码

Conversions

Commit from Azaezel to fix the naming of inspector fields.
TypeMatrixField still messes around on first responder, we know these functions convert angAxis to eul properly and from eul to angAxis but when the data comes to TypeMatrix it changes.... weird issue is weird.
marauder2k7 2 年之前
父节点
当前提交
cbe2bd4c7b

+ 93 - 43
Engine/source/gui/editor/guiInspectorTypes.cpp

@@ -1727,13 +1727,17 @@ void GuiInspectorTypeSFXSourceName::consoleInit()
 void GuiInspectorType2DValue::constructEditControlChildren(GuiControl* retCtrl, S32 width)
 void GuiInspectorType2DValue::constructEditControlChildren(GuiControl* retCtrl, S32 width)
 {
 {
    mCtrlX = new GuiTextEditSliderCtrl();
    mCtrlX = new GuiTextEditSliderCtrl();
-   GuiControl* mLabelX = new GuiControl();
+   _registerEditControl(mCtrlX, "x");
+   mLabelX = new GuiControl();
+   _registerEditControl(mLabelX, "lx");
 
 
    mCtrlY = new GuiTextEditSliderCtrl();
    mCtrlY = new GuiTextEditSliderCtrl();
-   GuiControl* mLabelY = new GuiControl();
+   _registerEditControl(mCtrlY, "y");
+   mLabelY = new GuiControl();
+   _registerEditControl(mLabelY, "ly");
 
 
    mScriptValue = new GuiTextCtrl();
    mScriptValue = new GuiTextCtrl();
-
+   _registerEditControl(mScriptValue, "val");
 
 
    mCopyButton = new GuiBitmapButtonCtrl();
    mCopyButton = new GuiBitmapButtonCtrl();
    mCopyButton->setExtent(Point2I(15, 15));
    mCopyButton->setExtent(Point2I(15, 15));
@@ -1742,22 +1746,19 @@ void GuiInspectorType2DValue::constructEditControlChildren(GuiControl* retCtrl,
    mCopyButton->setDataField(StringTable->insert("tooltipprofile"), NULL, "GuiToolTipProfile");
    mCopyButton->setDataField(StringTable->insert("tooltipprofile"), NULL, "GuiToolTipProfile");
    mCopyButton->setDataField(StringTable->insert("hovertime"), NULL, "1000");
    mCopyButton->setDataField(StringTable->insert("hovertime"), NULL, "1000");
    mCopyButton->setDataField(StringTable->insert("tooltip"), NULL, "Copy all values for script.");
    mCopyButton->setDataField(StringTable->insert("tooltip"), NULL, "Copy all values for script.");
-   mCopyButton->registerObject();
-
-   _registerEditControl(mCtrlX);
-   _registerEditControl(mCtrlY);
+   _registerEditControl(mCopyButton, "cpy");
 
 
    mCtrlX->setDataField(StringTable->insert("profile"), NULL, "GuiInspectorTextEditProfile");
    mCtrlX->setDataField(StringTable->insert("profile"), NULL, "GuiInspectorTextEditProfile");
    mCtrlX->setDataField(StringTable->insert("tooltipprofile"), NULL, "GuiToolTipProfile");
    mCtrlX->setDataField(StringTable->insert("tooltipprofile"), NULL, "GuiToolTipProfile");
    mCtrlX->setDataField(StringTable->insert("format"), NULL, "%.4f");
    mCtrlX->setDataField(StringTable->insert("format"), NULL, "%.4f");
    mCtrlX->setDataField(StringTable->insert("range"), NULL, "-1e+03 1e+03");
    mCtrlX->setDataField(StringTable->insert("range"), NULL, "-1e+03 1e+03");
-   mCtrlX->setDataField(StringTable->insert("increment"), NULL, "0.0001");
+   mCtrlX->setDataField(StringTable->insert("increment"), NULL, "0.1");
 
 
    mCtrlY->setDataField(StringTable->insert("profile"), NULL, "GuiInspectorTextEditProfile");
    mCtrlY->setDataField(StringTable->insert("profile"), NULL, "GuiInspectorTextEditProfile");
    mCtrlY->setDataField(StringTable->insert("tooltipprofile"), NULL, "GuiToolTipProfile");
    mCtrlY->setDataField(StringTable->insert("tooltipprofile"), NULL, "GuiToolTipProfile");
    mCtrlY->setDataField(StringTable->insert("format"), NULL, "%.4f");
    mCtrlY->setDataField(StringTable->insert("format"), NULL, "%.4f");
    mCtrlY->setDataField(StringTable->insert("range"), NULL, "-1e+03 1e+03");
    mCtrlY->setDataField(StringTable->insert("range"), NULL, "-1e+03 1e+03");
-   mCtrlY->setDataField(StringTable->insert("increment"), NULL, "0.0001");
+   mCtrlY->setDataField(StringTable->insert("increment"), NULL, "0.1");
 
 
    mLabelX->setDataField(StringTable->insert("profile"), NULL, "ToolsGuiXDimensionText");
    mLabelX->setDataField(StringTable->insert("profile"), NULL, "ToolsGuiXDimensionText");
    mLabelY->setDataField(StringTable->insert("profile"), NULL, "ToolsGuiYDimensionText");
    mLabelY->setDataField(StringTable->insert("profile"), NULL, "ToolsGuiYDimensionText");
@@ -1784,19 +1785,19 @@ void GuiInspectorType2DValue::constructEditControlChildren(GuiControl* retCtrl,
    mCtrlX->setField("Validate", szBuffer);
    mCtrlX->setField("Validate", szBuffer);
    mCtrlY->setField("Validate", szBuffer);
    mCtrlY->setField("Validate", szBuffer);
 
 
-   GuiControl* mContainerX = new GuiControl();
+   mContainerX = new GuiControl();
    mContainerX->setDataField(StringTable->insert("profile"), NULL, "GuiInspectorTextEditProfile");
    mContainerX->setDataField(StringTable->insert("profile"), NULL, "GuiInspectorTextEditProfile");
    mContainerX->setExtent(Point2I(width, 18));
    mContainerX->setExtent(Point2I(width, 18));
    mContainerX->addObject(mLabelX);
    mContainerX->addObject(mLabelX);
    mContainerX->addObject(mCtrlX);
    mContainerX->addObject(mCtrlX);
-   _registerEditControl(mContainerX);
+   _registerEditControl(mContainerX, "cx");
 
 
-   GuiControl* mContainerY = new GuiControl();
+   mContainerY = new GuiControl();
    mContainerY->setDataField(StringTable->insert("profile"), NULL, "GuiInspectorTextEditProfile");
    mContainerY->setDataField(StringTable->insert("profile"), NULL, "GuiInspectorTextEditProfile");
    mContainerY->setExtent(Point2I(width, 18));
    mContainerY->setExtent(Point2I(width, 18));
    mContainerY->addObject(mLabelY);
    mContainerY->addObject(mLabelY);
    mContainerY->addObject(mCtrlY);
    mContainerY->addObject(mCtrlY);
-   _registerEditControl(mContainerY);
+   _registerEditControl(mContainerY, "cy");
 
 
    retCtrl->addObject(mContainerX);
    retCtrl->addObject(mContainerX);
    retCtrl->addObject(mContainerY);
    retCtrl->addObject(mContainerY);
@@ -1884,15 +1885,15 @@ void GuiInspectorType3DValue::constructEditControlChildren(GuiControl* retCtrl,
    Parent::constructEditControlChildren(retCtrl, width);
    Parent::constructEditControlChildren(retCtrl, width);
 
 
    mCtrlZ = new GuiTextEditSliderCtrl();
    mCtrlZ = new GuiTextEditSliderCtrl();
-   GuiControl* mLabelZ = new GuiControl();
-
-   _registerEditControl(mCtrlZ);
+   _registerEditControl(mCtrlZ, "z");
+   mLabelZ = new GuiControl();
+   _registerEditControl(mLabelZ, "lz");
 
 
    mCtrlZ->setDataField(StringTable->insert("profile"), NULL, "GuiInspectorTextEditProfile");
    mCtrlZ->setDataField(StringTable->insert("profile"), NULL, "GuiInspectorTextEditProfile");
    mCtrlZ->setDataField(StringTable->insert("tooltipprofile"), NULL, "GuiToolTipProfile");
    mCtrlZ->setDataField(StringTable->insert("tooltipprofile"), NULL, "GuiToolTipProfile");
    mCtrlZ->setDataField(StringTable->insert("format"), NULL, "%.4f");
    mCtrlZ->setDataField(StringTable->insert("format"), NULL, "%.4f");
    mCtrlZ->setDataField(StringTable->insert("range"), NULL, "-1e+03 1e+03");
    mCtrlZ->setDataField(StringTable->insert("range"), NULL, "-1e+03 1e+03");
-   mCtrlZ->setDataField(StringTable->insert("increment"), NULL, "0.0001");
+   mCtrlZ->setDataField(StringTable->insert("increment"), NULL, "0.1");
 
 
    mLabelZ->setDataField(StringTable->insert("profile"), NULL, "ToolsGuiZDimensionText");
    mLabelZ->setDataField(StringTable->insert("profile"), NULL, "ToolsGuiZDimensionText");
 
 
@@ -1916,12 +1917,12 @@ void GuiInspectorType3DValue::constructEditControlChildren(GuiControl* retCtrl,
    mCtrlY->setField("Validate", szBuffer);
    mCtrlY->setField("Validate", szBuffer);
    mCtrlZ->setField("Validate", szBuffer);
    mCtrlZ->setField("Validate", szBuffer);
 
 
-   GuiControl* mContainerZ = new GuiControl();
+   mContainerZ = new GuiControl();
    mContainerZ->setDataField(StringTable->insert("profile"), NULL, "GuiInspectorTextEditProfile");
    mContainerZ->setDataField(StringTable->insert("profile"), NULL, "GuiInspectorTextEditProfile");
    mContainerZ->setExtent(Point2I(width, 18));
    mContainerZ->setExtent(Point2I(width, 18));
    mContainerZ->addObject(mLabelZ);
    mContainerZ->addObject(mLabelZ);
    mContainerZ->addObject(mCtrlZ);
    mContainerZ->addObject(mCtrlZ);
-   _registerEditControl(mContainerZ);
+   _registerEditControl(mContainerZ, "cz");
 
 
    retCtrl->addObject(mContainerZ);
    retCtrl->addObject(mContainerZ);
    //retCtrl->addObject(mScriptValue);
    //retCtrl->addObject(mScriptValue);
@@ -2185,24 +2186,28 @@ GuiControl* GuiInspectorTypeMatrixRotation::constructEditControl()
    mCaptionLabel->registerObject();
    mCaptionLabel->registerObject();
    mCaptionLabel->setControlProfile(mProfile);
    mCaptionLabel->setControlProfile(mProfile);
    mCaptionLabel->setText(mCaption);
    mCaptionLabel->setText(mCaption);
+   _registerEditControl(mCaptionLabel, "cl");
    addObject(mCaptionLabel);
    addObject(mCaptionLabel);
 
 
    mDimensionLabelX = new GuiTextCtrl();
    mDimensionLabelX = new GuiTextCtrl();
    mDimensionLabelX->registerObject();
    mDimensionLabelX->registerObject();
    mDimensionLabelX->setControlProfile(mProfile);
    mDimensionLabelX->setControlProfile(mProfile);
-   mDimensionLabelX->setText("Ptich");
+   mDimensionLabelX->setText("Pitch");
+   _registerEditControl(mDimensionLabelX, "pl");
    addObject(mDimensionLabelX);
    addObject(mDimensionLabelX);
 
 
    mDimensionLabelY = new GuiTextCtrl();
    mDimensionLabelY = new GuiTextCtrl();
    mDimensionLabelY->registerObject();
    mDimensionLabelY->registerObject();
    mDimensionLabelY->setControlProfile(mProfile);
    mDimensionLabelY->setControlProfile(mProfile);
    mDimensionLabelY->setText("Roll");
    mDimensionLabelY->setText("Roll");
+   _registerEditControl(mDimensionLabelY, "rl");
    addObject(mDimensionLabelY);
    addObject(mDimensionLabelY);
 
 
    mDimensionLabelZ = new GuiTextCtrl();
    mDimensionLabelZ = new GuiTextCtrl();
    mDimensionLabelZ->registerObject();
    mDimensionLabelZ->registerObject();
    mDimensionLabelZ->setControlProfile(mProfile);
    mDimensionLabelZ->setControlProfile(mProfile);
    mDimensionLabelZ->setText("Yaw");
    mDimensionLabelZ->setText("Yaw");
+   _registerEditControl(mDimensionLabelZ, "yl");
    addObject(mDimensionLabelZ);
    addObject(mDimensionLabelZ);
 
 
    retCtrl->setDataField(StringTable->insert("profile"), NULL, "ToolsGuiDefaultProfile");
    retCtrl->setDataField(StringTable->insert("profile"), NULL, "ToolsGuiDefaultProfile");
@@ -2215,18 +2220,7 @@ GuiControl* GuiInspectorTypeMatrixRotation::constructEditControl()
 
 
    constructEditControlChildren(retCtrl, getWidth());
    constructEditControlChildren(retCtrl, getWidth());
 
 
-   retCtrl->addObject(mScriptValue);
-
-   char szBuffer[512];
-   dSprintf(szBuffer, 512, "%d.apply(%d.getText());", getId(), mScriptValue->getId());
-
-   mCtrlX->setField("AltCommand", szBuffer);
-   mCtrlY->setField("AltCommand", szBuffer);
-   mCtrlZ->setField("AltCommand", szBuffer);
-
-   mCtrlX->setField("Validate", szBuffer);
-   mCtrlY->setField("Validate", szBuffer);
-   mCtrlZ->setField("Validate", szBuffer);
+   //retCtrl->addObject(mScriptValue);
 
 
    mUseHeightOverride = true;
    mUseHeightOverride = true;
    mHeightOverride = retCtrl->getHeight();
    mHeightOverride = retCtrl->getHeight();
@@ -2234,37 +2228,68 @@ GuiControl* GuiInspectorTypeMatrixRotation::constructEditControl()
    return retCtrl;
    return retCtrl;
 }
 }
 
 
+void GuiInspectorTypeMatrixRotation::constructEditControlChildren(GuiControl* retCtrl, S32 width)
+{
+   Parent::constructEditControlChildren(retCtrl, width);
+
+   if (!mScriptValue)
+   {
+      mScriptValue = new GuiTextEditCtrl();
+      // Don't forget to register ourselves
+      _registerEditControl(mScriptValue, "value");
+   }
+   U32 svID = mScriptValue->getId();
+   retCtrl->addObject(mScriptValue);
+
+   String angleInput = String::ToString("%d.applyRotation(mEulDegToAng(%d.getText() SPC %d.getText() SPC %d.getText()));", getId(), mCtrlX->getId(), mCtrlY->getId(), mCtrlZ->getId());
+   mScriptValue->setField("AltCommand", angleInput.c_str());
+   mScriptValue->setField("Validate", angleInput.c_str());
+
+   mCtrlX->setField("AltCommand", angleInput.c_str());
+   mCtrlX->setField("Validate", angleInput.c_str());
+   mCtrlX->setDataField(StringTable->insert("format"), NULL, "%g");
+
+   mCtrlY->setField("AltCommand", angleInput.c_str());
+   mCtrlY->setField("Validate", angleInput.c_str());
+   mCtrlY->setDataField(StringTable->insert("format"), NULL, "%g");
+
+   mCtrlZ->setField("AltCommand", angleInput.c_str());
+   mCtrlZ->setField("Validate", angleInput.c_str());
+   mCtrlZ->setDataField(StringTable->insert("format"), NULL, "%g");
+}
+
 void GuiInspectorTypeMatrixRotation::updateValue()
 void GuiInspectorTypeMatrixRotation::updateValue()
 {
 {
    if (mField)
    if (mField)
    {
    {
-      Parent::updateValue();
+      Update::updateValue();
       const char* data = getData();
       const char* data = getData();
-      if (!data)
-         data = "";
+
+      angAx.set(Point3F(dAtof(StringUnit::getUnit(data, 0, " \t\n")),
+         dAtof(StringUnit::getUnit(data, 1, " \t\n")),
+         dAtof(StringUnit::getUnit(data, 2, " \t\n"))),
+         dAtof(StringUnit::getUnit(data, 3, " \t\n")));
+
+      EulerF euler = mAngToEul(angAx);
+
       U32 elementCount = StringUnit::getUnitCount(data, " ");
       U32 elementCount = StringUnit::getUnitCount(data, " ");
 
 
       if (elementCount > 0)
       if (elementCount > 0)
       {
       {
-         F32 yaw = dAtof(StringUnit::getUnit(data, 0, " \t\n")) * dAtof(StringUnit::getUnit(data, 3, " \t\n"));
          char szBuffer[64];
          char szBuffer[64];
-         dSprintf(szBuffer, 64, "%.2f", yaw);
+         dSprintf(szBuffer, 64, "%g", euler.x);
          mCtrlX->setText(szBuffer);
          mCtrlX->setText(szBuffer);
       }
       }
-
       if (elementCount > 1)
       if (elementCount > 1)
       {
       {
-         F32 pitch = dAtof(StringUnit::getUnit(data, 1, " \t\n")) * dAtof(StringUnit::getUnit(data, 3, " \t\n"));
          char szBuffer[64];
          char szBuffer[64];
-         dSprintf(szBuffer, 64, "%.2f", pitch);
+         dSprintf(szBuffer, 64, "%g", euler.y);
          mCtrlY->setText(szBuffer);
          mCtrlY->setText(szBuffer);
       }
       }
-
       if (elementCount > 2)
       if (elementCount > 2)
       {
       {
-         F32 roll = dAtof(StringUnit::getUnit(data, 2, " \t\n")) * dAtof(StringUnit::getUnit(data, 3, " \t\n"));
          char szBuffer[64];
          char szBuffer[64];
-         dSprintf(szBuffer, 64, "%.2f", roll);
+         dSprintf(szBuffer, 64, "%g", euler.z);
          mCtrlZ->setText(szBuffer);
          mCtrlZ->setText(szBuffer);
       }
       }
 
 
@@ -2284,6 +2309,7 @@ bool GuiInspectorTypeMatrixRotation::resize(const Point2I& newPosition, const Po
    {
    {
       return updateRects();
       return updateRects();
    }
    }
+   return false;
 }
 }
 
 
 bool GuiInspectorTypeMatrixRotation::updateRects()
 bool GuiInspectorTypeMatrixRotation::updateRects()
@@ -2310,3 +2336,27 @@ bool GuiInspectorTypeMatrixRotation::updateRects()
 
 
    return true;
    return true;
 }
 }
+
+void GuiInspectorTypeMatrixRotation::updateAng(AngAxisF newAngAx)
+{
+   angAx = newAngAx;
+}
+
+void GuiInspectorTypeMatrixRotation::updateData()
+{
+   StringTableEntry data = getValue();
+   setData(data);
+}
+
+StringTableEntry GuiInspectorTypeMatrixRotation::getValue()
+{
+   String angBuffer = String::ToString("%g %g %g %g", angAx.axis.x, angAx.axis.y, angAx.axis.z, angAx.angle);
+   return StringTable->insert(angBuffer.c_str());
+}
+
+DefineEngineMethod(GuiInspectorTypeMatrixRotation, applyRotation, void, (AngAxisF angAx), , "")
+{
+   object->updateAng(angAx);
+   object->updateData();
+}
+

+ 17 - 3
Engine/source/gui/editor/guiInspectorTypes.h

@@ -590,7 +590,11 @@ private:
    typedef GuiInspectorField Parent;
    typedef GuiInspectorField Parent;
 protected:
 protected:
    GuiTextEditSliderCtrl* mCtrlX;
    GuiTextEditSliderCtrl* mCtrlX;
+   GuiControl* mLabelX;
+   GuiControl* mContainerX;
    GuiTextEditSliderCtrl* mCtrlY;
    GuiTextEditSliderCtrl* mCtrlY;
+   GuiControl* mLabelY;
+   GuiControl* mContainerY;
    GuiTextCtrl* mScriptValue;
    GuiTextCtrl* mScriptValue;
 
 
 public:
 public:
@@ -615,6 +619,8 @@ private:
    typedef GuiInspectorType2DValue Parent;
    typedef GuiInspectorType2DValue Parent;
 protected:
 protected:
    GuiTextEditSliderCtrl* mCtrlZ;
    GuiTextEditSliderCtrl* mCtrlZ;
+   GuiControl* mLabelZ;
+   GuiControl* mContainerZ;
 
 
 public:
 public:
    GuiTextCtrl* mDimensionLabelZ;
    GuiTextCtrl* mDimensionLabelZ;
@@ -652,7 +658,7 @@ public:
 class GuiInspectorTypePoint3F : public GuiInspectorType3DValue
 class GuiInspectorTypePoint3F : public GuiInspectorType3DValue
 {
 {
 private:
 private:
-   typedef GuiInspectorField Parent;
+   typedef GuiInspectorType3DValue Parent;
 public:
 public:
    DECLARE_CONOBJECT(GuiInspectorTypePoint3F);
    DECLARE_CONOBJECT(GuiInspectorTypePoint3F);
    static void consoleInit();
    static void consoleInit();
@@ -666,14 +672,22 @@ public:
 class GuiInspectorTypeMatrixRotation : public GuiInspectorType3DValue
 class GuiInspectorTypeMatrixRotation : public GuiInspectorType3DValue
 {
 {
 private:
 private:
-   typedef GuiInspectorField Parent;
+   typedef GuiInspectorType3DValue Parent;
+   typedef GuiInspectorField Update;
 public:
 public:
+   AngAxisF angAx;
+   EulerF eulAng;
    DECLARE_CONOBJECT(GuiInspectorTypeMatrixRotation);
    DECLARE_CONOBJECT(GuiInspectorTypeMatrixRotation);
    static void consoleInit();
    static void consoleInit();
    virtual GuiControl* constructEditControl();
    virtual GuiControl* constructEditControl();
+   virtual void constructEditControlChildren(GuiControl* retCtrl, S32 width);
    virtual void updateValue();
    virtual void updateValue();
    virtual bool resize(const Point2I& newPosition, const Point2I& newExtent);
    virtual bool resize(const Point2I& newPosition, const Point2I& newExtent);
    virtual bool updateRects();
    virtual bool updateRects();
-};
 
 
+   void updateAng(AngAxisF newAngAx);
+
+   virtual void updateData();
+   virtual StringTableEntry getValue();
+};
 #endif // _GUI_INSPECTOR_TYPES_H_
 #endif // _GUI_INSPECTOR_TYPES_H_

+ 7 - 4
Engine/source/gui/editor/inspector/field.cpp

@@ -673,13 +673,16 @@ void GuiInspectorField::_executeSelectedCallback()
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
 
-void GuiInspectorField::_registerEditControl( GuiControl *ctrl )
+void GuiInspectorField::_registerEditControl(GuiControl* ctrl, StringTableEntry suffix)
 {
 {
+   if (ctrl->isProperlyAdded()) return;
+   ctrl->setInternalName(suffix);
+
    char szName[512];
    char szName[512];
-   if(mInspector->getInspectObject() != nullptr)
-      dSprintf( szName, 512, "IE_%s_%d_%s_Field", ctrl->getClassName(), mInspector->getInspectObject()->getId(), mCaption);
+   if (mInspector->getInspectObject() != nullptr)
+      dSprintf(szName, 512, "IE_%s_%d_%s_%s_Field", ctrl->getClassName(), mInspector->getInspectObject()->getId(), suffix, mCaption);
    else
    else
-      dSprintf(szName, 512, "IE_%s_%s_Field", ctrl->getClassName(), mCaption);
+      dSprintf(szName, 512, "IE_%s_%s_%s_Field", ctrl->getClassName(), suffix, mCaption);
 
 
    // Register the object
    // Register the object
    ctrl->registerObject( szName );
    ctrl->registerObject( szName );

+ 1 - 1
Engine/source/gui/editor/inspector/field.h

@@ -100,7 +100,7 @@ class GuiInspectorField : public GuiControl
       //Special edit field, variable type
       //Special edit field, variable type
       StringTableEntry mVariableType;
       StringTableEntry mVariableType;
 
 
-      virtual void _registerEditControl( GuiControl *ctrl );
+      virtual void _registerEditControl(GuiControl* ctrl, StringTableEntry suffix = "");
       virtual void _executeSelectedCallback();
       virtual void _executeSelectedCallback();
       
       
       void _setFieldDocs( StringTableEntry docs );
       void _setFieldDocs( StringTableEntry docs );

+ 2 - 2
Engine/source/gui/worldEditor/editor.cpp

@@ -110,7 +110,7 @@ void EditManager::editorDisabled()
    for(SimGroupIterator itr(Sim::getRootGroup());  *itr; ++itr)
    for(SimGroupIterator itr(Sim::getRootGroup());  *itr; ++itr)
    {
    {
       SimObject *so = *itr;
       SimObject *so = *itr;
-      AssertFatal(so->isProperlyAdded() && !so->isRemoved(), "bad");
+      AssertFatal(so->isProperlyAdded() && !so->isRemoved(), avar("%s added but not removed!", so->getName()));
       so->onEditorDisable();
       so->onEditorDisable();
    }
    }
 
 
@@ -161,4 +161,4 @@ DefineEngineMethod( EditManager, editorDisabled, void, (), , "Perform the onEdit
 DefineEngineMethod( EditManager, isEditorEnabled, bool, (), , "Return the value of gEditingMission." )
 DefineEngineMethod( EditManager, isEditorEnabled, bool, (), , "Return the value of gEditingMission." )
 {
 {
    return gEditingMission;
    return gEditingMission;
-}
+}

+ 10 - 0
Engine/source/math/mConsoleFunctions.cpp

@@ -464,3 +464,13 @@ DefineEngineFunction(mDecToBin, const char*, (S32 n), , "convert decimal to a bi
    }
    }
    return ret.c_str();
    return ret.c_str();
 }
 }
+
+DefineEngineFunction(mEulDegToAng, AngAxisF, (EulerF euler), , "convert euler to degrees")
+{
+   return mEulDegToAng(euler);
+}
+
+DefineEngineFunction(mAngToEul, EulerF, (AngAxisF angAx), , "convert degrees to euler")
+{
+   return mAngToEul(angAx);
+}

+ 16 - 0
Engine/source/math/mMath.h

@@ -52,4 +52,20 @@
 #include "math/mRotation.h"
 #include "math/mRotation.h"
 #endif
 #endif
 
 
+inline AngAxisF mEulDegToAng(EulerF euler)
+{
+   MatrixF tempMat = MatrixF(euler * M_PI_F / 180.0f, Point3F::Zero);
+   AngAxisF angAx = AngAxisF(tempMat);
+   return angAx;
+}
+
+inline EulerF mAngToEul(AngAxisF angAx)
+{
+   MatrixF tempMat;
+   angAx.setMatrix(&tempMat);
+   EulerF euler = tempMat.toEuler();
+   euler *= 180.0f / M_PI_F;
+   return euler;
+}
+
 #endif //_MMATH_H_
 #endif //_MMATH_H_