GDevelop Core
Core library for developing platforms and tools compatible with GDevelop.
EffectsContainer.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 #ifndef GDCORE_EFFECTS_CONTAINER_H
7 #define GDCORE_EFFECTS_CONTAINER_H
8 #include <memory>
9 #include <vector>
10 #include <algorithm>
11 
12 #include "GDCore/Project/MemoryTrackedRegistry.h"
13 #include "GDCore/String.h"
14 
15 namespace gd {
16 class Effect;
17 }
18 namespace gd {
19 class SerializerElement;
20 }
21 
22 namespace gd {
23 
30 class GD_CORE_API EffectsContainer {
31  public:
33  EffectsContainer(const EffectsContainer& other);
34  virtual ~EffectsContainer(){};
35 
36  EffectsContainer& operator=(const EffectsContainer& rhs);
40  bool HasEffectNamed(const gd::String& name) const;
41 
45  Effect& GetEffect(const gd::String& name);
46 
50  const Effect& GetEffect(const gd::String& name) const;
51 
55  Effect& GetEffect(std::size_t index);
56 
60  const Effect& GetEffect(std::size_t index) const;
61 
65  std::size_t GetEffectPosition(const gd::String& name) const;
66 
70  std::size_t GetEffectsCount() const;
71 
75  gd::Effect& InsertNewEffect(const gd::String& name, std::size_t position);
76 
87  void InsertEffect(const Effect& theEffect, std::size_t position);
88 
92  void RemoveEffect(const gd::String& name);
93 
97  void MoveEffect(std::size_t oldIndex, std::size_t newIndex);
98 
102  void SwapEffects(std::size_t firstEffectIndex, std::size_t secondEffectIndex);
103 
107  void SerializeTo(SerializerElement& element) const;
108 
112  void UnserializeFrom(const SerializerElement& element);
113 
117  inline void Clear() { effects.clear(); }
118 
119  private:
120  std::vector<std::shared_ptr<gd::Effect>> effects;
121  static Effect badEffect;
122  void Init(const EffectsContainer& other);
123  gd::MemoryTracked _memoryTracked{this, "EffectsContainer"};
124 };
125 } // namespace gd
126 
127 #endif
Represents an effect that can be applied on a layer.
Definition: Effect.h:21
Contains effects applied to an entity on screen (i.e: a Layer or an Object).
Definition: EffectsContainer.h:30
void Clear()
Clear all effects of the container.
Definition: EffectsContainer.h:117
A non-copyable, non-movable member object that registers/unregisters its owner with MemoryTrackedRegi...
Definition: MemoryTrackedRegistry.h:238
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