Files
o3de/Gems/GraphCanvas/Code/Source/Components/Nodes/NodeComponent.h
T
Luis Sempé 9e2a3226fd Script Canvas, replace the text replacement system to a JSON file based one (#5228)
It is now possible to right click on nodes on the node palette to navigate to the file that holds the text data for any given node, this way it is easy to update and improve the naming of titles, subtitles, categories, tool tips and slots.
2021-11-11 11:53:51 -08:00

180 lines
6.2 KiB
C++

/*
* 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
*
*/
#pragma once
#include <AzCore/Component/Component.h>
#include <AzCore/Component/EntityBus.h>
#include <AzCore/std/string/string_view.h>
#include <GraphCanvas/Components/GeometryBus.h>
#include <GraphCanvas/Components/GraphCanvasPropertyBus.h>
#include <GraphCanvas/Components/Nodes/Group/NodeGroupBus.h>
#include <GraphCanvas/Components/Nodes/NodeBus.h>
#include <GraphCanvas/Components/Nodes/NodeConfiguration.h>
#include <GraphCanvas/Components/SceneBus.h>
#include <GraphCanvas/Components/StyleBus.h>
#include <GraphCanvas/Components/VisualBus.h>
#include <GraphCanvas/Types/ComponentSaveDataInterface.h>
namespace GraphCanvas
{
class NodeComponent
: public GraphCanvasPropertyComponent
, public NodeRequestBus::Handler
, public SceneMemberRequestBus::Handler
, public SceneMemberNotificationBus::Handler
, public SceneNotificationBus::Handler
, public AZ::EntityBus::Handler
, public SlotNotificationBus::MultiHandler
, public ComponentSaveDataInterface<NodeSaveData>
, public ConnectionNotificationBus::Handler
, public GroupableSceneMemberRequestBus::Handler
{
friend class NodeSerializer;
public:
AZ_COMPONENT(NodeComponent, "{7385AAC3-18F0-4BCE-BD9B-C17798C899EC}", GraphCanvasPropertyComponent);
static void Reflect(AZ::ReflectContext*);
static AZ::Entity* CreateCoreNodeEntity(const NodeConfiguration& config = NodeConfiguration());
NodeComponent();
NodeComponent(const NodeConfiguration& config);
~NodeComponent() override;
// AZ::Component
static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
{
provided.push_back(AZ_CRC("GraphCanvas_NodeService", 0xcc0f32cc));
provided.push_back(AZ_CRC("GraphCanvas_SceneMemberService", 0xe9759a2d));
}
static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
{
incompatible.push_back(AZ_CRC("GraphCanvas_NodeService", 0xcc0f32cc));
}
static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent)
{
(void)dependent;
}
static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required)
{
required.push_back(AZ_CRC("GraphCanvas_GeometryService", 0x80981600));
required.push_back(StyledGraphicItemServiceCrc);
}
void Init() override;
void Activate() override;
void Deactivate() override;
////
// SlotNotificationBus
void OnConnectedTo(const AZ::EntityId& connectionId, const Endpoint& endpoint) override;
void OnDisconnectedFrom(const AZ::EntityId& connectionId, const Endpoint& endpoint) override;
////
// AZ::EntityBus
void OnEntityExists(const AZ::EntityId&) override;
void OnEntityActivated(const AZ::EntityId&) override;
////
// SceneMemberRequestBus
void SetScene(const AZ::EntityId& sceneId) override;
void ClearScene(const AZ::EntityId& oldSceneId) override;
void SignalMemberSetupComplete() override;
AZ::EntityId GetScene() const override;
////
// SceneMemberNotificationsBus
void OnSceneReady() override;
////
// SceneNotificationsBus
void OnStylesChanged() override;
void OnGraphLoadComplete() override;
void OnPasteEnd() override;
////
// NodeRequestBus
void SetTooltip(const AZStd::string& tooltip) override;
const AZStd::string GetTooltip() const override { return m_configuration.GetTooltip(); }
void SetShowInOutliner(bool showInOutliner) override { m_configuration.SetShowInOutliner(showInOutliner); }
bool ShowInOutliner() const override { return m_configuration.GetShowInOutliner(); }
void AddSlot(const AZ::EntityId& slotId) override;
void RemoveSlot(const AZ::EntityId& slotId) override;
AZStd::vector<AZ::EntityId> GetSlotIds() const override;
AZStd::vector<SlotId> GetVisibleSlotIds() const override;
AZStd::vector<SlotId> FindVisibleSlotIdsByType(const ConnectionType& connectionType, const SlotType& slotType) const override;
bool HasConnections() const override;
AZStd::any* GetUserData() override;
bool IsWrapped() const override;
void SetWrappingNode(const AZ::EntityId& wrappingNode) override;
AZ::EntityId GetWrappingNode() const override;
void SignalBatchedConnectionManipulationBegin() override;
void SignalBatchedConnectionManipulationEnd() override;
void SignalConnectionMoveBegin(const ConnectionId& connectionId) override;
RootGraphicsItemEnabledState UpdateEnabledState() override;
bool HasHideableSlots() const override;
bool IsHidingUnusedSlots() const override;
void ShowAllSlots() override;
void HideUnusedSlots() override;
void SignalNodeAboutToBeDeleted() override;
////
// ConnectionNotificationBus
void OnMoveFinalized(bool isValidConnection) override;
////
// GroupableSceneMemberRequests
bool IsGrouped() const override;
const AZ::EntityId& GetGroupId() const override;
void RegisterToGroup(const AZ::EntityId& groupId) override;
void UnregisterFromGroup(const AZ::EntityId& groupId) override;
void RemoveFromGroup() override;
////
protected:
void HideUnusedSlotsImpl();
void UpdateDisabledStateVisuals();
//! The ID of the scene this node belongs to.
AZ::EntityId m_sceneId;
//! This node's slots
AZStd::vector<AZ::Entity*> m_slots;
//! Serialized configuration settings
NodeConfiguration m_configuration;
AZ::EntityId m_wrappingNode;
AZ::EntityId m_owningGroupId;
//! Stores custom user data for this node
AZStd::any m_userData;
bool m_updateSlotState = false;
};
}