libscratchcpp
A library for C++ based Scratch project players
Loading...
Searching...
No Matches
iengine.h
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2
3#pragma once
4
5#include <memory>
6#include <vector>
7#include <unordered_map>
8#include <unordered_set>
9
10#include "global.h"
11#include "signal.h"
12
13namespace libscratchcpp
14{
15
16class IExtension;
17class Broadcast;
18class Block;
19class Field;
20class Drawable;
21class Target;
22class Sprite;
23class Stage;
24class Variable;
25class List;
26class Script;
27class StringPtr;
28class Thread;
29class ITimer;
30class KeyEvent;
31class Monitor;
32class IMonitorHandler;
33
41{
42 public:
43 virtual ~IEngine() { }
44
46 virtual void clear() = 0;
47
52 virtual void compile() = 0;
53
58 virtual void start() = 0;
59
61 virtual void stop() = 0;
62
64 virtual Thread *startScript(Block *topLevelBlock, Target *) = 0;
65
67 virtual void broadcast(int index, Thread *sender, bool wait) = 0;
68
70 virtual void broadcastByPtr(Broadcast *broadcast, Thread *sender, bool wait) = 0;
71
73 virtual void startBackdropScripts(Broadcast *broadcast, Thread *sender, bool wait) = 0;
74
76 virtual void stopScript(Thread *vm) = 0;
77
83 virtual void stopTarget(Target *target, Thread *exceptScript) = 0;
84
86 virtual void initClone(std::shared_ptr<Sprite> clone) = 0;
87
89 virtual void deinitClone(std::shared_ptr<Sprite> clone) = 0;
90
92 virtual void stopSounds() = 0;
93
95 virtual double globalVolume() const = 0;
96
98 virtual void setGlobalVolume(double volume) = 0;
99
101 virtual void updateMonitors() = 0;
102
104 virtual void step() = 0;
105
112 virtual void run() = 0;
113
118 virtual void runEventLoop() = 0;
119
121 virtual void stopEventLoop() = 0;
122
124 virtual sigslot::signal<> &aboutToRender() = 0;
125
127 virtual sigslot::signal<Thread *> &threadAboutToStop() = 0;
128
130 virtual sigslot::signal<> &stopped() = 0;
131
133 virtual bool isRunning() const = 0;
134
136 virtual double fps() const = 0;
137
139 virtual void setFps(double fps) = 0;
140
142 virtual bool turboModeEnabled() const = 0;
143
145 virtual void setTurboModeEnabled(bool turboMode) = 0;
146
148 virtual bool keyPressed(const std::string &name) const = 0;
149
151 virtual void setKeyState(const std::string &name, bool pressed) = 0;
152
154 virtual void setKeyState(const KeyEvent &event, bool pressed) = 0;
155
157 virtual void setAnyKeyPressed(bool pressed) = 0;
158
160 virtual void mouseWheelUp() = 0;
161
163 virtual void mouseWheelDown() = 0;
164
166 virtual double mouseX() const = 0;
167
169 virtual void setMouseX(double x) = 0;
170
172 virtual double mouseY() const = 0;
173
175 virtual void setMouseY(double y) = 0;
176
178 virtual bool mousePressed() const = 0;
179
181 virtual void setMousePressed(bool pressed) = 0;
182
184 virtual void clickTarget(Target *target) = 0;
185
190 virtual const StringPtr *answer() const = 0;
191
193 virtual unsigned int stageWidth() const = 0;
194
196 virtual void setStageWidth(unsigned int width) = 0;
197
199 virtual unsigned int stageHeight() const = 0;
200
202 virtual void setStageHeight(unsigned int height) = 0;
203
205 virtual int cloneLimit() const = 0;
206
208 virtual void setCloneLimit(int limit) = 0;
209
211 virtual int cloneCount() const = 0;
212
214 virtual bool spriteFencingEnabled() const = 0;
215
217 virtual void setSpriteFencingEnabled(bool enable) = 0;
218
223 virtual void requestRedraw() = 0;
224
226 virtual ITimer *timer() const = 0;
227
232 virtual void addCompileFunction(IExtension *extension, const std::string &opcode, BlockComp f) = 0;
233
239 virtual void addHatPredicateCompileFunction(IExtension *extension, const std::string &opcode, HatPredicateCompileFunc f) = 0;
240
245 virtual void addMonitorNameFunction(IExtension *extension, const std::string &opcode, MonitorNameFunc f) = 0;
246
251 virtual void addMonitorChangeFunction(IExtension *extension, const std::string &opcode, MonitorChangeFunc f) = 0;
252
257 virtual void addHatBlock(IExtension *extension, const std::string &opcode) = 0;
258
260 virtual const std::vector<std::shared_ptr<Broadcast>> &broadcasts() const = 0;
261
263 virtual void setBroadcasts(const std::vector<std::shared_ptr<Broadcast>> &broadcasts) = 0;
264
266 virtual std::shared_ptr<Broadcast> broadcastAt(int index) const = 0;
267
269 virtual std::vector<int> findBroadcasts(const std::string &broadcastName) const = 0;
270
272 virtual int findBroadcastById(const std::string &broadcastId) const = 0;
273
274 /* Registers the given "when touching object" script. */
275 virtual void addWhenTouchingObjectScript(Block *hatBlock) = 0;
276
278 virtual void addGreenFlagScript(Block *hatBlock) = 0;
279
281 virtual void addBroadcastScript(Block *whenReceivedBlock, Field *field, Broadcast *broadcast) = 0;
282
284 virtual void addBackdropChangeScript(Block *hatBlock, Field *field) = 0;
285
286 /* Registers the given "when I start as clone" script. */
287 virtual void addCloneInitScript(Block *hatBlock) = 0;
288
289 /* Registers the given "when key pressed" script. */
290 virtual void addKeyPressScript(Block *hatBlock, Field *field) = 0;
291
292 /* Registers the given "when this sprite/stage clicked" script. */
293 virtual void addTargetClickScript(Block *hatBlock) = 0;
294
295 /* Registers the given "when greater than" script. */
296 virtual void addWhenGreaterThanScript(Block *hatBlock) = 0;
297
299 virtual const std::vector<std::shared_ptr<Target>> &targets() const = 0;
300
302 virtual void setTargets(const std::vector<std::shared_ptr<Target>> &newTargets) = 0;
303
305 virtual Target *targetAt(int index) const = 0;
306
308 virtual void getVisibleTargets(std::vector<Target *> &dst) const = 0;
309
315 virtual int findTarget(const std::string &targetName) const = 0;
316
318 virtual void moveDrawableToFront(Drawable *drawable) = 0;
319
321 virtual void moveDrawableToBack(Drawable *drawable) = 0;
322
324 virtual void moveDrawableForwardLayers(Drawable *drawable, int layers) = 0;
325
327 virtual void moveDrawableBackwardLayers(Drawable *drawable, int layers) = 0;
328
330 virtual void moveDrawableBehindOther(Drawable *drawable, Drawable *other) = 0;
331
333 virtual Stage *stage() const = 0;
334
336 virtual const std::vector<std::shared_ptr<Monitor>> &monitors() const = 0;
337
339 virtual void setMonitors(const std::vector<std::shared_ptr<Monitor>> &newMonitors) = 0;
340
342 virtual Monitor *createVariableMonitor(std::shared_ptr<Variable> var, const std::string &opcode, const std::string &varFieldName) = 0;
343
345 virtual Monitor *createListMonitor(std::shared_ptr<List> list, const std::string &opcode, const std::string &listFieldName) = 0;
346
348 virtual sigslot::signal<Monitor *> &monitorAdded() = 0;
349
351 virtual sigslot::signal<Monitor *, IMonitorHandler *> &monitorRemoved() = 0;
352
354 virtual sigslot::signal<const std::string &> &questionAsked() = 0;
355
357 virtual sigslot::signal<> &questionAborted() = 0;
358
360 virtual sigslot::signal<const std::string &> &questionAnswered() = 0;
361
363 virtual const std::vector<std::string> &extensions() const = 0;
364
366 virtual void setExtensions(const std::vector<std::string> &newExtensions) = 0;
367
369 virtual const std::unordered_map<Block *, std::shared_ptr<Script>> &scripts() const = 0;
370
372 virtual const std::string &userAgent() const = 0;
373
375 virtual void setUserAgent(const std::string &agent) = 0;
376
378 virtual const std::unordered_set<std::string> &unsupportedBlocks() const = 0;
379};
380
381} // namespace libscratchcpp
The Block class represents a Scratch block.
Definition block.h:24
The Broadcast class represents a Scratch broadcast.
Definition broadcast.h:14
The Drawable class is the base class of rendered elements (stage, sprites, text bubbles).
Definition drawable.h:18
The Field class represents a Scratch block field.
Definition field.h:20
The IEngine interface provides an API for running Scratch projects.
Definition iengine.h:41
virtual Monitor * createListMonitor(std::shared_ptr< List > list, const std::string &opcode, const std::string &listFieldName)=0
virtual void addCloneInitScript(Block *hatBlock)=0
virtual Thread * startScript(Block *topLevelBlock, Target *)=0
virtual void setMouseY(double y)=0
virtual const std::unordered_set< std::string > & unsupportedBlocks() const =0
virtual void updateMonitors()=0
virtual void step()=0
virtual void mouseWheelDown()=0
virtual void stop()=0
virtual Target * targetAt(int index) const =0
virtual ITimer * timer() const =0
virtual void requestRedraw()=0
virtual sigslot::signal & stopped()=0
virtual void stopScript(Thread *vm)=0
virtual int findBroadcastById(const std::string &broadcastId) const =0
virtual Stage * stage() const =0
virtual const std::unordered_map< Block *, std::shared_ptr< Script > > & scripts() const =0
virtual const std::vector< std::string > & extensions() const =0
virtual void mouseWheelUp()=0
virtual sigslot::signal< const std::string & > & questionAnswered()=0
virtual void setKeyState(const std::string &name, bool pressed)=0
virtual void compile()=0
virtual void setTurboModeEnabled(bool turboMode)=0
virtual void setFps(double fps)=0
virtual void run()=0
virtual void setSpriteFencingEnabled(bool enable)=0
virtual void clickTarget(Target *target)=0
virtual double mouseY() const =0
virtual void setMonitors(const std::vector< std::shared_ptr< Monitor > > &newMonitors)=0
virtual const StringPtr * answer() const =0
virtual void addTargetClickScript(Block *hatBlock)=0
virtual void stopEventLoop()=0
virtual void broadcastByPtr(Broadcast *broadcast, Thread *sender, bool wait)=0
virtual void moveDrawableBehindOther(Drawable *drawable, Drawable *other)=0
virtual void setAnyKeyPressed(bool pressed)=0
virtual void addGreenFlagScript(Block *hatBlock)=0
virtual void addWhenGreaterThanScript(Block *hatBlock)=0
virtual std::vector< int > findBroadcasts(const std::string &broadcastName) const =0
virtual void setGlobalVolume(double volume)=0
virtual void addCompileFunction(IExtension *extension, const std::string &opcode, BlockComp f)=0
virtual const std::vector< std::shared_ptr< Broadcast > > & broadcasts() const =0
virtual void setBroadcasts(const std::vector< std::shared_ptr< Broadcast > > &broadcasts)=0
virtual std::shared_ptr< Broadcast > broadcastAt(int index) const =0
virtual unsigned int stageHeight() const =0
virtual void setCloneLimit(int limit)=0
virtual bool mousePressed() const =0
virtual void start()=0
virtual void initClone(std::shared_ptr< Sprite > clone)=0
virtual int cloneLimit() const =0
virtual void moveDrawableToBack(Drawable *drawable)=0
virtual void stopTarget(Target *target, Thread *exceptScript)=0
virtual bool spriteFencingEnabled() const =0
virtual sigslot::signal< Monitor *, IMonitorHandler * > & monitorRemoved()=0
virtual void moveDrawableBackwardLayers(Drawable *drawable, int layers)=0
virtual double globalVolume() const =0
virtual void setTargets(const std::vector< std::shared_ptr< Target > > &newTargets)=0
virtual void setStageWidth(unsigned int width)=0
virtual bool keyPressed(const std::string &name) const =0
virtual void broadcast(int index, Thread *sender, bool wait)=0
virtual double mouseX() const =0
virtual void stopSounds()=0
virtual bool turboModeEnabled() const =0
virtual const std::string & userAgent() const =0
virtual void startBackdropScripts(Broadcast *broadcast, Thread *sender, bool wait)=0
virtual void clear()=0
virtual ~IEngine()
Definition iengine.h:43
virtual unsigned int stageWidth() const =0
virtual Monitor * createVariableMonitor(std::shared_ptr< Variable > var, const std::string &opcode, const std::string &varFieldName)=0
virtual sigslot::signal< const std::string & > & questionAsked()=0
virtual int cloneCount() const =0
virtual sigslot::signal & questionAborted()=0
virtual void setMouseX(double x)=0
virtual void setStageHeight(unsigned int height)=0
virtual void addKeyPressScript(Block *hatBlock, Field *field)=0
virtual void getVisibleTargets(std::vector< Target * > &dst) const =0
virtual void addBackdropChangeScript(Block *hatBlock, Field *field)=0
virtual void addBroadcastScript(Block *whenReceivedBlock, Field *field, Broadcast *broadcast)=0
virtual void deinitClone(std::shared_ptr< Sprite > clone)=0
virtual bool isRunning() const =0
virtual void moveDrawableForwardLayers(Drawable *drawable, int layers)=0
virtual void addHatPredicateCompileFunction(IExtension *extension, const std::string &opcode, HatPredicateCompileFunc f)=0
virtual sigslot::signal< Monitor * > & monitorAdded()=0
virtual void addMonitorNameFunction(IExtension *extension, const std::string &opcode, MonitorNameFunc f)=0
virtual const std::vector< std::shared_ptr< Monitor > > & monitors() const =0
virtual int findTarget(const std::string &targetName) const =0
virtual void setMousePressed(bool pressed)=0
virtual sigslot::signal & aboutToRender()=0
virtual void addWhenTouchingObjectScript(Block *hatBlock)=0
virtual double fps() const =0
virtual void moveDrawableToFront(Drawable *drawable)=0
virtual void setUserAgent(const std::string &agent)=0
virtual void setKeyState(const KeyEvent &event, bool pressed)=0
virtual const std::vector< std::shared_ptr< Target > > & targets() const =0
virtual void addHatBlock(IExtension *extension, const std::string &opcode)=0
virtual void runEventLoop()=0
virtual void addMonitorChangeFunction(IExtension *extension, const std::string &opcode, MonitorChangeFunc f)=0
virtual sigslot::signal< Thread * > & threadAboutToStop()=0
virtual void setExtensions(const std::vector< std::string > &newExtensions)=0
The IExtension class is an interface for extensions.
Definition iextension.h:18
Definition imonitorhandler.h:14
The ITimer interface represents a timer of a Scratch project.
Definition itimer.h:14
The KeyEvent class represents a Scratch key event.
Definition keyevent.h:15
The List class represents a Scratch list.
Definition list.h:27
The Monitor class represents a stage monitor.
Definition monitor.h:23
The Script class represents a compiled Scratch script.
Definition script.h:23
The Sprite class represents a Scratch sprite.
Definition sprite.h:18
The Stage class is the project stage.
Definition stage.h:17
The Target class is the Stage or a Sprite.
Definition target.h:28
The Thread class represents a running Scratch script.
Definition thread.h:19
The Variable class represents a Scratch variable.
Definition variable.h:18
#define LIBSCRATCHCPP_EXPORT
Definition global.h:17
The main namespace of the library.
Definition asset.h:10
const std::string &(*)(Block *) MonitorNameFunc
Definition global.h:43
CompilerValue *(*)(Compiler *vm) HatPredicateCompileFunc
Definition global.h:57
void(*)(Block *, const Value &newValue) MonitorChangeFunc
Definition global.h:50
CompilerValue *(*)(Compiler *) BlockComp
Definition global.h:36
The StringPtr struct holds a string data pointer and string size.
Definition stringptr.h:14