GDevelop Core
Core library for developing platforms and tools compatible with GDevelop.
InitialInstancesContainer.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 
7 #pragma once
8 
9 #include <list>
10 #include "GDCore/Project/InitialInstance.h"
11 #include "GDCore/String.h"
12 namespace gd {
13 class InitialInstanceFunctor;
14 }
15 namespace gd {
16 class Project;
17 }
18 namespace gd {
19 class SerializerElement;
20 }
21 
22 namespace gd {
23 
38 class GD_CORE_API InitialInstancesContainer {
39  public:
41  virtual ~InitialInstancesContainer();
42 
54  return new InitialInstancesContainer(*this);
55  };
56 
72  void Create(const InitialInstancesContainer &source);
73 
78 
82  std::size_t GetInstancesCount() const;
83 
88  void IterateOverInstances(InitialInstanceFunctor &func);
89 
98  void IterateOverInstancesWithZOrdering(InitialInstanceFunctor &func,
99  const gd::String &layer);
100 
105  InitialInstance &InsertInitialInstance(const InitialInstance &instance);
106 
111  InitialInstance &InsertNewInitialInstance();
112 
116  void RemoveInstance(const gd::InitialInstance &instance);
117 
121  void RemoveAllInstancesOnLayer(const gd::String &layerName);
122 
126  void MoveInstancesToLayer(const gd::String &fromLayer,
127  const gd::String &toLayer);
128 
132  void RemoveInitialInstancesOfObject(const gd::String &objectName);
133 
137  void RenameInstancesOfObject(const gd::String &oldName,
138  const gd::String &newName);
139 
143  std::size_t GetLayerInstancesCount(const gd::String &layerName) const;
144 
149  bool SomeInstancesAreOnLayer(const gd::String &layerName) const;
150 
154  bool HasInstancesOfObject(const gd::String &objectName) const;
155 
159  void Clear();
160 
162 
167 
171  virtual void SerializeTo(SerializerElement &element) const;
172 
176  virtual void UnserializeFrom(const SerializerElement &element);
178 
179  private:
180  void RemoveInstanceIf(
181  std::function<bool(const gd::InitialInstance &)> predicate);
182 
183  std::list<gd::InitialInstance> initialInstances;
184 
185  static gd::InitialInstance badPosition;
186 };
187 
195 class GD_CORE_API InitialInstanceFunctor {
196  public:
198  virtual ~InitialInstanceFunctor();
199 
200  virtual void operator()(InitialInstance &instance) = 0;
201 };
202 
210  public:
212  : highestZOrder(0),
213  lowestZOrder(0),
214  instancesCount(0),
215  firstCall(true),
216  layerRestricted(false){};
217  virtual ~HighestZOrderFinder(){};
218 
219  virtual void operator()(gd::InitialInstance &instance);
220 
224  void RestrictSearchToLayer(const gd::String &layerName_) {
225  layerName = layerName_;
226  layerRestricted = true;
227  };
228 
233  int GetHighestZOrder() const { return highestZOrder; }
234 
239  int GetLowestZOrder() const { return lowestZOrder; }
240 
245  size_t GetInstancesCount() const { return instancesCount; }
246 
247  void Reset() {
248  highestZOrder = 0;
249  lowestZOrder = 0;
250  instancesCount = 0;
251  firstCall = true;
252  layerRestricted = false;
253  layerName.clear();
254  }
255 
256  private:
257  int highestZOrder;
258  int lowestZOrder;
259  size_t instancesCount;
260  bool firstCall;
261 
262  bool layerRestricted;
264  gd::String layerName;
265 };
266 
267 } // namespace gd
Tool class picking returning the highest Z order of instances on a layer.
Definition: InitialInstancesContainer.h:209
void RestrictSearchToLayer(const gd::String &layerName_)
Restrict to instances on the specified layer.
Definition: InitialInstancesContainer.h:224
int GetHighestZOrder() const
After calling the instances container iterate method with this functor, this method will return the h...
Definition: InitialInstancesContainer.h:233
int GetLowestZOrder() const
After calling the instances container iterate method with this functor, this method will return the l...
Definition: InitialInstancesContainer.h:239
size_t GetInstancesCount() const
After calling the instances container iterate method with this functor, this method will return the n...
Definition: InitialInstancesContainer.h:245
Tool class to be used with gd::InitialInstancesContainer::IterateOverInstances.
Definition: InitialInstancesContainer.h:195
Represents an instance of an object to be created on a layout start up.
Definition: InitialInstance.h:25
Defines a container of gd::InitialInstances.
Definition: InitialInstancesContainer.h:38
InitialInstancesContainer * Clone() const
Return a pointer to a copy of the container. A such method is needed as the IDE may want to store cop...
Definition: InitialInstancesContainer.h:53
A generic container that can represent a value ( containing a string, double, bool or int),...
Definition: SerializerElement.h:37
String represents an UTF8 encoded string.
Definition: String.h:31
Definition: CommonTools.h:24