Skip to content

Commit a663b7b

Browse files
committed
Add API for the when touching object block
1 parent fe061a5 commit a663b7b

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed

include/scratchcpp/iengine.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,9 @@ class LIBSCRATCHCPP_EXPORT IEngine
297297
/*! Returns the index of the broadcast with the given ID. */
298298
virtual int findBroadcastById(const std::string &broadcastId) const = 0;
299299

300+
/* Registers the given "when touching object" script. */
301+
virtual void addWhenTouchingObjectScript(std::shared_ptr<Block> hatBlock) = 0;
302+
300303
/*! Registers the "green flag" script. */
301304
virtual void addGreenFlagScript(std::shared_ptr<Block> hatBlock) = 0;
302305

src/engine/internal/engine.cpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,13 @@
3535
using namespace libscratchcpp;
3636

3737
const std::unordered_map<Engine::HatType, bool> Engine::m_hatRestartExistingThreads = {
38-
{ HatType::GreenFlag, true }, { HatType::BroadcastReceived, true }, { HatType::BackdropChanged, true }, { HatType::CloneInit, false },
39-
{ HatType::KeyPressed, false }, { HatType::TargetClicked, true }, { HatType::WhenGreaterThan, false }
38+
{ HatType::WhenTouchingObject, false }, { HatType::GreenFlag, true }, { HatType::BroadcastReceived, true }, { HatType::BackdropChanged, true },
39+
{ HatType::CloneInit, false }, { HatType::KeyPressed, false }, { HatType::TargetClicked, true }, { HatType::WhenGreaterThan, false }
4040
};
4141

4242
const std::unordered_map<Engine::HatType, bool> Engine::m_hatEdgeActivated = {
43-
{ HatType::GreenFlag, false }, { HatType::BroadcastReceived, false }, { HatType::BackdropChanged, false }, { HatType::CloneInit, false },
44-
{ HatType::KeyPressed, false }, { HatType::TargetClicked, false }, { HatType::WhenGreaterThan, true }
43+
{ HatType::WhenTouchingObject, true }, { HatType::GreenFlag, false }, { HatType::BroadcastReceived, false }, { HatType::BackdropChanged, false },
44+
{ HatType::CloneInit, false }, { HatType::KeyPressed, false }, { HatType::TargetClicked, false }, { HatType::WhenGreaterThan, true }
4545
};
4646

4747
Engine::Engine() :
@@ -82,6 +82,7 @@ void Engine::clear()
8282
m_scripts.clear();
8383
m_functions.clear();
8484

85+
m_whenTouchingObjectHats.clear();
8586
m_greenFlagHats.clear();
8687
m_backdropChangeHats.clear();
8788
m_broadcastHats.clear();
@@ -1096,6 +1097,11 @@ int Engine::findBroadcastById(const std::string &broadcastId) const
10961097
return it - m_broadcasts.begin();
10971098
}
10981099

1100+
void Engine::addWhenTouchingObjectScript(std::shared_ptr<Block> hatBlock)
1101+
{
1102+
addHatToMap(m_whenTouchingObjectHats, m_scripts[hatBlock].get());
1103+
}
1104+
10991105
void Engine::addGreenFlagScript(std::shared_ptr<Block> hatBlock)
11001106
{
11011107
addHatToMap(m_greenFlagHats, m_scripts[hatBlock].get());
@@ -1527,6 +1533,9 @@ const std::vector<Script *> &Engine::getHats(Target *target, HatType type)
15271533
}
15281534

15291535
switch (type) {
1536+
case HatType::WhenTouchingObject:
1537+
return m_whenTouchingObjectHats[target];
1538+
15301539
case HatType::GreenFlag:
15311540
return m_greenFlagHats[target];
15321541

src/engine/internal/engine.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ class Engine : public IEngine
126126
int findBroadcast(const std::string &broadcastName) const override;
127127
int findBroadcastById(const std::string &broadcastId) const override;
128128

129+
void addWhenTouchingObjectScript(std::shared_ptr<Block> hatBlock) override;
129130
void addGreenFlagScript(std::shared_ptr<Block> hatBlock) override;
130131
void addBroadcastScript(std::shared_ptr<Block> whenReceivedBlock, int fieldId, Broadcast *broadcast) override;
131132
void addBackdropChangeScript(std::shared_ptr<Block> hatBlock, int fieldId) override;
@@ -172,6 +173,7 @@ class Engine : public IEngine
172173
private:
173174
enum class HatType
174175
{
176+
WhenTouchingObject,
175177
GreenFlag,
176178
BroadcastReceived,
177179
BackdropChanged,
@@ -242,6 +244,7 @@ class Engine : public IEngine
242244
std::recursive_mutex m_eventLoopMutex;
243245
std::string m_userAgent;
244246

247+
std::unordered_map<Target *, std::vector<Script *>> m_whenTouchingObjectHats;
245248
std::unordered_map<Target *, std::vector<Script *>> m_greenFlagHats;
246249
std::unordered_map<Target *, std::vector<Script *>> m_backdropChangeHats;
247250
std::unordered_map<Target *, std::vector<Script *>> m_broadcastHats;

test/mocks/enginemock.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ class EngineMock : public IEngine
106106
MOCK_METHOD(int, findBroadcast, (const std::string &), (const, override));
107107
MOCK_METHOD(int, findBroadcastById, (const std::string &), (const, override));
108108

109+
MOCK_METHOD(void, addWhenTouchingObjectScript, (std::shared_ptr<Block>), (override));
109110
MOCK_METHOD(void, addGreenFlagScript, (std::shared_ptr<Block>), (override));
110111
MOCK_METHOD(void, addBroadcastScript, (std::shared_ptr<Block>, int, Broadcast *), (override));
111112
MOCK_METHOD(void, addBackdropChangeScript, (std::shared_ptr<Block>, int), (override));

0 commit comments

Comments
 (0)