GDevelop Core
Core library for developing platforms and tools compatible with GDevelop.
ObjectsContainer.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 <memory>
9 #include <vector>
10 #include <set>
11 #include "GDCore/Project/MemoryTrackedRegistry.h"
12 #include "GDCore/String.h"
13 #include "GDCore/Project/ObjectGroupsContainer.h"
14 #include "GDCore/Project/ObjectFolderOrObject.h"
15 namespace gd {
16 class Object;
17 class Project;
18 class SerializerElement;
19 } // namespace gd
20 #undef GetObject // Disable an annoying macro
21 
22 namespace gd {
23 
38 class GD_CORE_API ObjectsContainer {
39  public:
40  enum SourceType {
41  Unknown,
42  Global,
43  Scene,
44  Object,
45  Function,
46  };
47 
51  ObjectsContainer(const SourceType sourceType);
52  virtual ~ObjectsContainer();
53 
55  ObjectsContainer& operator=(const ObjectsContainer& rhs);
56 
57  SourceType GetSourceType() const { return sourceType; }
58 
63 
67  bool HasObjectNamed(const gd::String& name) const;
68 
72  gd::Object& GetObject(const gd::String& name);
73 
77  const gd::Object& GetObject(const gd::String& name) const;
78 
83  gd::Object& GetObject(std::size_t index);
84 
89  const gd::Object& GetObject(std::size_t index) const;
90 
99  std::size_t GetObjectPosition(const gd::String& name) const;
100 
104  std::size_t GetObjectsCount() const;
105 
113  gd::Object& InsertNewObject(const gd::Project& project,
114  const gd::String& objectType,
115  const gd::String& name,
116  std::size_t position);
124  gd::Object& InsertNewObjectInFolder(
125  const gd::Project& project,
126  const gd::String& objectType,
127  const gd::String& name,
128  gd::ObjectFolderOrObject& objectFolderOrObject,
129  std::size_t position);
130 
140  gd::Object& InsertObject(const gd::Object& object, std::size_t position);
141 
149  void RemoveObject(const gd::String& name);
150 
154  void MoveObject(std::size_t oldIndex, std::size_t newIndex);
155 
164  void MoveObjectFolderOrObjectToAnotherContainerInFolder(
165  gd::ObjectFolderOrObject& objectFolderOrObject,
166  gd::ObjectsContainer& newContainer,
167  gd::ObjectFolderOrObject& newParentFolder,
168  std::size_t newPosition);
169 
173  void Clear();
174 
178  std::vector<std::unique_ptr<gd::Object> >& GetObjects() {
179  return initialObjects;
180  }
181 
185  const std::vector<std::unique_ptr<gd::Object> >& GetObjects() const {
186  return initialObjects;
187  }
188 
189  std::set<gd::String> GetAllObjectNames() const;
191 
197  std::vector<const ObjectFolderOrObject*> GetAllObjectFolderOrObjects() const;
198 
199  gd::ObjectFolderOrObject& GetRootFolder() {
200  return *rootFolder;
201  }
202 
203  void AddMissingObjectsInRootFolder();
204 
209 
212  void SerializeObjectsTo(SerializerElement& element) const;
213 
217  void UnserializeObjectsFrom(gd::Project& project,
218  const SerializerElement& element);
222  void SerializeFoldersTo(SerializerElement& element) const;
223 
227  void UnserializeFoldersFrom(gd::Project& project,
228  const SerializerElement& element);
230 
235 
239  ObjectGroupsContainer& GetObjectGroups() { return objectGroups; }
240 
244  const ObjectGroupsContainer& GetObjectGroups() const { return objectGroups; }
245 
247 
248  protected:
249  std::vector<std::unique_ptr<gd::Object> >
251  gd::ObjectGroupsContainer objectGroups;
252 
253  private:
254  SourceType sourceType = Unknown;
255  std::unique_ptr<gd::ObjectFolderOrObject> rootFolder;
256  gd::MemoryTracked _memoryTracked{this, "ObjectsContainer"};
257 
262  void Init(const ObjectsContainer& other);
263 };
264 
265 } // namespace gd
Represent a layout ( also called a scene ) of a project.
Definition: Layout.h:41
A non-copyable, non-movable member object that registers/unregisters its owner with MemoryTrackedRegi...
Definition: MemoryTrackedRegistry.h:129
Class representing a folder structure in order to organize objects in folders (to be used with an Obj...
Definition: ObjectFolderOrObject.h:30
A container for objects groups.
Definition: ObjectGroupsContainer.h:30
Represent an object of a platform.
Definition: Object.h:39
Used as a base class for classes that will own objects (see gd::Object).
Definition: ObjectsContainer.h:38
std::vector< std::unique_ptr< gd::Object > > & GetObjects()
Definition: ObjectsContainer.h:178
const ObjectGroupsContainer & GetObjectGroups() const
Return a const reference to the project's objects groups.
Definition: ObjectsContainer.h:244
const std::vector< std::unique_ptr< gd::Object > > & GetObjects() const
Definition: ObjectsContainer.h:185
std::vector< std::unique_ptr< gd::Object > > initialObjects
Objects contained.
Definition: ObjectsContainer.h:250
ObjectGroupsContainer & GetObjectGroups()
Return a reference to the project's objects groups.
Definition: ObjectsContainer.h:239
Base class representing a project (game), including all resources, scenes, objects,...
Definition: Project.h:51
String represents an UTF8 encoded string.
Definition: String.h:33
Definition: CommonTools.h:24