From cbe2bd4c7b6d99ce69a1760fc7c5560e604abbca Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Sun, 11 Jun 2023 21:59:03 +0100 Subject: [PATCH] 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. --- .../source/gui/editor/guiInspectorTypes.cpp | 136 ++++++++++++------ Engine/source/gui/editor/guiInspectorTypes.h | 20 ++- Engine/source/gui/editor/inspector/field.cpp | 11 +- Engine/source/gui/editor/inspector/field.h | 2 +- Engine/source/gui/worldEditor/editor.cpp | 4 +- Engine/source/math/mConsoleFunctions.cpp | 10 ++ Engine/source/math/mMath.h | 16 +++ 7 files changed, 146 insertions(+), 53 deletions(-) diff --git a/Engine/source/gui/editor/guiInspectorTypes.cpp b/Engine/source/gui/editor/guiInspectorTypes.cpp index 00ee9aacd..26a23df2b 100644 --- a/Engine/source/gui/editor/guiInspectorTypes.cpp +++ b/Engine/source/gui/editor/guiInspectorTypes.cpp @@ -1727,13 +1727,17 @@ void GuiInspectorTypeSFXSourceName::consoleInit() void GuiInspectorType2DValue::constructEditControlChildren(GuiControl* retCtrl, S32 width) { mCtrlX = new GuiTextEditSliderCtrl(); - GuiControl* mLabelX = new GuiControl(); + _registerEditControl(mCtrlX, "x"); + mLabelX = new GuiControl(); + _registerEditControl(mLabelX, "lx"); mCtrlY = new GuiTextEditSliderCtrl(); - GuiControl* mLabelY = new GuiControl(); + _registerEditControl(mCtrlY, "y"); + mLabelY = new GuiControl(); + _registerEditControl(mLabelY, "ly"); mScriptValue = new GuiTextCtrl(); - + _registerEditControl(mScriptValue, "val"); mCopyButton = new GuiBitmapButtonCtrl(); 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("hovertime"), NULL, "1000"); 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("tooltipprofile"), NULL, "GuiToolTipProfile"); mCtrlX->setDataField(StringTable->insert("format"), NULL, "%.4f"); 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("tooltipprofile"), NULL, "GuiToolTipProfile"); mCtrlY->setDataField(StringTable->insert("format"), NULL, "%.4f"); 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"); mLabelY->setDataField(StringTable->insert("profile"), NULL, "ToolsGuiYDimensionText"); @@ -1784,19 +1785,19 @@ void GuiInspectorType2DValue::constructEditControlChildren(GuiControl* retCtrl, mCtrlX->setField("Validate", szBuffer); mCtrlY->setField("Validate", szBuffer); - GuiControl* mContainerX = new GuiControl(); + mContainerX = new GuiControl(); mContainerX->setDataField(StringTable->insert("profile"), NULL, "GuiInspectorTextEditProfile"); mContainerX->setExtent(Point2I(width, 18)); mContainerX->addObject(mLabelX); mContainerX->addObject(mCtrlX); - _registerEditControl(mContainerX); + _registerEditControl(mContainerX, "cx"); - GuiControl* mContainerY = new GuiControl(); + mContainerY = new GuiControl(); mContainerY->setDataField(StringTable->insert("profile"), NULL, "GuiInspectorTextEditProfile"); mContainerY->setExtent(Point2I(width, 18)); mContainerY->addObject(mLabelY); mContainerY->addObject(mCtrlY); - _registerEditControl(mContainerY); + _registerEditControl(mContainerY, "cy"); retCtrl->addObject(mContainerX); retCtrl->addObject(mContainerY); @@ -1884,15 +1885,15 @@ void GuiInspectorType3DValue::constructEditControlChildren(GuiControl* retCtrl, Parent::constructEditControlChildren(retCtrl, width); 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("tooltipprofile"), NULL, "GuiToolTipProfile"); mCtrlZ->setDataField(StringTable->insert("format"), NULL, "%.4f"); 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"); @@ -1916,12 +1917,12 @@ void GuiInspectorType3DValue::constructEditControlChildren(GuiControl* retCtrl, mCtrlY->setField("Validate", szBuffer); mCtrlZ->setField("Validate", szBuffer); - GuiControl* mContainerZ = new GuiControl(); + mContainerZ = new GuiControl(); mContainerZ->setDataField(StringTable->insert("profile"), NULL, "GuiInspectorTextEditProfile"); mContainerZ->setExtent(Point2I(width, 18)); mContainerZ->addObject(mLabelZ); mContainerZ->addObject(mCtrlZ); - _registerEditControl(mContainerZ); + _registerEditControl(mContainerZ, "cz"); retCtrl->addObject(mContainerZ); //retCtrl->addObject(mScriptValue); @@ -2185,24 +2186,28 @@ GuiControl* GuiInspectorTypeMatrixRotation::constructEditControl() mCaptionLabel->registerObject(); mCaptionLabel->setControlProfile(mProfile); mCaptionLabel->setText(mCaption); + _registerEditControl(mCaptionLabel, "cl"); addObject(mCaptionLabel); mDimensionLabelX = new GuiTextCtrl(); mDimensionLabelX->registerObject(); mDimensionLabelX->setControlProfile(mProfile); - mDimensionLabelX->setText("Ptich"); + mDimensionLabelX->setText("Pitch"); + _registerEditControl(mDimensionLabelX, "pl"); addObject(mDimensionLabelX); mDimensionLabelY = new GuiTextCtrl(); mDimensionLabelY->registerObject(); mDimensionLabelY->setControlProfile(mProfile); mDimensionLabelY->setText("Roll"); + _registerEditControl(mDimensionLabelY, "rl"); addObject(mDimensionLabelY); mDimensionLabelZ = new GuiTextCtrl(); mDimensionLabelZ->registerObject(); mDimensionLabelZ->setControlProfile(mProfile); mDimensionLabelZ->setText("Yaw"); + _registerEditControl(mDimensionLabelZ, "yl"); addObject(mDimensionLabelZ); retCtrl->setDataField(StringTable->insert("profile"), NULL, "ToolsGuiDefaultProfile"); @@ -2215,18 +2220,7 @@ GuiControl* GuiInspectorTypeMatrixRotation::constructEditControl() 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; mHeightOverride = retCtrl->getHeight(); @@ -2234,37 +2228,68 @@ GuiControl* GuiInspectorTypeMatrixRotation::constructEditControl() 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() { if (mField) { - Parent::updateValue(); + Update::updateValue(); 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, " "); if (elementCount > 0) { - F32 yaw = dAtof(StringUnit::getUnit(data, 0, " \t\n")) * dAtof(StringUnit::getUnit(data, 3, " \t\n")); char szBuffer[64]; - dSprintf(szBuffer, 64, "%.2f", yaw); + dSprintf(szBuffer, 64, "%g", euler.x); mCtrlX->setText(szBuffer); } - if (elementCount > 1) { - F32 pitch = dAtof(StringUnit::getUnit(data, 1, " \t\n")) * dAtof(StringUnit::getUnit(data, 3, " \t\n")); char szBuffer[64]; - dSprintf(szBuffer, 64, "%.2f", pitch); + dSprintf(szBuffer, 64, "%g", euler.y); mCtrlY->setText(szBuffer); } - if (elementCount > 2) { - F32 roll = dAtof(StringUnit::getUnit(data, 2, " \t\n")) * dAtof(StringUnit::getUnit(data, 3, " \t\n")); char szBuffer[64]; - dSprintf(szBuffer, 64, "%.2f", roll); + dSprintf(szBuffer, 64, "%g", euler.z); mCtrlZ->setText(szBuffer); } @@ -2284,6 +2309,7 @@ bool GuiInspectorTypeMatrixRotation::resize(const Point2I& newPosition, const Po { return updateRects(); } + return false; } bool GuiInspectorTypeMatrixRotation::updateRects() @@ -2310,3 +2336,27 @@ bool GuiInspectorTypeMatrixRotation::updateRects() 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(); +} + diff --git a/Engine/source/gui/editor/guiInspectorTypes.h b/Engine/source/gui/editor/guiInspectorTypes.h index 27516882a..62ccfd066 100644 --- a/Engine/source/gui/editor/guiInspectorTypes.h +++ b/Engine/source/gui/editor/guiInspectorTypes.h @@ -590,7 +590,11 @@ private: typedef GuiInspectorField Parent; protected: GuiTextEditSliderCtrl* mCtrlX; + GuiControl* mLabelX; + GuiControl* mContainerX; GuiTextEditSliderCtrl* mCtrlY; + GuiControl* mLabelY; + GuiControl* mContainerY; GuiTextCtrl* mScriptValue; public: @@ -615,6 +619,8 @@ private: typedef GuiInspectorType2DValue Parent; protected: GuiTextEditSliderCtrl* mCtrlZ; + GuiControl* mLabelZ; + GuiControl* mContainerZ; public: GuiTextCtrl* mDimensionLabelZ; @@ -652,7 +658,7 @@ public: class GuiInspectorTypePoint3F : public GuiInspectorType3DValue { private: - typedef GuiInspectorField Parent; + typedef GuiInspectorType3DValue Parent; public: DECLARE_CONOBJECT(GuiInspectorTypePoint3F); static void consoleInit(); @@ -666,14 +672,22 @@ public: class GuiInspectorTypeMatrixRotation : public GuiInspectorType3DValue { private: - typedef GuiInspectorField Parent; + typedef GuiInspectorType3DValue Parent; + typedef GuiInspectorField Update; public: + AngAxisF angAx; + EulerF eulAng; DECLARE_CONOBJECT(GuiInspectorTypeMatrixRotation); static void consoleInit(); virtual GuiControl* constructEditControl(); + virtual void constructEditControlChildren(GuiControl* retCtrl, S32 width); virtual void updateValue(); virtual bool resize(const Point2I& newPosition, const Point2I& newExtent); virtual bool updateRects(); -}; + void updateAng(AngAxisF newAngAx); + + virtual void updateData(); + virtual StringTableEntry getValue(); +}; #endif // _GUI_INSPECTOR_TYPES_H_ diff --git a/Engine/source/gui/editor/inspector/field.cpp b/Engine/source/gui/editor/inspector/field.cpp index b5b0f7d65..b5f0827fd 100644 --- a/Engine/source/gui/editor/inspector/field.cpp +++ b/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]; - 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 - 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 ctrl->registerObject( szName ); diff --git a/Engine/source/gui/editor/inspector/field.h b/Engine/source/gui/editor/inspector/field.h index 7ee5e1d80..67412cd44 100644 --- a/Engine/source/gui/editor/inspector/field.h +++ b/Engine/source/gui/editor/inspector/field.h @@ -100,7 +100,7 @@ class GuiInspectorField : public GuiControl //Special edit field, variable type StringTableEntry mVariableType; - virtual void _registerEditControl( GuiControl *ctrl ); + virtual void _registerEditControl(GuiControl* ctrl, StringTableEntry suffix = ""); virtual void _executeSelectedCallback(); void _setFieldDocs( StringTableEntry docs ); diff --git a/Engine/source/gui/worldEditor/editor.cpp b/Engine/source/gui/worldEditor/editor.cpp index c60127540..11558f926 100644 --- a/Engine/source/gui/worldEditor/editor.cpp +++ b/Engine/source/gui/worldEditor/editor.cpp @@ -110,7 +110,7 @@ void EditManager::editorDisabled() for(SimGroupIterator itr(Sim::getRootGroup()); *itr; ++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(); } @@ -161,4 +161,4 @@ DefineEngineMethod( EditManager, editorDisabled, void, (), , "Perform the onEdit DefineEngineMethod( EditManager, isEditorEnabled, bool, (), , "Return the value of gEditingMission." ) { return gEditingMission; -} \ No newline at end of file +} diff --git a/Engine/source/math/mConsoleFunctions.cpp b/Engine/source/math/mConsoleFunctions.cpp index 0abe94dbe..ef0e14445 100644 --- a/Engine/source/math/mConsoleFunctions.cpp +++ b/Engine/source/math/mConsoleFunctions.cpp @@ -464,3 +464,13 @@ DefineEngineFunction(mDecToBin, const char*, (S32 n), , "convert decimal to a bi } 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); +} diff --git a/Engine/source/math/mMath.h b/Engine/source/math/mMath.h index 4710f6bf0..eb816bffe 100644 --- a/Engine/source/math/mMath.h +++ b/Engine/source/math/mMath.h @@ -52,4 +52,20 @@ #include "math/mRotation.h" #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_