GDevelop Core
Core library for developing platforms and tools compatible with GDevelop.
ObjectsContainersList.h
1 #pragma once
2 #include <vector>
3 
4 #include "Variable.h"
5 #include "GDCore/Project/ObjectsContainer.h"
6 
7 namespace gd {
8 class String;
9 class Project;
10 class Layout;
11 class VariablesContainer;
12 class Object;
13 class ObjectConfiguration;
14 } // namespace gd
15 
16 namespace gd {
17 
29 class GD_CORE_API ObjectsContainersList {
30  public:
31  virtual ~ObjectsContainersList(){};
32 
33  static ObjectsContainersList MakeNewEmptyObjectsContainersList();
34 
35  static ObjectsContainersList MakeNewObjectsContainersListForProjectAndLayout(
36  const gd::Project& project, const gd::Layout& layout);
37 
38  static ObjectsContainersList MakeNewObjectsContainersListForProject(
39  const gd::Project& project);
40 
41  static ObjectsContainersList MakeNewObjectsContainersListForContainers(
42  const gd::ObjectsContainer& globalObjectsContainer,
43  const gd::ObjectsContainer& objectsContainer);
44 
45  static ObjectsContainersList MakeNewObjectsContainersListForContainer(
46  const gd::ObjectsContainer& objectsContainer);
47 
51  bool HasObjectOrGroupNamed(const gd::String& name) const;
52 
56  bool HasObjectNamed(const gd::String& name) const;
57 
58  enum VariableExistence {
59  DoesNotExist,
60  Exists,
61  GroupIsEmpty,
62  ExistsOnlyOnSomeObjectsOfTheGroup
63  };
64 
69  VariableExistence HasObjectOrGroupWithVariableNamed(
70  const gd::String& objectOrGroupName,
71  const gd::String& variableName) const;
72 
77  bool HasObjectOrGroupVariablesContainer(
78  const gd::String& objectOrGroupName,
79  const gd::VariablesContainer& variablesContainer) const;
80 
90  const gd::VariablesContainer* GetObjectOrGroupVariablesContainer(
91  const gd::String& objectOrGroupName) const;
92 
96  gd::Variable::Type GetTypeOfObjectOrGroupVariable(const gd::String& objectOrGroupName, const gd::String& variableName) const;
97 
106  gd::String GetTypeOfObject(const gd::String& objectName) const;
107 
111  bool HasBehaviorInObjectOrGroup(const gd::String& objectOrGroupName,
112  const gd::String& behaviorName) const;
113 
119  const gd::String& objectOrGroupName,
120  const gd::String& behaviorName,
121  bool searchInGroups = true) const;
122 
128  gd::String GetTypeOfBehavior(const gd::String& behaviorName,
129  bool searchInGroups = true) const;
130 
138  std::vector<gd::String> GetBehaviorsOfObject(
139  const gd::String& objectName, bool searchInGroups = true) const;
140 
148  std::vector<gd::String>
149  GetBehaviorNamesInObjectOrGroup(const gd::String &objectOrGroupName,
150  const gd::String &behaviorType,
151  bool searchInGroups = true) const;
152 
160  std::vector<gd::String>
161  GetAnimationNamesOfObject(const gd::String &objectOrGroupName) const;
162 
172  std::vector<gd::String> ExpandObjectName(
173  const gd::String& objectOrGroupName,
174  const gd::String& onlyObjectToSelectIfPresent = "") const;
175 
176  void ForEachObject(std::function<void(const gd::Object& object)> fn) const;
177 
182  void ForEachNameMatchingSearch(
183  const gd::String& search,
184  std::function<void(const gd::String& name,
185  const gd::ObjectConfiguration* objectConfiguration)>
186  fn) const;
187 
192  void ForEachObjectOrGroupVariableMatchingSearch(
193  const gd::String& objectOrGroupName,
194  const gd::String& search,
195  std::function<void(const gd::String& variableName,
196  const gd::Variable& variable)> fn) const;
197 
202  const gd::ObjectsContainer::SourceType GetObjectsContainerSourceType(
203  const gd::String& objectOrGroupName) const;
204 
208  const ObjectsContainer *
209  GetObjectsContainerFromObjectName(const gd::String &objectOrGroupName) const;
210 
221  const gd::ObjectsContainer &GetObjectsContainer(std::size_t index) const;
222 
226  std::size_t GetObjectsContainersCount() const;
227 
231 
232  private:
233  const gd::Object* GetObject(const gd::String& name) const;
234 
235  bool HasObjectWithVariableNamed(const gd::String& objectName,
236  const gd::String& variableName) const;
237 
238  bool HasObjectVariablesContainer(
239  const gd::String& objectName,
240  const gd::VariablesContainer& variablesContainer) const;
241 
242  const gd::VariablesContainer* GetObjectVariablesContainer(
243  const gd::String& objectName) const;
244 
245  gd::Variable::Type GetTypeOfObjectVariable(const gd::String& objectName, const gd::String& variableName) const;
246 
247  void ForEachObjectVariableMatchingSearch(
248  const gd::String& objectOrGroupName,
249  const gd::String& search,
250  std::function<void(const gd::String& variableName,
251  const gd::Variable& variable)> fn) const;
252 
253  void Add(const gd::ObjectsContainer& objectsContainer) {
254  objectsContainers.push_back(&objectsContainer);
255  };
256 
257  std::vector<const gd::ObjectsContainer*> objectsContainers;
258 };
259 
260 } // namespace gd
Represent a layout ( also called a scene ) of a project.
Definition: Layout.h:40
Base class used to represent an object configuration. For example, this can be the animations in a sp...
Definition: ObjectConfiguration.h:38
Represent an object of a platform.
Definition: Object.h:37
Used as a base class for classes that will own objects (see gd::Object).
Definition: ObjectsContainer.h:37
A list of objects containers, useful for accessing objects in a scoped way, along with methods to acc...
Definition: ObjectsContainersList.h:29
ObjectsContainersList()
Definition: ObjectsContainersList.h:230
Base class representing a project (game), including all resources, scenes, objects,...
Definition: Project.h:50
String represents an UTF8 encoded string.
Definition: String.h:33
Defines a variable which can be used by an object, a layout or a project.
Definition: Variable.h:29
Type
Definition: Variable.h:32
Class defining a container for gd::Variable.
Definition: VariablesContainer.h:28
Definition: CommonTools.h:24
gd::String GD_CORE_API GetTypeOfObject(const gd::ObjectsContainer &project, const gd::ObjectsContainer &layout, gd::String name, bool searchInGroups)
Get a type from an object/group name.
Definition: Layout.cpp:422
std::vector< gd::String > GD_CORE_API GetBehaviorNamesInObjectOrGroup(const gd::ObjectsContainer &project, const gd::ObjectsContainer &layout, const gd::String &objectOrGroupName, const gd::String &behaviorType, bool searchInGroups)
Get the names of behavior of a given type if an object or all objects of a group has it.
Definition: Layout.cpp:510
gd::String GD_CORE_API GetTypeOfBehaviorInObjectOrGroup(const gd::ObjectsContainer &project, const gd::ObjectsContainer &layout, const gd::String &objectOrGroupName, const gd::String &behaviorName, bool searchInGroups)
Get the type of a behavior if an object or all objects of a group has it.
Definition: Layout.cpp:677
gd::String GD_CORE_API GetTypeOfBehavior(const gd::ObjectsContainer &project, const gd::ObjectsContainer &layout, gd::String name, bool searchInGroups)
Get a type from a behavior name.
Definition: Layout.cpp:732
vector< gd::String > GD_CORE_API GetBehaviorsOfObject(const gd::ObjectsContainer &project, const gd::ObjectsContainer &layout, const gd::String &name, bool searchInGroups)
Get behaviors of an object/group.
Definition: Layout.cpp:754
bool GD_CORE_API HasBehaviorInObjectOrGroup(const gd::ObjectsContainer &project, const gd::ObjectsContainer &layout, const gd::String &objectOrGroupName, const gd::String &behaviorName, bool searchInGroups)
Check if an object or all objects of a group has a behavior.
Definition: Layout.cpp:579