/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #include #include #include #include #include #include #include #include namespace PhysX { AZ_CLASS_ALLOCATOR_IMPL(JointsSubComponentModeTranslation, AZ::SystemAllocator, 0); JointsSubComponentModeTranslation::JointsSubComponentModeTranslation() : m_manipulator( AzToolsFramework::TranslationManipulators::Dimensions::Three, AZ::Transform::Identity(), AZ::Vector3::CreateOne()) { } void JointsSubComponentModeTranslation::Setup(const AZ::EntityComponentIdPair& idPair) { AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(idPair.GetEntityId()); EditorJointRequestBus::EventResult( m_resetValue, idPair, &EditorJointRequests::GetVector3Value, JointsComponentModeCommon::ParamaterNames::Position); m_manipulator.SetSpace(worldTransform); m_manipulator.SetLocalPosition(m_resetValue); m_manipulator.AddEntityComponentIdPair(idPair); m_manipulator.Register(AzToolsFramework::g_mainManipulatorManagerId); AzToolsFramework::ConfigureTranslationManipulatorAppearance3d(&m_manipulator); m_manipulator.InstallLinearManipulatorMouseMoveCallback( [this, idPair](const AzToolsFramework::LinearManipulator::Action& action) { OnManipulatorMoved(action.LocalPosition(), idPair); }); m_manipulator.InstallPlanarManipulatorMouseMoveCallback( [this, idPair](const AzToolsFramework::PlanarManipulator::Action& action) { OnManipulatorMoved(action.LocalPosition(), idPair); }); m_manipulator.InstallSurfaceManipulatorMouseMoveCallback( [this, idPair](const AzToolsFramework::SurfaceManipulator::Action& action) { OnManipulatorMoved(action.LocalPosition(), idPair); }); } void JointsSubComponentModeTranslation::Refresh(const AZ::EntityComponentIdPair& idPair) { AZ::Vector3 localTranslation; EditorJointRequestBus::EventResult( localTranslation, idPair, &EditorJointRequests::GetVector3Value, JointsComponentModeCommon::ParamaterNames::Position); m_manipulator.SetLocalPosition(localTranslation); } void JointsSubComponentModeTranslation::Teardown(const AZ::EntityComponentIdPair& idPair) { m_manipulator.RemoveEntityComponentIdPair(idPair); m_manipulator.Unregister(); } void JointsSubComponentModeTranslation::ResetValues(const AZ::EntityComponentIdPair& idPair) { PhysX::EditorJointRequestBus::Event( idPair, &EditorJointRequests::SetVector3Value, JointsComponentModeCommon::ParamaterNames::Position, m_resetValue); m_manipulator.SetLocalPosition(m_resetValue); } void JointsSubComponentModeTranslation::OnManipulatorMoved(const AZ::Vector3& position, const AZ::EntityComponentIdPair& idPair) { m_manipulator.SetLocalPosition(position); PhysX::EditorJointRequestBus::Event( idPair, &EditorJointRequests::SetVector3Value, JointsComponentModeCommon::ParamaterNames::Position, position); } } // namespace PhysX