GDevelop Core
Core library for developing platforms and tools compatible with GDevelop.
Layout.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 <map>
10 #include <memory>
11 #include <vector>
12 
13 #include "GDCore/Events/EventsList.h"
14 #include "GDCore/IDE/Dialogs/LayoutEditorCanvas/EditorSettings.h"
15 #include "GDCore/Project/BehaviorsSharedData.h"
16 #include "GDCore/Project/InitialInstancesContainer.h"
17 #include "GDCore/Project/Layer.h"
18 #include "GDCore/Project/LayersContainer.h"
19 #include "GDCore/Project/ObjectGroupsContainer.h"
20 #include "GDCore/Project/ObjectsContainer.h"
21 #include "GDCore/Project/VariablesContainer.h"
22 #include "GDCore/Project/MemoryTrackedRegistry.h"
23 #include "GDCore/String.h"
24 
25 namespace gd {
26 class BaseEvent;
27 class Object;
28 class Project;
29 class InitialInstancesContainer;
30 } // namespace gd
31 class BaseProfiler;
32 #undef GetObject // Disable an annoying macro
33 
34 namespace gd {
35 
41 class GD_CORE_API Layout {
42  public:
43  Layout();
44  Layout(const Layout&);
45  virtual ~Layout();
46  Layout& operator=(const Layout& rhs);
47 
51  Layout* Clone() const { return new Layout(*this); };
52 
57 
61  void SetName(const gd::String& name_);
62 
66  const gd::String& GetName() const { return name; };
67 
71  const gd::String& GetMangledName() const { return mangledName; };
72 
76  void SetBackgroundColor(unsigned int r, unsigned int g, unsigned int b) {
77  backgroundColorR = r;
78  backgroundColorG = g;
79  backgroundColorB = b;
80  }
81 
85  unsigned int GetBackgroundColorRed() const { return backgroundColorR; }
86 
90  unsigned int GetBackgroundColorGreen() const { return backgroundColorG; }
91 
95  unsigned int GetBackgroundColorBlue() const { return backgroundColorB; }
96 
100  const gd::String& GetWindowDefaultTitle() const { return title; };
101 
105  void SetWindowDefaultTitle(const gd::String& title_) { title = title_; };
106 
108 
112 
116  return objectsContainer;
117  }
118 
123  return objectsContainer;
124  }
126 
132 
136  return initialInstances;
137  }
138 
143  return initialInstances;
144  }
146 
151 
155  const gd::EventsList& GetEvents() const { return events; }
156 
160  gd::EventsList& GetEvents() { return events; }
161 
163 
168 
174  inline const gd::VariablesContainer& GetVariables() const {
175  return variables;
176  }
177 
183  inline gd::VariablesContainer& GetVariables() { return variables; }
184 
186 
190 
194  const gd::LayersContainer& GetLayers() const { return layers; }
195 
199  gd::LayersContainer& GetLayers() { return layers; }
200 
204  bool HasLayerNamed(const gd::String& name) const;
205 
209  Layer& GetLayer(const gd::String& name);
210 
214  const Layer& GetLayer(const gd::String& name) const;
215 
219  Layer& GetLayer(std::size_t index);
220 
224  const Layer& GetLayer(std::size_t index) const;
225 
229  std::size_t GetLayerPosition(const gd::String& name) const;
230 
234  std::size_t GetLayersCount() const;
235 
239  void InsertNewLayer(const gd::String& name, std::size_t position);
240 
244  void InsertLayer(const Layer& theLayer, std::size_t position);
245 
249  void RemoveLayer(const gd::String& name);
250 
254  void SwapLayers(std::size_t firstLayerIndex, std::size_t secondLayerIndex);
255 
259  void MoveLayer(std::size_t oldIndex, std::size_t newIndex);
261 
270  void UpdateBehaviorsSharedData(gd::Project& project);
271 
275  std::vector<gd::String> GetAllBehaviorSharedDataNames() const;
276 
280  bool HasBehaviorSharedData(const gd::String& behaviorName);
281 
285  const gd::BehaviorsSharedData& GetBehaviorSharedData(
286  const gd::String& behaviorName) const;
287 
291  gd::BehaviorsSharedData& GetBehaviorSharedData(
292  const gd::String& behaviorName);
293 
297  const std::map<gd::String, std::unique_ptr<gd::BehaviorsSharedData>>&
298  GetAllBehaviorSharedData() const;
299 
305  return editorSettings;
306  }
307 
312  gd::EditorSettings& GetAssociatedEditorSettings() { return editorSettings; }
313 
317 
320  void DisableInputWhenFocusIsLost(bool disable = true) {
321  disableInputWhenNotFocused = disable;
322  }
323 
327  bool IsInputDisabledWhenFocusIsLost() { return disableInputWhenNotFocused; }
328 
332  void SetStandardSortMethod(bool enable = true) {
333  standardSortMethod = enable;
334  }
335 
339  bool StandardSortMethod() const { return standardSortMethod; }
340 
344  void SetStopSoundsOnStartup(bool enable = true) {
345  stopSoundsOnStartup = enable;
346  }
347 
352  bool StopSoundsOnStartup() const { return stopSoundsOnStartup; }
353 
358  void SetResourcesPreloading(gd::String resourcesPreloading_) {
359  resourcesPreloading = resourcesPreloading_;
360  }
361 
367  return resourcesPreloading;
368  }
369 
374  void SetResourcesUnloading(gd::String resourcesUnloading_) {
375  resourcesUnloading = resourcesUnloading_;
376  }
377 
382  const gd::String& GetResourcesUnloading() const { return resourcesUnloading; }
384 
389 
392  void SerializeTo(SerializerElement& element) const;
393 
397  void UnserializeFrom(gd::Project& project, const SerializerElement& element);
399 
400  private:
401  gd::MemoryTracked _memoryTracked{this, "Layout"};
402 
403  gd::String name;
404  gd::String mangledName;
405  unsigned int backgroundColorR = 0;
406  unsigned int backgroundColorG = 0;
407  unsigned int backgroundColorB = 0;
408  gd::String title;
409  gd::VariablesContainer variables;
410  gd::ObjectsContainer objectsContainer;
411  gd::InitialInstancesContainer initialInstances;
412  gd::LayersContainer layers;
413  std::map<gd::String, std::unique_ptr<gd::BehaviorsSharedData>>
414  behaviorsSharedData;
415  bool stopSoundsOnStartup = true;
417  gd::String
418  resourcesPreloading;
419  gd::String
420  resourcesUnloading;
421  bool standardSortMethod = true;
422  bool disableInputWhenNotFocused = true;
426  badBehaviorSharedData;
429 
430  EventsList events;
431  gd::EditorSettings editorSettings;
432 
437  void Init(const gd::Layout& other);
438 
439  std::unique_ptr<gd::BehaviorsSharedData> CreateBehaviorsSharedData(
440  gd::Project& project,
441  const gd::String& name,
442  const gd::String& behaviorsType);
443 };
444 
450 std::vector<gd::String> GetHiddenLayers(const Layout& layout);
451 
461 gd::String GD_CORE_API GetTypeOfObject(const ObjectsContainer& game,
462  const ObjectsContainer& layout,
463  gd::String objectName,
464  bool searchInGroups = true);
470 bool GD_CORE_API HasBehaviorInObjectOrGroup(const gd::ObjectsContainer& project,
471  const gd::ObjectsContainer& layout,
472  const gd::String& objectOrGroupName,
473  const gd::String& behaviorName,
474  bool searchInGroups = true);
479 std::vector<gd::String> GD_CORE_API
481  const gd::ObjectsContainer& layout,
482  const gd::String& objectOrGroupName,
483  const gd::String& behaviorType,
484  bool searchInGroups);
485 
490 bool GD_CORE_API IsDefaultBehavior(const gd::ObjectsContainer& project,
491  const gd::ObjectsContainer& layout,
492  gd::String objectOrGroupName,
493  gd::String behaviorName,
494  bool searchInGroups = true);
495 
500 gd::String GD_CORE_API
502  const gd::ObjectsContainer& layout,
503  const gd::String& objectOrGroupName,
504  const gd::String& behaviorName,
505  bool searchInGroups = true);
511 gd::String GD_CORE_API GetTypeOfBehavior(const ObjectsContainer& game,
512  const ObjectsContainer& layout,
513  gd::String behaviorName,
514  bool searchInGroups = true);
515 
523 std::vector<gd::String> GD_CORE_API
524 GetBehaviorsOfObject(const ObjectsContainer& game,
525  const ObjectsContainer& layout,
526  const gd::String& objectName,
527  bool searchInGroups = true);
528 
529 } // namespace gd
530 
531 typedef gd::Layout Scene;
Base class for defining data shared by behaviors having the same type and name.
Definition: BehaviorsSharedData.h:24
Container for arbitrary serialized data to be used by the editor to store settings.
Definition: EditorSettings.h:19
A list of events.
Definition: EventsList.h:32
Defines a container of gd::InitialInstances.
Definition: InitialInstancesContainer.h:39
Represents a layer of a layout.
Definition: Layer.h:91
Contains the layers for a scene or a custom object.
Definition: LayersContainer.h:22
Represent a layout ( also called a scene ) of a project.
Definition: Layout.h:41
bool StopSoundsOnStartup() const
Definition: Layout.h:352
bool StandardSortMethod() const
Definition: Layout.h:339
const gd::String & GetMangledName() const
Definition: Layout.h:71
gd::ObjectsContainer & GetObjects()
return the objects of the scene.
Definition: Layout.h:115
unsigned int GetBackgroundColorGreen() const
Definition: Layout.h:90
void SetStandardSortMethod(bool enable=true)
Definition: Layout.h:332
gd::InitialInstancesContainer & GetInitialInstances()
Definition: Layout.h:142
bool IsInputDisabledWhenFocusIsLost()
Definition: Layout.h:327
void SetBackgroundColor(unsigned int r, unsigned int g, unsigned int b)
Definition: Layout.h:76
const gd::ObjectsContainer & GetObjects() const
Return the objects of the scene.
Definition: Layout.h:122
const gd::VariablesContainer & GetVariables() const
Get the variables of the scene.
Definition: Layout.h:174
const gd::String & GetResourcesUnloading() const
Definition: Layout.h:382
const gd::String & GetResourcesPreloading() const
Definition: Layout.h:366
const gd::EventsList & GetEvents() const
Definition: Layout.h:155
gd::EditorSettings & GetAssociatedEditorSettings()
Definition: Layout.h:312
const gd::LayersContainer & GetLayers() const
Get the layers of the scene.
Definition: Layout.h:194
const gd::String & GetName() const
Definition: Layout.h:66
const gd::String & GetWindowDefaultTitle() const
Definition: Layout.h:100
unsigned int GetBackgroundColorBlue() const
Definition: Layout.h:95
const gd::EditorSettings & GetAssociatedEditorSettings() const
Definition: Layout.h:304
void SetResourcesPreloading(gd::String resourcesPreloading_)
Definition: Layout.h:358
const gd::InitialInstancesContainer & GetInitialInstances() const
Definition: Layout.h:135
unsigned int GetBackgroundColorRed() const
Definition: Layout.h:85
void SetStopSoundsOnStartup(bool enable=true)
Definition: Layout.h:344
gd::LayersContainer & GetLayers()
Get the layers of the scene.
Definition: Layout.h:199
void DisableInputWhenFocusIsLost(bool disable=true)
Definition: Layout.h:320
gd::EventsList & GetEvents()
Definition: Layout.h:160
Layout * Clone() const
Return a pointer to a copy of the layout.
Definition: Layout.h:51
gd::VariablesContainer & GetVariables()
Get the variables of the scene.
Definition: Layout.h:183
void SetResourcesUnloading(gd::String resourcesUnloading_)
Definition: Layout.h:374
void SetWindowDefaultTitle(const gd::String &title_)
Definition: Layout.h:105
A non-copyable, non-movable member object that registers/unregisters its owner with MemoryTrackedRegi...
Definition: MemoryTrackedRegistry.h:129
Used as a base class for classes that will own objects (see gd::Object).
Definition: ObjectsContainer.h:38
Base class representing a project (game), including all resources, scenes, objects,...
Definition: Project.h:51
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
Class defining a container for gd::Variable.
Definition: VariablesContainer.h:29
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:434
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:522
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:689
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:744
bool GD_CORE_API IsDefaultBehavior(const gd::ObjectsContainer &project, const gd::ObjectsContainer &layout, gd::String objectOrGroupName, gd::String behaviorName, bool searchInGroups)
Check if a behavior is a default one or doesn't exist in an object or all objects of a group.
Definition: Layout.cpp:638
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:766
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:591
std::vector< gd::String > GetHiddenLayers(const Layout &layout)
Get the names of all layers from the given layout that are invisible.
Definition: Layout.cpp:423