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< bool(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(gd::Project &project,
191  const SerializerElement &element);
193 
194 private:
195  void RemoveInstanceIf(
196  std::function<bool(const gd::InitialInstance &)> predicate);
197 
198  std::list<gd::InitialInstance> initialInstances;
199 
200  static gd::InitialInstance badPosition;
201 };
202 
210 class GD_CORE_API InitialInstanceFunctor {
211  public:
213  virtual ~InitialInstanceFunctor();
214 
215  virtual void operator()(InitialInstance &instance) = 0;
216 };
217 
225  public:
227  : highestZOrder(0),
228  lowestZOrder(0),
229  instancesCount(0),
230  firstCall(true),
231  layerRestricted(false){};
232  virtual ~HighestZOrderFinder(){};
233 
234  virtual void operator()(gd::InitialInstance &instance);
235 
239  void RestrictSearchToLayer(const gd::String &layerName_) {
240  layerName = layerName_;
241  layerRestricted = true;
242  };
243 
248  int GetHighestZOrder() const { return highestZOrder; }
249 
254  int GetLowestZOrder() const { return lowestZOrder; }
255 
260  size_t GetInstancesCount() const { return instancesCount; }
261 
262  void Reset() {
263  highestZOrder = 0;
264  lowestZOrder = 0;
265  instancesCount = 0;
266  firstCall = true;
267  layerRestricted = false;
268  layerName.clear();
269  }
270 
271  private:
272  int highestZOrder;
273  int lowestZOrder;
274  size_t instancesCount;
275  bool firstCall;
276 
277  bool layerRestricted;
279  gd::String layerName;
280 };
281 
282 } // namespace gd
Tool class picking returning the highest Z order of instances on a layer.
Definition: InitialInstancesContainer.h:224
void RestrictSearchToLayer(const gd::String &layerName_)
Restrict to instances on the specified layer.
Definition: InitialInstancesContainer.h:239
int GetHighestZOrder() const
After calling the instances container iterate method with this functor, this method will return the h...
Definition: InitialInstancesContainer.h:248
int GetLowestZOrder() const
After calling the instances container iterate method with this functor, this method will return the l...
Definition: InitialInstancesContainer.h:254
size_t GetInstancesCount() const
After calling the instances container iterate method with this functor, this method will return the n...
Definition: InitialInstancesContainer.h:260
Tool class to be used with gd::InitialInstancesContainer::IterateOverInstances.
Definition: InitialInstancesContainer.h:210
Represents an instance of an object to be created on a layout start up.
Definition: InitialInstance.h:29
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
Base class representing a project (game), including all resources, scenes, objects,...
Definition: Project.h:50
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