Fixed empty cluster UI appearing in joints component mode. (#5547)

Happens if 'limits' or 'breakable' settings are off on the joint when entering component mode.

Signed-off-by: amzn-sean <75276488+amzn-sean@users.noreply.github.com>
monroegm-disable-blank-issue-2
amzn-sean 4 years ago committed by GitHub
parent a5adf33427
commit 7da0913900
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -307,7 +307,16 @@ namespace PhysX
AZStd::vector<AzToolsFramework::ViewportUi::ClusterId> JointsComponentMode::PopulateViewportUiImpl() AZStd::vector<AzToolsFramework::ViewportUi::ClusterId> JointsComponentMode::PopulateViewportUiImpl()
{ {
return AZStd::vector<AzToolsFramework::ViewportUi::ClusterId>(m_modeSelectionClusterIds.begin(), m_modeSelectionClusterIds.end()); AZStd::vector<AzToolsFramework::ViewportUi::ClusterId> ids;
ids.reserve(m_modeSelectionClusterIds.size());
for (auto clusterid : m_modeSelectionClusterIds)
{
if (clusterid != AzToolsFramework::ViewportUi::InvalidClusterId)
{
ids.emplace_back(clusterid);
}
}
return ids;
} }
void JointsComponentMode::SetCurrentMode(JointsComponentModeCommon::SubComponentModes::ModeType newMode, ButtonData& buttonData) void JointsComponentMode::SetCurrentMode(JointsComponentModeCommon::SubComponentModes::ModeType newMode, ButtonData& buttonData)
@ -353,31 +362,64 @@ namespace PhysX
void JointsComponentMode::SetupSubModes(const AZ::EntityComponentIdPair& entityComponentIdPair) void JointsComponentMode::SetupSubModes(const AZ::EntityComponentIdPair& entityComponentIdPair)
{ {
//create the 3 cluster groups
for (auto& clusterId : m_modeSelectionClusterIds)
{
AzToolsFramework::ViewportUi::ViewportUiRequestBus::EventResult(
clusterId, AzToolsFramework::ViewportUi::DefaultViewportId,
&AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::CreateCluster,
AzToolsFramework::ViewportUi::Alignment::TopLeft);
}
//retrieve the enabled sub components from the entity //retrieve the enabled sub components from the entity
AZStd::vector<JointsComponentModeCommon::SubModeParamaterState> subModesState; AZStd::vector<JointsComponentModeCommon::SubModeParamaterState> subModesState;
EditorJointRequestBus::EventResult(subModesState, entityComponentIdPair, &EditorJointRequests::GetSubComponentModesState); EditorJointRequestBus::EventResult(subModesState, entityComponentIdPair, &EditorJointRequests::GetSubComponentModesState);
//group 1 is always available so create it
AzToolsFramework::ViewportUi::ViewportUiRequestBus::EventResult(
m_modeSelectionClusterIds[static_cast<int>(ClusterGroups::Group1)], AzToolsFramework::ViewportUi::DefaultViewportId,
&AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::CreateCluster, AzToolsFramework::ViewportUi::Alignment::TopLeft);
//check if groups 2 and/or 3 need to be created
for (auto [modeType, _] : subModesState)
{
const AzToolsFramework::ViewportUi::ClusterId group2Id = GetClusterId(ClusterGroups::Group2);
const AzToolsFramework::ViewportUi::ClusterId group3Id = GetClusterId(ClusterGroups::Group3);
switch (modeType)
{
case JointsComponentModeCommon::SubComponentModes::ModeType::Damping:
case JointsComponentModeCommon::SubComponentModes::ModeType::Stiffness:
case JointsComponentModeCommon::SubComponentModes::ModeType::TwistLimits:
case JointsComponentModeCommon::SubComponentModes::ModeType::SwingLimits:
{
if (group2Id == AzToolsFramework::ViewportUi::InvalidClusterId)
{
AzToolsFramework::ViewportUi::ViewportUiRequestBus::EventResult(
m_modeSelectionClusterIds[static_cast<int>(ClusterGroups::Group2)],
AzToolsFramework::ViewportUi::DefaultViewportId,
&AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::CreateCluster,
AzToolsFramework::ViewportUi::Alignment::TopLeft);
}
}
break;
case JointsComponentModeCommon::SubComponentModes::ModeType::MaxForce:
case JointsComponentModeCommon::SubComponentModes::ModeType::MaxTorque:
{
if (group3Id == AzToolsFramework::ViewportUi::InvalidClusterId)
{
AzToolsFramework::ViewportUi::ViewportUiRequestBus::EventResult(
m_modeSelectionClusterIds[static_cast<int>(ClusterGroups::Group3)],
AzToolsFramework::ViewportUi::DefaultViewportId,
&AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::CreateCluster,
AzToolsFramework::ViewportUi::Alignment::TopLeft);
}
}
break;
default:
AZ_Error("Joints", false, "Joints component mode cluster UI setup found unknown sub mode.");
break;
}
//if both are created - break;
if (group2Id != AzToolsFramework::ViewportUi::InvalidClusterId && group3Id != AzToolsFramework::ViewportUi::InvalidClusterId)
{
break;
}
}
const AzToolsFramework::ViewportUi::ClusterId group1ClusterId = GetClusterId(ClusterGroups::Group1); const AzToolsFramework::ViewportUi::ClusterId group1ClusterId = GetClusterId(ClusterGroups::Group1);
const AzToolsFramework::ViewportUi::ClusterId group2ClusterId = GetClusterId(ClusterGroups::Group2); const AzToolsFramework::ViewportUi::ClusterId group2ClusterId = GetClusterId(ClusterGroups::Group2);
//hide cluster 2, if something is added to it. it will make is visible
AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event(
AzToolsFramework::ViewportUi::DefaultViewportId, &AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::SetClusterVisible,
group2ClusterId, false);
const AzToolsFramework::ViewportUi::ClusterId group3ClusterId = GetClusterId(ClusterGroups::Group3); const AzToolsFramework::ViewportUi::ClusterId group3ClusterId = GetClusterId(ClusterGroups::Group3);
// hide cluster 3, if something is added to it. it will make is visible
AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event(
AzToolsFramework::ViewportUi::DefaultViewportId, &AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::SetClusterVisible,
group3ClusterId, false);
//translation and rotation are enabled for all joints in group 1 //translation and rotation are enabled for all joints in group 1
m_subModes[JointsComponentModeCommon::SubComponentModes::ModeType::Translation] = m_subModes[JointsComponentModeCommon::SubComponentModes::ModeType::Translation] =
@ -408,10 +450,6 @@ namespace PhysX
Internal::RegisterClusterButton(group3ClusterId, "joints/MaxForce", SubModeData::MaxForceToolTip); Internal::RegisterClusterButton(group3ClusterId, "joints/MaxForce", SubModeData::MaxForceToolTip);
m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::MaxForce] = m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::MaxForce] =
ButtonData{ group3ClusterId, buttonId }; ButtonData{ group3ClusterId, buttonId };
AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event(
AzToolsFramework::ViewportUi::DefaultViewportId,
&AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::SetClusterVisible, group3ClusterId, true);
} }
break; break;
case JointsComponentModeCommon::SubComponentModes::ModeType::MaxTorque: case JointsComponentModeCommon::SubComponentModes::ModeType::MaxTorque:
@ -424,10 +462,6 @@ namespace PhysX
Internal::RegisterClusterButton(group3ClusterId, "joints/MaxTorque", SubModeData::MaxTorqueToolTip); Internal::RegisterClusterButton(group3ClusterId, "joints/MaxTorque", SubModeData::MaxTorqueToolTip);
m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::MaxTorque] = m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::MaxTorque] =
ButtonData{ group3ClusterId, buttonId }; ButtonData{ group3ClusterId, buttonId };
AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event(
AzToolsFramework::ViewportUi::DefaultViewportId,
&AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::SetClusterVisible, group3ClusterId, true);
} }
break; break;
case JointsComponentModeCommon::SubComponentModes::ModeType::Damping: case JointsComponentModeCommon::SubComponentModes::ModeType::Damping:
@ -439,10 +473,6 @@ namespace PhysX
const AzToolsFramework::ViewportUi::ButtonId buttonId = const AzToolsFramework::ViewportUi::ButtonId buttonId =
Internal::RegisterClusterButton(group2ClusterId, "joints/Damping", SubModeData::DampingToolTip); Internal::RegisterClusterButton(group2ClusterId, "joints/Damping", SubModeData::DampingToolTip);
m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::Damping] = ButtonData{ group2ClusterId, buttonId }; m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::Damping] = ButtonData{ group2ClusterId, buttonId };
AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event(
AzToolsFramework::ViewportUi::DefaultViewportId,
&AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::SetClusterVisible, group2ClusterId, true);
} }
break; break;
case JointsComponentModeCommon::SubComponentModes::ModeType::Stiffness: case JointsComponentModeCommon::SubComponentModes::ModeType::Stiffness:
@ -455,10 +485,6 @@ namespace PhysX
Internal::RegisterClusterButton(group2ClusterId, "joints/Stiffness", SubModeData::StiffnessToolTip); Internal::RegisterClusterButton(group2ClusterId, "joints/Stiffness", SubModeData::StiffnessToolTip);
m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::Stiffness] = m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::Stiffness] =
ButtonData{ group2ClusterId, buttonId }; ButtonData{ group2ClusterId, buttonId };
AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event(
AzToolsFramework::ViewportUi::DefaultViewportId,
&AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::SetClusterVisible, group2ClusterId, true);
} }
break; break;
case JointsComponentModeCommon::SubComponentModes::ModeType::TwistLimits: case JointsComponentModeCommon::SubComponentModes::ModeType::TwistLimits:
@ -473,10 +499,6 @@ namespace PhysX
Internal::RegisterClusterButton(group2ClusterId, "joints/TwistLimits", SubModeData::TwistLimitsToolTip); Internal::RegisterClusterButton(group2ClusterId, "joints/TwistLimits", SubModeData::TwistLimitsToolTip);
m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::TwistLimits] = m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::TwistLimits] =
ButtonData{ group2ClusterId, buttonId }; ButtonData{ group2ClusterId, buttonId };
AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event(
AzToolsFramework::ViewportUi::DefaultViewportId,
&AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::SetClusterVisible, group2ClusterId, true);
} }
break; break;
case JointsComponentModeCommon::SubComponentModes::ModeType::SwingLimits: case JointsComponentModeCommon::SubComponentModes::ModeType::SwingLimits:
@ -489,10 +511,6 @@ namespace PhysX
Internal::RegisterClusterButton(group2ClusterId, "joints/SwingLimits", SubModeData::SwingLimitsToolTip); Internal::RegisterClusterButton(group2ClusterId, "joints/SwingLimits", SubModeData::SwingLimitsToolTip);
m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::SwingLimits] = m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::SwingLimits] =
ButtonData{ group2ClusterId, buttonId }; ButtonData{ group2ClusterId, buttonId };
AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event(
AzToolsFramework::ViewportUi::DefaultViewportId,
&AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::SetClusterVisible, group2ClusterId, true);
} }
break; break;
case JointsComponentModeCommon::SubComponentModes::ModeType::SnapPosition: case JointsComponentModeCommon::SubComponentModes::ModeType::SnapPosition:
@ -517,6 +535,9 @@ namespace PhysX
ButtonData{ group1ClusterId, buttonId }; ButtonData{ group1ClusterId, buttonId };
} }
break; break;
default:
AZ_Error("Joints", false, "Joints component mode cluster button setup found unknown sub mode.");
break;
} }
} }
@ -560,10 +581,13 @@ namespace PhysX
for (int i = 0; i < static_cast<int>(ClusterGroups::GroupCount); i++) for (int i = 0; i < static_cast<int>(ClusterGroups::GroupCount); i++)
{ {
AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event( if (m_modeSelectionClusterIds[i] != AzToolsFramework::ViewportUi::InvalidClusterId)
AzToolsFramework::ViewportUi::DefaultViewportId, {
&AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::RegisterClusterEventHandler, m_modeSelectionClusterIds[i], AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event(
m_modeSelectionHandlers[i]); AzToolsFramework::ViewportUi::DefaultViewportId,
&AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::RegisterClusterEventHandler,
m_modeSelectionClusterIds[i], m_modeSelectionHandlers[i]);
}
} }
// set the translate as enabled by default. // set the translate as enabled by default.
@ -588,10 +612,14 @@ namespace PhysX
{ {
for (auto clusterid : m_modeSelectionClusterIds) for (auto clusterid : m_modeSelectionClusterIds)
{ {
AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event( if (clusterid != AzToolsFramework::ViewportUi::InvalidClusterId)
AzToolsFramework::ViewportUi::DefaultViewportId, &AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::RemoveCluster, {
clusterid); AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event(
AzToolsFramework::ViewportUi::DefaultViewportId,
&AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::RemoveCluster, clusterid);
}
} }
m_modeSelectionClusterIds.assign(static_cast<int>(ClusterGroups::GroupCount), AzToolsFramework::ViewportUi::InvalidClusterId);
} }
AzToolsFramework::ViewportUi::ClusterId JointsComponentMode::GetClusterId(ClusterGroups group) AzToolsFramework::ViewportUi::ClusterId JointsComponentMode::GetClusterId(ClusterGroups group)

Loading…
Cancel
Save