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 
94  void IterateOverInstances(
95  const std::function< void(gd::InitialInstance &) >& func);
96 
105  void IterateOverInstancesWithZOrdering(InitialInstanceFunctor &func,
106  const gd::String &layer);
107 
112  InitialInstance &InsertInitialInstance(const InitialInstance &instance);
113 
118  InitialInstance &InsertNewInitialInstance();
119 
123  void RemoveInstance(const gd::InitialInstance &instance);
124 
128  void RemoveAllInstancesOnLayer(const gd::String &layerName);
129 
133  void MoveInstancesToLayer(const gd::String &fromLayer,
134  const gd::String &toLayer);
135 
139  void RemoveInitialInstancesOfObject(const gd::String &objectName);
140 
144  void RenameInstancesOfObject(const gd::String &oldName,
145  const gd::String &newName);
146 
150  std::size_t GetLayerInstancesCount(const gd::String &layerName) const;
151 
156  bool SomeInstancesAreOnLayer(const gd::String &layerName) const;
157 
161  bool HasInstancesOfObject(const gd::String &objectName) const;
162 
166  bool
167  IsInstancesCountOfObjectGreaterThan(const gd::String &objectName,
168  const std::size_t minInstanceCount) const;
169 
173  void Clear();
174 
176 
181 
185  virtual void SerializeTo(SerializerElement &element) const;
186 
190  virtual void UnserializeFrom(const SerializerElement &element);
192 
193  private:
194  void RemoveInstanceIf(
195  std::function<bool(const gd::InitialInstance &)> predicate);
196 
197  std::list<gd::InitialInstance> initialInstances;
198 
199  static gd::InitialInstance badPosition;
200 };
201 
209 class GD_CORE_API InitialInstanceFunctor {
210  public:
212  virtual ~InitialInstanceFunctor();
213 
214  virtual void operator()(InitialInstance &instance) = 0;
215 };
216 
224  public:
226  : highestZOrder(0),
227  lowestZOrder(0),
228  instancesCount(0),
229  firstCall(true),
230  layerRestricted(false){};
231  virtual ~HighestZOrderFinder(){};
232 
233  virtual void operator()(gd::InitialInstance &instance);
234 
238  void RestrictSearchToLayer(const gd::String &layerName_) {
239  layerName = layerName_;
240  layerRestricted = true;
241  };
242 
247  int GetHighestZOrder() const { return highestZOrder; }
248 
253  int GetLowestZOrder() const { return lowestZOrder; }
254 
259  size_t GetInstancesCount() const { return instancesCount; }
260 
261  void Reset() {
262  highestZOrder = 0;
263  lowestZOrder = 0;
264  instancesCount = 0;
265  firstCall = true;
266  layerRestricted = false;
267  layerName.clear();
268  }
269 
270  private:
271  int highestZOrder;
272  int lowestZOrder;
273  size_t instancesCount;
274  bool firstCall;
275 
276  bool layerRestricted;
278  gd::String layerName;
279 };
280 
281 } // namespace gd
Tool class picking returning the highest Z order of instances on a layer.
Definition: InitialInstancesContainer.h:223
void RestrictSearchToLayer(const gd::String &layerName_)
Restrict to instances on the specified layer.
Definition: InitialInstancesContainer.h:238
int GetHighestZOrder() const
After calling the instances container iterate method with this functor, this method will return the h...
Definition: InitialInstancesContainer.h:247
int GetLowestZOrder() const
After calling the instances container iterate method with this functor, this method will return the l...
Definition: InitialInstancesContainer.h:253
size_t GetInstancesCount() const
After calling the instances container iterate method with this functor, this method will return the n...
Definition: InitialInstancesContainer.h:259
Tool class to be used with gd::InitialInstancesContainer::IterateOverInstances.
Definition: InitialInstancesContainer.h:209
Represents an instance of an object to be created on a layout start up.
Definition: InitialInstance.h:26
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:33
Definition: CommonTools.h:24