GDevelop Core
Core library for developing platforms and tools compatible with GDevelop.
BehaviorMetadata.h
1 /*
2  * GDevelop Core
3  * Copyright 2008-2016 Florian Rival ([email protected]). All rights
4  * reserved. This project is released under the MIT License.
5  */
6 #pragma once
7 
8 #include "InstructionOrExpressionContainerMetadata.h"
9 
10 #include <map>
11 
12 #include "GDCore/Extensions/Metadata/ExpressionMetadata.h"
13 #include "GDCore/Extensions/Metadata/InstructionMetadata.h"
14 #include "GDCore/String.h"
15 namespace gd {
16 class Behavior;
17 class BehaviorsSharedData;
18 class MultipleInstructionMetadata;
19 class InstructionMetadata;
20 class ExpressionMetadata;
21 class PropertyDescriptor;
22 } // namespace gd
23 
24 namespace gd {
25 
32  public:
34  const gd::String& extensionNamespace,
35  const gd::String& nameWithNamespace,
36  const gd::String& fullname_,
37  const gd::String& defaultName_,
38  const gd::String& description_,
39  const gd::String& group_,
40  const gd::String& icon24x24_,
41  const gd::String& className_,
42  std::shared_ptr<gd::Behavior> instance,
43  std::shared_ptr<gd::BehaviorsSharedData> sharedDatasInstance);
44 
51  const gd::String& extensionNamespace,
52  const gd::String& nameWithNamespace,
53  const gd::String& fullname_,
54  const gd::String& defaultName_,
55  const gd::String& description_,
56  const gd::String& group_,
57  const gd::String& icon24x24_);
58 
59  BehaviorMetadata(){};
60  virtual ~BehaviorMetadata(){};
61 
67  gd::InstructionMetadata& AddCondition(const gd::String& name_,
68  const gd::String& fullname_,
69  const gd::String& description_,
70  const gd::String& sentence_,
71  const gd::String& group_,
72  const gd::String& icon_,
73  const gd::String& smallicon_) override;
74 
80  gd::InstructionMetadata& AddAction(const gd::String& name_,
81  const gd::String& fullname_,
82  const gd::String& description_,
83  const gd::String& sentence_,
84  const gd::String& group_,
85  const gd::String& icon_,
86  const gd::String& smallicon_) override;
87 
91  gd::InstructionMetadata& AddScopedCondition(const gd::String& name_,
92  const gd::String& fullname_,
93  const gd::String& description_,
94  const gd::String& sentence_,
95  const gd::String& group_,
96  const gd::String& icon_,
97  const gd::String& smallicon_) override;
98 
102  gd::InstructionMetadata& AddScopedAction(const gd::String& name_,
103  const gd::String& fullname_,
104  const gd::String& description_,
105  const gd::String& sentence_,
106  const gd::String& group_,
107  const gd::String& icon_,
108  const gd::String& smallicon_) override;
112  gd::ExpressionMetadata& AddExpression(const gd::String& name_,
113  const gd::String& fullname_,
114  const gd::String& description_,
115  const gd::String& group_,
116  const gd::String& smallicon_) override;
117 
121  gd::ExpressionMetadata& AddStrExpression(const gd::String& name_,
122  const gd::String& fullname_,
123  const gd::String& description_,
124  const gd::String& group_,
125  const gd::String& smallicon_) override;
126 
133  gd::MultipleInstructionMetadata AddExpressionAndCondition(
134  const gd::String& type,
135  const gd::String& name,
136  const gd::String& fullname,
137  const gd::String& description,
138  const gd::String& sentenceName,
139  const gd::String& group,
140  const gd::String& icon) override;
141 
150  gd::MultipleInstructionMetadata AddExpressionAndConditionAndAction(
151  const gd::String& type,
152  const gd::String& name,
153  const gd::String& fullname,
154  const gd::String& description,
155  const gd::String& sentenceName,
156  const gd::String& group,
157  const gd::String& icon) override;
158 
165  gd::InstructionMetadata& AddDuplicatedAction(
166  const gd::String& newActionName, const gd::String& copiedActionName) override;
167 
174  gd::InstructionMetadata& AddDuplicatedCondition(
175  const gd::String& newConditionName,
176  const gd::String& copiedConditionName) override;
177 
184  gd::ExpressionMetadata& AddDuplicatedExpression(
185  const gd::String& newExpressionName,
186  const gd::String& copiedExpressionName);
187 
195  gd::ExpressionMetadata& AddDuplicatedStrExpression(
196  const gd::String& newExpressionName,
197  const gd::String& copiedExpressionName);
198 
199  BehaviorMetadata& SetFullName(const gd::String& fullname_) override;
200  BehaviorMetadata& SetDefaultName(const gd::String& defaultName_);
201  BehaviorMetadata& SetDescription(const gd::String& description_) override;
202  BehaviorMetadata& SetGroup(const gd::String& group_);
203 
211  BehaviorMetadata& SetIncludeFile(const gd::String& includeFile) override;
212 
216  BehaviorMetadata& AddIncludeFile(const gd::String& includeFile) override;
217 
223  BehaviorMetadata& AddRequiredFile(const gd::String& requiredFile);
224 
229  const gd::String& GetHelpPath() const override { return helpPath; }
230 
238  BehaviorMetadata& SetHelpPath(const gd::String& path) override {
239  helpPath = path;
240  return *this;
241  }
242 
243  const gd::String& GetName() const override;
244  const gd::String& GetFullName() const override { return fullname; }
245  const gd::String& GetDefaultName() const { return defaultName; }
246  const gd::String& GetDescription() const override { return description; }
247  const gd::String& GetGroup() const { return group; }
248  const gd::String& GetIconFilename() const override { return iconFilename; }
249 
254  objectType = objectType_;
255  return *this;
256  }
257 
263  const gd::String& GetObjectType() const { return objectType; }
264 
268  const std::vector<gd::String>& GetRequiredBehaviorTypes() const;
269 
274  bool IsPrivate() const { return isPrivate; }
275 
281  isPrivate = true;
282  return *this;
283  }
284 
289  bool IsHidden() const { return isHidden; }
290 
296  isHidden = true;
297  return *this;
298  }
299 
306  gd::Behavior& Get() const;
307 
315  std::map<gd::String, gd::PropertyDescriptor> GetProperties() const;
316 
324  gd::BehaviorsSharedData* GetSharedDataInstance() const;
325 
333  std::map<gd::String, gd::PropertyDescriptor> GetSharedProperties() const;
334 
339  std::map<gd::String, gd::InstructionMetadata>& GetAllActions() override { return actionsInfos; };
340 
344  std::map<gd::String, gd::InstructionMetadata>& GetAllConditions() override { return conditionsInfos; };
345 
349  std::map<gd::String, gd::ExpressionMetadata>& GetAllExpressions() override { return expressionsInfos; };
350 
354  std::map<gd::String, gd::ExpressionMetadata>& GetAllStrExpressions() override { return strExpressionsInfos; };
355 
356  std::map<gd::String, gd::InstructionMetadata> conditionsInfos;
357  std::map<gd::String, gd::InstructionMetadata> actionsInfos;
358  std::map<gd::String, gd::ExpressionMetadata> expressionsInfos;
359  std::map<gd::String, gd::ExpressionMetadata> strExpressionsInfos;
360 
361  std::vector<gd::String> includeFiles;
362  std::vector<gd::String> requiredFiles;
363  gd::String className;
364 
365  private:
366  gd::String extensionNamespace;
367  gd::String helpPath;
368  gd::String fullname;
369  gd::String defaultName;
370  gd::String description;
371  gd::String group;
372  gd::String iconFilename;
373  gd::String objectType;
374  mutable std::vector<gd::String> requiredBehaviors;
375  bool isPrivate = false;
376  bool isHidden = false;
377 
378  // TODO: Nitpicking: convert these to std::unique_ptr to clarify ownership.
379  std::shared_ptr<gd::Behavior> instance;
380  std::shared_ptr<gd::BehaviorsSharedData> sharedDatasInstance;
381 
382  static const std::map<gd::String, gd::PropertyDescriptor> badProperties;
383 };
384 
385 } // namespace gd
Base class used to represents a behavior that can be applied to an object. It stores the content (i....
Definition: Behavior.h:23
Contains user-friendly information about a behavior type.
Definition: BehaviorMetadata.h:31
BehaviorMetadata & SetPrivate()
Definition: BehaviorMetadata.h:280
std::map< gd::String, gd::InstructionMetadata > & GetAllConditions() override
Definition: BehaviorMetadata.h:344
BehaviorMetadata & SetHidden()
Definition: BehaviorMetadata.h:295
bool IsPrivate() const
Definition: BehaviorMetadata.h:274
bool IsHidden() const
Definition: BehaviorMetadata.h:289
const gd::String & GetHelpPath() const override
Definition: BehaviorMetadata.h:229
std::map< gd::String, gd::ExpressionMetadata > & GetAllStrExpressions() override
Definition: BehaviorMetadata.h:354
const gd::String & GetObjectType() const
Get the type of the object that this behavior can be used on.
Definition: BehaviorMetadata.h:263
std::map< gd::String, gd::InstructionMetadata > & GetAllActions() override
Return a reference to a map containing the names of the actions (as keys) and the metadata associated...
Definition: BehaviorMetadata.h:339
BehaviorMetadata & SetHelpPath(const gd::String &path) override
Definition: BehaviorMetadata.h:238
std::map< gd::String, gd::ExpressionMetadata > & GetAllExpressions() override
Definition: BehaviorMetadata.h:349
BehaviorMetadata(const gd::String &extensionNamespace, const gd::String &nameWithNamespace, const gd::String &fullname_, const gd::String &defaultName_, const gd::String &description_, const gd::String &group_, const gd::String &icon24x24_)
Construct a behavior metadata, without "blueprint" behavior.
BehaviorMetadata & SetObjectType(const gd::String &objectType_)
Set the type of the object that this behavior can be used on.
Definition: BehaviorMetadata.h:253
Base class for defining data shared by behaviors having the same type and name.
Definition: BehaviorsSharedData.h:24
Describe user-friendly information about an expression, its parameters and the function name as well ...
Definition: ExpressionMetadata.h:47
Describe user-friendly information about an instruction (action or condition), its parameters and the...
Definition: InstructionMetadata.h:38
Contains user-friendly information about instructions and expressions (usually for a behavior or an o...
Definition: InstructionOrExpressionContainerMetadata.h:30
A "composite" metadata that can be used to easily declare both an expression and a related condition ...
Definition: MultipleInstructionMetadata.h:24
String represents an UTF8 encoded string.
Definition: String.h:31
Definition: CommonTools.h:24