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/String.h"
23 
24 namespace gd {
25 class BaseEvent;
26 class Object;
27 class Project;
28 class InitialInstancesContainer;
29 } // namespace gd
30 class BaseProfiler;
31 #undef GetObject // Disable an annoying macro
32 
33 namespace gd {
34 
40 class GD_CORE_API Layout {
41  public:
42  Layout();
43  Layout(const Layout&);
44  virtual ~Layout();
45  Layout& operator=(const Layout& rhs);
46 
50  Layout* Clone() const { return new Layout(*this); };
51 
56 
60  void SetName(const gd::String& name_);
61 
65  const gd::String& GetName() const { return name; };
66 
70  const gd::String& GetMangledName() const { return mangledName; };
71 
75  void SetBackgroundColor(unsigned int r, unsigned int g, unsigned int b) {
76  backgroundColorR = r;
77  backgroundColorG = g;
78  backgroundColorB = b;
79  }
80 
84  unsigned int GetBackgroundColorRed() const { return backgroundColorR; }
85 
89  unsigned int GetBackgroundColorGreen() const { return backgroundColorG; }
90 
94  unsigned int GetBackgroundColorBlue() const { return backgroundColorB; }
95 
99  const gd::String& GetWindowDefaultTitle() const { return title; };
100 
104  void SetWindowDefaultTitle(const gd::String& title_) { title = title_; };
105 
107 
111 
115  return objectsContainer;
116  }
117 
122  return objectsContainer;
123  }
125 
131 
135  return initialInstances;
136  }
137 
142  return initialInstances;
143  }
145 
150 
154  const gd::EventsList& GetEvents() const { return events; }
155 
159  gd::EventsList& GetEvents() { return events; }
160 
162 
167 
173  inline const gd::VariablesContainer& GetVariables() const {
174  return variables;
175  }
176 
182  inline gd::VariablesContainer& GetVariables() { return variables; }
183 
185 
189 
193  const gd::LayersContainer& GetLayers() const { return layers; }
194 
198  gd::LayersContainer& GetLayers() { return layers; }
199 
203  bool HasLayerNamed(const gd::String& name) const;
204 
208  Layer& GetLayer(const gd::String& name);
209 
213  const Layer& GetLayer(const gd::String& name) const;
214 
218  Layer& GetLayer(std::size_t index);
219 
223  const Layer& GetLayer(std::size_t index) const;
224 
228  std::size_t GetLayerPosition(const gd::String& name) const;
229 
233  std::size_t GetLayersCount() const;
234 
238  void InsertNewLayer(const gd::String& name, std::size_t position);
239 
243  void InsertLayer(const Layer& theLayer, std::size_t position);
244 
248  void RemoveLayer(const gd::String& name);
249 
253  void SwapLayers(std::size_t firstLayerIndex, std::size_t secondLayerIndex);
254 
258  void MoveLayer(std::size_t oldIndex, std::size_t newIndex);
260 
269  void UpdateBehaviorsSharedData(gd::Project& project);
270 
274  std::vector<gd::String> GetAllBehaviorSharedDataNames() const;
275 
279  bool HasBehaviorSharedData(const gd::String& behaviorName);
280 
284  const gd::BehaviorsSharedData& GetBehaviorSharedData(
285  const gd::String& behaviorName) const;
286 
290  gd::BehaviorsSharedData& GetBehaviorSharedData(
291  const gd::String& behaviorName);
292 
296  const std::map<gd::String, std::unique_ptr<gd::BehaviorsSharedData>>&
297  GetAllBehaviorSharedData() const;
298 
304  return editorSettings;
305  }
306 
311  gd::EditorSettings& GetAssociatedEditorSettings() { return editorSettings; }
312 
316 
319  void DisableInputWhenFocusIsLost(bool disable = true) {
320  disableInputWhenNotFocused = disable;
321  }
322 
326  bool IsInputDisabledWhenFocusIsLost() { return disableInputWhenNotFocused; }
327 
331  void SetStandardSortMethod(bool enable = true) {
332  standardSortMethod = enable;
333  }
334 
338  bool StandardSortMethod() const { return standardSortMethod; }
339 
343  void SetStopSoundsOnStartup(bool enable = true) {
344  stopSoundsOnStartup = enable;
345  }
346 
351  bool StopSoundsOnStartup() const { return stopSoundsOnStartup; }
352 
357  void SetResourcesPreloading(gd::String resourcesPreloading_) {
358  resourcesPreloading = resourcesPreloading_;
359  }
360 
366  return resourcesPreloading;
367  }
368 
373  void SetResourcesUnloading(gd::String resourcesUnloading_) {
374  resourcesUnloading = resourcesUnloading_;
375  }
376 
381  const gd::String& GetResourcesUnloading() const { return resourcesUnloading; }
383 
388 
391  void SerializeTo(SerializerElement& element) const;
392 
396  void UnserializeFrom(gd::Project& project, const SerializerElement& element);
398 
399  private:
400  gd::String name;
401  gd::String mangledName;
402  unsigned int backgroundColorR = 0;
403  unsigned int backgroundColorG = 0;
404  unsigned int backgroundColorB = 0;
405  gd::String title;
406  gd::VariablesContainer variables;
407  gd::ObjectsContainer objectsContainer;
408  gd::InitialInstancesContainer initialInstances;
409  gd::LayersContainer layers;
410  std::map<gd::String, std::unique_ptr<gd::BehaviorsSharedData>>
411  behaviorsSharedData;
412  bool stopSoundsOnStartup = true;
414  gd::String
415  resourcesPreloading;
416  gd::String
417  resourcesUnloading;
418  bool standardSortMethod = true;
419  bool disableInputWhenNotFocused = true;
423  badBehaviorSharedData;
426 
427  EventsList events;
428  gd::EditorSettings editorSettings;
429 
434  void Init(const gd::Layout& other);
435 
436  std::unique_ptr<gd::BehaviorsSharedData> CreateBehaviorsSharedData(
437  gd::Project& project,
438  const gd::String& name,
439  const gd::String& behaviorsType);
440 };
441 
447 std::vector<gd::String> GetHiddenLayers(const Layout& layout);
448 
458 gd::String GD_CORE_API GetTypeOfObject(const ObjectsContainer& game,
459  const ObjectsContainer& layout,
460  gd::String objectName,
461  bool searchInGroups = true);
467 bool GD_CORE_API HasBehaviorInObjectOrGroup(const gd::ObjectsContainer& project,
468  const gd::ObjectsContainer& layout,
469  const gd::String& objectOrGroupName,
470  const gd::String& behaviorName,
471  bool searchInGroups = true);
476 std::vector<gd::String> GD_CORE_API
478  const gd::ObjectsContainer& layout,
479  const gd::String& objectOrGroupName,
480  const gd::String& behaviorType,
481  bool searchInGroups);
482 
487 bool GD_CORE_API IsDefaultBehavior(const gd::ObjectsContainer& project,
488  const gd::ObjectsContainer& layout,
489  gd::String objectOrGroupName,
490  gd::String behaviorName,
491  bool searchInGroups = true);
492 
497 gd::String GD_CORE_API
499  const gd::ObjectsContainer& layout,
500  const gd::String& objectOrGroupName,
501  const gd::String& behaviorName,
502  bool searchInGroups = true);
508 gd::String GD_CORE_API GetTypeOfBehavior(const ObjectsContainer& game,
509  const ObjectsContainer& layout,
510  gd::String behaviorName,
511  bool searchInGroups = true);
512 
520 std::vector<gd::String> GD_CORE_API
521 GetBehaviorsOfObject(const ObjectsContainer& game,
522  const ObjectsContainer& layout,
523  const gd::String& objectName,
524  bool searchInGroups = true);
525 
526 } // namespace gd
527 
528 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:38
Represents a layer of a layout.
Definition: Layer.h:91
Contains the layers for a scene or a custom object.
Definition: LayersContainer.h:21
Represent a layout ( also called a scene ) of a project.
Definition: Layout.h:40
bool StopSoundsOnStartup() const
Definition: Layout.h:351
bool StandardSortMethod() const
Definition: Layout.h:338
const gd::String & GetMangledName() const
Definition: Layout.h:70
gd::ObjectsContainer & GetObjects()
return the objects of the scene.
Definition: Layout.h:114
unsigned int GetBackgroundColorGreen() const
Definition: Layout.h:89
void SetStandardSortMethod(bool enable=true)
Definition: Layout.h:331
gd::InitialInstancesContainer & GetInitialInstances()
Definition: Layout.h:141
bool IsInputDisabledWhenFocusIsLost()
Definition: Layout.h:326
void SetBackgroundColor(unsigned int r, unsigned int g, unsigned int b)
Definition: Layout.h:75
const gd::ObjectsContainer & GetObjects() const
Return the objects of the scene.
Definition: Layout.h:121
const gd::VariablesContainer & GetVariables() const
Get the variables of the scene.
Definition: Layout.h:173
const gd::String & GetResourcesUnloading() const
Definition: Layout.h:381
const gd::String & GetResourcesPreloading() const
Definition: Layout.h:365
const gd::EventsList & GetEvents() const
Definition: Layout.h:154
gd::EditorSettings & GetAssociatedEditorSettings()
Definition: Layout.h:311
const gd::LayersContainer & GetLayers() const
Get the layers of the scene.
Definition: Layout.h:193
const gd::String & GetName() const
Definition: Layout.h:65
const gd::String & GetWindowDefaultTitle() const
Definition: Layout.h:99
unsigned int GetBackgroundColorBlue() const
Definition: Layout.h:94
const gd::EditorSettings & GetAssociatedEditorSettings() const
Definition: Layout.h:303
void SetResourcesPreloading(gd::String resourcesPreloading_)
Definition: Layout.h:357
const gd::InitialInstancesContainer & GetInitialInstances() const
Definition: Layout.h:134
unsigned int GetBackgroundColorRed() const
Definition: Layout.h:84
void SetStopSoundsOnStartup(bool enable=true)
Definition: Layout.h:343
gd::LayersContainer & GetLayers()
Get the layers of the scene.
Definition: Layout.h:198
void DisableInputWhenFocusIsLost(bool disable=true)
Definition: Layout.h:319
gd::EventsList & GetEvents()
Definition: Layout.h:159
Layout * Clone() const
Return a pointer to a copy of the layout.
Definition: Layout.h:50
gd::VariablesContainer & GetVariables()
Get the variables of the scene.
Definition: Layout.h:182
void SetResourcesUnloading(gd::String resourcesUnloading_)
Definition: Layout.h:373
void SetWindowDefaultTitle(const gd::String &title_)
Definition: Layout.h:104
Used as a base class for classes that will own objects (see gd::Object).
Definition: ObjectsContainer.h:37
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
Class defining a container for gd::Variable.
Definition: VariablesContainer.h:28
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