You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
2.2 KiB
C++
62 lines
2.2 KiB
C++
/*
|
|
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
|
|
* its licensors.
|
|
*
|
|
* For complete copyright license terms please see the LICENSE at the root of this
|
|
* distribution (the "License"). All use of this software is governed by the License,
|
|
* or, if provided, by the license below or the license accompanying this file. Do not
|
|
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
*
|
|
*/
|
|
|
|
#include <Libraries/Entity/Rotate.h>
|
|
|
|
#include <ScriptCanvas/Execution/ErrorBus.h>
|
|
|
|
#include <AzCore/Component/TransformBus.h>
|
|
#include <AzCore/Math/Transform.h>
|
|
#include <ScriptCanvas/Core/GraphBus.h>
|
|
|
|
namespace ScriptCanvas
|
|
{
|
|
namespace Nodes
|
|
{
|
|
namespace Entity
|
|
{
|
|
void Rotate::OnInputSignal(const SlotId&)
|
|
{
|
|
AZ::EntityId targetEntity = RotateProperty::GetEntity(this);
|
|
|
|
if (!targetEntity.IsValid())
|
|
{
|
|
SCRIPTCANVAS_REPORT_ERROR((*this), "Invalid entity specified");
|
|
return;
|
|
}
|
|
|
|
AZ::Entity* entity = nullptr;
|
|
AZ::ComponentApplicationBus::BroadcastResult(entity, &AZ::ComponentApplicationRequests::FindEntity, targetEntity);
|
|
if (entity)
|
|
{
|
|
AZ::Vector3 angles = AZ::Vector3::CreateZero();
|
|
if (entity->GetState() == AZ::Entity::State::Active)
|
|
{
|
|
angles = RotateProperty::GetEulerAngles(this);
|
|
|
|
AZ::Quaternion rotation = AZ::ConvertEulerDegreesToQuaternion(angles);
|
|
|
|
AZ::Transform currentTransform = AZ::Transform::CreateIdentity();
|
|
AZ::TransformBus::EventResult(currentTransform, targetEntity, &AZ::TransformInterface::GetWorldTM);
|
|
|
|
currentTransform.SetRotation((rotation * currentTransform.GetRotation().GetNormalized()));
|
|
|
|
AZ::TransformBus::Event(targetEntity, &AZ::TransformInterface::SetWorldTM, currentTransform);
|
|
}
|
|
}
|
|
|
|
SignalOutput(RotateProperty::GetOutSlotId(this));
|
|
}
|
|
}
|
|
}
|
|
}
|