GDevelop Core
Core library for developing platforms and tools compatible with GDevelop.
Event.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 #pragma once
7 
8 #include <iostream>
9 #include <memory>
10 #include <vector>
11 
12 #include "GDCore/Events/Instruction.h"
13 #include "GDCore/Events/InstructionsList.h"
14 #include "GDCore/Extensions/Metadata/InstructionMetadata.h"
15 #include "GDCore/String.h"
16 namespace gd {
17 class EventsList;
18 class Project;
19 class Layout;
20 class EventsCodeGenerator;
21 class EventsCodeGenerationContext;
22 class Platform;
23 class SerializerElement;
24 class Instruction;
25 class EventVisitor;
26 class ReadOnlyEventVisitor;
27 class VariablesContainer;
28 } // namespace gd
29 
30 namespace gd {
31 
32 class BaseEvent;
33 typedef std::shared_ptr<BaseEvent> BaseEventSPtr;
34 
43 class GD_CORE_API BaseEvent {
44  public:
45  BaseEvent();
46  virtual ~BaseEvent(){};
47 
58  virtual gd::BaseEvent* Clone() const { return new BaseEvent(*this); }
59 
65 
70  virtual bool IsExecutable() const { return false; };
71 
76  virtual bool CanHaveSubEvents() const { return false; }
77 
81  virtual const gd::EventsList& GetSubEvents() const { return badSubEvents; };
82 
86  virtual gd::EventsList& GetSubEvents() { return badSubEvents; };
87 
92  bool HasSubEvents() const;
93 
98  virtual bool CanHaveVariables() const { return false; }
99 
103  virtual const gd::VariablesContainer& GetVariables() const {
104  return badLocalVariables;
105  };
106 
111  return badLocalVariables;
112  };
113 
118  bool HasVariables() const;
119 
124  virtual std::vector<gd::InstructionsList*> GetAllConditionsVectors() {
125  std::vector<gd::InstructionsList*> noConditions;
126  return noConditions;
127  };
128  virtual std::vector<const gd::InstructionsList*> GetAllConditionsVectors()
129  const {
130  std::vector<const gd::InstructionsList*> noConditions;
131  return noConditions;
132  };
133 
138  virtual std::vector<gd::InstructionsList*> GetAllActionsVectors() {
139  std::vector<gd::InstructionsList*> noActions;
140  return noActions;
141  };
142  virtual std::vector<const gd::InstructionsList*> GetAllActionsVectors()
143  const {
144  std::vector<const gd::InstructionsList*> noActions;
145  return noActions;
146  };
147 
152  virtual std::vector<gd::String> GetAllSearchableStrings() const {
153  std::vector<gd::String> noSearchableStrings;
154  return noSearchableStrings;
155  };
156 
157  virtual bool ReplaceAllSearchableStrings(
158  std::vector<gd::String> newSearchableString) {
159  return false;
160  };
161 
166  virtual std::vector<std::pair<gd::Expression*, gd::ParameterMetadata> >
168  std::vector<std::pair<gd::Expression*, gd::ParameterMetadata> > noExpr;
169  return noExpr;
170  };
171  virtual std::vector<
172  std::pair<const gd::Expression*, const gd::ParameterMetadata> >
173  GetAllExpressionsWithMetadata() const {
174  std::vector<std::pair<const gd::Expression*, const gd::ParameterMetadata> >
175  noExpr;
176  return noExpr;
177  };
178 
185  virtual const std::vector<gd::String>& GetSourceFileDependencies() const {
186  return emptyDependencies;
187  };
188 
195  gd::Project& project) const {
196  return emptySourceFile;
197  };
199 
204 
218  virtual gd::String GenerateEventCode(
219  gd::EventsCodeGenerator& codeGenerator,
221 
235  virtual void Preprocess(gd::EventsCodeGenerator& codeGenerator,
236  gd::EventsList& eventList,
237  std::size_t indexOfTheEventInThisList);
238 
242  void PreprocessAsyncActions(const gd::Platform& platform);
243 
252  virtual bool MustBePreprocessed() { return false; }
254 
258 
261  virtual void SerializeTo(SerializerElement& element) const {};
262 
266  virtual void UnserializeFrom(gd::Project& project,
267  const SerializerElement& element){};
268 
269  virtual bool AcceptVisitor(gd::EventVisitor& eventVisitor);
270  virtual void AcceptVisitor(gd::ReadOnlyEventVisitor& eventVisitor) const;
272 
278 
282  const gd::String& GetType() const { return type; };
283 
287  void SetType(gd::String type_) { type = type_; };
288 
292  void SetDisabled(bool disable = true) { disabled = disable; }
293 
297  bool IsDisabled() const { return disabled; }
298 
303  void SetFolded(bool fold = true) { folded = fold; }
304 
308  bool IsFolded() const { return folded; }
310 
311  std::weak_ptr<gd::BaseEvent>
315  signed long long
321 
322  private:
323  bool folded;
324  bool disabled;
325  gd::String type;
327 
328  static gd::EventsList badSubEvents;
329  static gd::VariablesContainer badLocalVariables;
330  static std::vector<gd::String> emptyDependencies;
331  static gd::String emptySourceFile;
332 };
333 
341 BaseEventSPtr GD_CORE_API CloneRememberingOriginalEvent(BaseEventSPtr event);
342 
347 class EmptyEvent : public BaseEvent {
348  public:
349  EmptyEvent() : BaseEvent(){};
350  virtual ~EmptyEvent(){};
351 };
352 
353 } // namespace gd
Base class defining an event.
Definition: Event.h:43
float percentDuringLastSession
Definition: Event.h:319
void SetType(gd::String type_)
Change the event type.
Definition: Event.h:287
virtual std::vector< gd::InstructionsList * > GetAllActionsVectors()
Return a list of all actions of the event.
Definition: Event.h:138
virtual const std::vector< gd::String > & GetSourceFileDependencies() const
Returns the dependencies on source files of the project.
Definition: Event.h:185
virtual std::vector< std::pair< gd::Expression *, gd::ParameterMetadata > > GetAllExpressionsWithMetadata()
Return a list of all expressions of the event, each with their associated metadata.
Definition: Event.h:167
virtual gd::BaseEvent * Clone() const
Definition: Event.h:58
virtual std::vector< gd::InstructionsList * > GetAllConditionsVectors()
Return a list of all conditions of the event.
Definition: Event.h:124
virtual bool CanHaveSubEvents() const
Definition: Event.h:76
virtual void SerializeTo(SerializerElement &element) const
Serialize event.
Definition: Event.h:261
virtual bool CanHaveVariables() const
Definition: Event.h:98
void SetFolded(bool fold=true)
Set if the event must be folded (i.e: sub events must be hidden in the events editor).
Definition: Event.h:303
bool IsDisabled() const
True if event is disabled.
Definition: Event.h:297
virtual void UnserializeFrom(gd::Project &project, const SerializerElement &element)
Unserialize the event.
Definition: Event.h:266
virtual bool MustBePreprocessed()
If MustBePreprocessed is redefined to return true, the gd::EventMetadata::preprocessing associated to...
Definition: Event.h:252
virtual std::vector< gd::String > GetAllSearchableStrings() const
Return a list of all strings of the event.
Definition: Event.h:152
virtual bool IsExecutable() const
Definition: Event.h:70
virtual gd::EventsList & GetSubEvents()
Definition: Event.h:86
void SetDisabled(bool disable=true)
Set if the event if disabled or not.
Definition: Event.h:292
virtual const gd::EventsList & GetSubEvents() const
Definition: Event.h:81
std::weak_ptr< gd::BaseEvent > originalEvent
Definition: Event.h:312
bool IsFolded() const
True if the event should be folded in the events editor.
Definition: Event.h:308
const gd::String & GetType() const
Return the event type.
Definition: Event.h:282
virtual const gd::VariablesContainer & GetVariables() const
Definition: Event.h:103
virtual gd::VariablesContainer & GetVariables()
Definition: Event.h:110
signed long long totalTimeDuringLastSession
Definition: Event.h:316
virtual const gd::String & GetAssociatedGDManagedSourceFile(gd::Project &project) const
Returns the name of the source file associated with the event.
Definition: Event.h:194
Empty event doing nothing.
Definition: Event.h:347
Visitor of any kind of event.
Definition: EventVisitor.h:26
Used to manage the context when generating code for events.
Definition: EventsCodeGenerationContext.h:27
Internal class used to generate code from events.
Definition: EventsCodeGenerator.h:41
A list of events.
Definition: EventsList.h:32
Base class for implementing a platform.
Definition: Platform.h:42
Base class representing a project (game), including all resources, scenes, objects,...
Definition: Project.h:51
Visitor of any kind of event.
Definition: EventVisitor.h:54
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
BaseEventSPtr GD_CORE_API CloneRememberingOriginalEvent(BaseEventSPtr event)
Definition: Event.cpp:155
Definition: CommonTools.h:24