Apparatus Version 1.0.0
ECS-like data-driven workflow for Unreal Engine.
BPNode_Mechanic.h
1 /*
2  * ░▒▓ APPARATUS ▓▒░
3  *
4  * File: BPNode_Mechanic.h
5  * Created: Friday, 23rd October 2020 7:00:48 pm
6  * Author: Vladislav Dmitrievich Turbanov (vladislav@turbanov.ru)
7  * ───────────────────────────────────────────────────────────────────
8  * Last Modified: Wednesday, 24th March 2021 6:38:57 pm
9  * Modified By: Vladislav Dmitrievich Turbanov (vladislav@turbanov.ru)
10  * ───────────────────────────────────────────────────────────────────
11  *
12  * The Apparatus source code is for your internal usage only.
13  * Redistribution of this file is strictly prohibited.
14  *
15  * Community forums: https://talk.turbanov.ru
16  *
17  * Copyright 2020 - 2021, SP Vladislav Dmitrievich Turbanov
18  * Made in Russia, Moscow City, Chekhov City
19  */
20 
21 #pragma once
22 
23 #include "K2Node.h"
24 #include "K2Node_AddPinInterface.h"
25 
26 #include "BPNode_Mechanic.generated.h"
27 
28 UCLASS(BlueprintType, Blueprintable)
29 class APPARATUSUNCOOKED_API UBPNode_Mechanic final
30  : public UK2Node,
31  public IK2Node_AddPinInterface
32 {
33  GENERATED_UCLASS_BODY()
34 
35  UPROPERTY()
36  int32 NumTypes = 0;
37 
38  UPROPERTY()
39  int32 NumNotTypes = 0;
40 
45  UPROPERTY()
46  int32 TypesCount = 0;
47 
51  UPROPERTY()
52  int32 ExcludedTypesCount = 0;
53 
57  static const FName EvaluationBodyPinName;
58 
62  static const FName CompletedPinName;
63 
67  static const FName SubjectivePinName;
68 
72  static const FString TypePinNamePrefix;
73 
77  static const FString ExcludedTypePinNamePrefix;
78 
82  static const FString DetailPinNamePrefix;
83 
84  // UEdGraphNode
85  virtual void AllocateDefaultPins() override;
86 
87  virtual FLinearColor GetNodeTitleColor() const override;
88 
89  virtual void
90  EarlyValidation(class FCompilerResultsLog &MessageLog) const override;
91 
92  virtual void ExpandNode(class FKismetCompilerContext &CompilerContext,
93  UEdGraph *SourceGraph) override;
94 
95  virtual FText GetNodeTitle(ENodeTitleType::Type TitleType) const override;
96 
97  virtual FText GetTooltipText() const override;
98 
99  virtual void PinConnectionListChanged(UEdGraphPin *ChangedPin) override;
100 
101  virtual void PinDefaultValueChanged(UEdGraphPin *ChangedPin) override;
102 
103  virtual void PostReconstructNode() override;
104  // UEdGraphNode.
105 
106  // Begin UK2Node interface
107  virtual FText GetMenuCategory() const override;
108 
109  virtual void GetMenuActions(
110  FBlueprintActionDatabaseRegistrar &ActionRegistrar) const override;
111 
112  virtual void GetNodeContextMenuActions(
113  class UToolMenu *Menu,
114  class UGraphNodeContextMenuContext *Context) const override;
115  // End UK2Node interface.
116 
117  // IK2Node_AddPinInterface
118  virtual void AddInputPin() override;
119  // IK2Node_AddPinInterface
120 
121  virtual ERedirectType DoPinsMatchForReconstruction(
122  const UEdGraphPin* NewPin, int32 NewPinIndex, const UEdGraphPin* OldPin,
123  int32 OldPinIndex) const override;
124 
125  virtual void AddExcludedInputPin();
126 
127  virtual void InteractiveAddInputPin();
128 
129  virtual void InteractiveAddExcludedInputPin();
130 
131  virtual void RemoveTypePin(const int32 Index);
132 
133  virtual void RemoveTypePin(UEdGraphPin *Pin);
134 
135  virtual void RemoveExcludedTypePin(UEdGraphPin *Pin);
136 
137  virtual void InteractiveRemoveTypePin(UEdGraphPin* TypePin);
138 
139  virtual void InteractiveRemoveExcludedTypePin(UEdGraphPin* ExcludedTypePin);
140 
141  virtual bool IsConnectedToEvent(const FName EventName) const;
142 
143  virtual bool IsBoot() const;
144 
145  virtual bool IsSteady() const;
146 
147  virtual UEdGraphPin *GetEvaluationBodyPin() const;
148 
149  virtual UEdGraphPin *GetCompletedPin() const;
150 
151  virtual UEdGraphPin *GetSubjectPin() const;
152 
153  virtual UEdGraphPin *GetTypePinGivenIndex(const int32 Index) const;
154 
155  virtual UEdGraphPin *GetExcludedTypePinGivenIndex(const int32 Index) const;
156 
157  virtual UEdGraphPin *GetDetailPinGivenIndex(const int32 Index) const;
158 
159  virtual UClass *GetTypePinType(UEdGraphPin *Pin) const;
160 
161  virtual UClass *GetExcludedTypePinType(UEdGraphPin *Pin) const;
162 
163  virtual UClass *GetDetailPinType(UEdGraphPin *Pin) const;
164 
165  virtual FName GetTypePinName(const int32 Index) const;
166 
167  virtual FName GetExcludedTypePinName(const int32 Index) const;
168 
169  virtual FName GetDetailPinName(const int32 Index) const;
170 
171  virtual int32 GetTypePinIndex(const UEdGraphPin *Pin) const;
172 
173  virtual int32 GetExcludedTypePinIndex(const UEdGraphPin *Pin) const;
174 
175  virtual int32 GetDetailPinIndex(const UEdGraphPin *Pin) const;
176 
177  virtual bool IsTypePin(const UEdGraphPin *Pin) const;
178 
179  virtual bool IsExcludedTypePin(const UEdGraphPin *Pin) const;
180 
181  virtual bool IsDetailPin(const UEdGraphPin *Pin) const;
182 
183  virtual void OnTypePinChanged(UEdGraphPin *ChangedPin);
184 
185  virtual void OnExcludedTypePinChanged(UEdGraphPin *ChangedPin);
186 
192  virtual bool SyncPinNames();
193 
194  virtual void UpdateTypePinUI(UEdGraphPin *Pin);
195 
196  virtual void UpdateExcludedTypePinUI(UEdGraphPin *Pin);
197 
198  virtual void UpdateDetailPinUI(UEdGraphPin *Pin);
199 
200  virtual bool HasValidBlueprintSelf() const;
201 };
Definition: BPNode_Mechanic.h:32