libscratchcpp
A library for C++ based Scratch project players
Loading...
Searching...
No Matches
scriptbuilder.h
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2
3#pragma once
4
5#include <vector>
6
7#include "../inputvalue.h"
8
9namespace libscratchcpp
10{
11
12class IExtension;
13class IEngine;
14class Target;
15class List;
16
17} // namespace libscratchcpp
18
20{
21
22class ScriptBuilderPrivate;
23
26{
27 public:
28 ScriptBuilder(IExtension *extension, IEngine *engine, std::shared_ptr<Target> target, bool createHatBlock = true);
29 ScriptBuilder(const ScriptBuilder &) = delete;
30
32
33 void addBlock(std::shared_ptr<Block> block);
34 void addBlock(const std::string &opcode);
36
37 void addValueInput(const std::string &name, const Value &value);
38 void addNullInput(const std::string &name);
39
40 void addObscuredInput(const std::string &name, std::shared_ptr<Block> valueBlock);
41 void addNullObscuredInput(const std::string &name);
42
43 void addDropdownInput(const std::string &name, const std::string &selectedValue);
44 void addDropdownField(const std::string &name, const std::string &selectedValue);
45
46 void addEntityInput(const std::string &name, const std::string &entityName, InputValue::Type entityType, std::shared_ptr<Entity> entity);
47 void addEntityField(const std::string &name, std::shared_ptr<Entity> entity);
48
50 std::shared_ptr<Block> takeBlock();
51
52 void build();
53 void run();
54
55 List *capturedValues() const;
56
57 static void buildMultiple(const std::vector<ScriptBuilder *> &builders);
58
59 private:
60 void addBlockToList(std::shared_ptr<Block> block);
61 void build(std::shared_ptr<Target> target);
62 std::string nextId();
63
64 static void addBlocksToTarget(Target *target, const std::vector<std::shared_ptr<Block>> &blocks);
65 static void addTargetToEngine(IEngine *engine, std::shared_ptr<Target> target);
66
67 spimpl::unique_impl_ptr<ScriptBuilderPrivate> impl;
68};
69
70} // namespace libscratchcpp::test
The Block class represents a Scratch block.
Definition block.h:24
The IEngine interface provides an API for running Scratch projects.
Definition iengine.h:41
The IExtension class is an interface for extensions.
Definition iextension.h:18
Type
Definition inputvalue.h:23
The List class represents a Scratch list.
Definition list.h:27
The Target class is the Stage or a Sprite.
Definition target.h:28
The Value class represents a Scratch value.
Definition value.h:22
void run()
Definition scriptbuilder.cpp:278
void addNullObscuredInput(const std::string &name)
Definition scriptbuilder.cpp:135
ScriptBuilder(const ScriptBuilder &)=delete
void addEntityInput(const std::string &name, const std::string &entityName, InputValue::Type entityType, std::shared_ptr< Entity > entity)
Definition scriptbuilder.cpp:177
void captureBlockReturnValue()
Definition scriptbuilder.cpp:73
Block * currentBlock()
Definition scriptbuilder.cpp:226
void addNullInput(const std::string &name)
Definition scriptbuilder.cpp:95
void build()
Definition scriptbuilder.cpp:272
List * capturedValues() const
Definition scriptbuilder.cpp:288
void addBlock(std::shared_ptr< Block > block)
Definition scriptbuilder.cpp:59
std::shared_ptr< Block > takeBlock()
Definition scriptbuilder.cpp:253
void addValueInput(const std::string &name, const Value &value)
Definition scriptbuilder.cpp:84
void addDropdownInput(const std::string &name, const std::string &selectedValue)
Definition scriptbuilder.cpp:149
ScriptBuilder(IExtension *extension, IEngine *engine, std::shared_ptr< Target > target, bool createHatBlock=true)
Definition scriptbuilder.cpp:27
void addObscuredInput(const std::string &name, std::shared_ptr< Block > valueBlock)
Definition scriptbuilder.cpp:105
static void buildMultiple(const std::vector< ScriptBuilder * > &builders)
Definition scriptbuilder.cpp:298
void addEntityField(const std::string &name, std::shared_ptr< Entity > entity)
Definition scriptbuilder.cpp:195
void addDropdownField(const std::string &name, const std::string &selectedValue)
Definition scriptbuilder.cpp:167
#define LIBSCRATCHCPP_EXPORT
Definition global.h:17
Definition scriptbuilder.h:20
The main namespace of the library.
Definition asset.h:10