/* * 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 * */ // AZ #include #include #include // Graph Model #include #include #include namespace GraphModel { Connection::Connection(GraphPtr graph, SlotPtr sourceSlot, SlotPtr targetSlot) : GraphElement(graph) , m_sourceSlot(sourceSlot) , m_targetSlot(targetSlot) { AZ_Assert(sourceSlot->SupportsConnections(), "sourceSlot type does not support connections to other slots"); AZ_Assert(targetSlot->SupportsConnections(), "targetSlot type does not support connections to other slots"); const NodeId sourceNodeId = sourceSlot->GetParentNode()->GetId(); const NodeId targetNodeId = targetSlot->GetParentNode()->GetId(); m_sourceEndpoint = AZStd::make_pair(sourceNodeId, sourceSlot->GetSlotId()); m_targetEndpoint = AZStd::make_pair(targetNodeId, targetSlot->GetSlotId()); } void Connection::PostLoadSetup(GraphPtr graph) { m_graph = graph; m_sourceSlot = azrtti_cast(graph->FindSlot(m_sourceEndpoint)); m_targetSlot = azrtti_cast(graph->FindSlot(m_targetEndpoint)); } void Connection::Reflect(AZ::ReflectContext* context) { if (auto serializeContext = azrtti_cast(context)) { serializeContext->Class() ->Version(0) ->Field("m_sourceEndpoint", &Connection::m_sourceEndpoint) ->Field("m_targetEndpoint", &Connection::m_targetEndpoint) ; serializeContext->RegisterGenericType(); } if (auto behaviorContext = azrtti_cast(context)) { behaviorContext->Class("ConnectionModelConnection") ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation) ->Attribute(AZ::Script::Attributes::Category, "Editor") ->Attribute(AZ::Script::Attributes::Module, "editor.graph") ->Method("GetSourceNode", &Connection::GetSourceNode) ->Method("GetTargetNode", &Connection::GetTargetNode) ->Method("GetSourceSlot", &Connection::GetSourceSlot) ->Method("GetTargetSlot", &Connection::GetTargetSlot) ->Method("GetSourceEndpoint", &Connection::GetSourceEndpoint) ->Method("GetTargetEndpoint", &Connection::GetTargetEndpoint) ; } } NodePtr Connection::GetSourceNode() const { auto sourceSlot = GetSourceSlot(); return sourceSlot ? sourceSlot->GetParentNode() : nullptr; } NodePtr Connection::GetTargetNode() const { auto targetSlot = GetTargetSlot(); return targetSlot ? targetSlot->GetParentNode() : nullptr; } SlotPtr Connection::GetSourceSlot() const { return m_sourceSlot.lock(); } SlotPtr Connection::GetTargetSlot() const { return m_targetSlot.lock(); } const Endpoint& Connection::GetSourceEndpoint() const { return m_sourceEndpoint; } const Endpoint& Connection::GetTargetEndpoint() const { return m_targetEndpoint; } } // namespace GraphModel