Skip to content

Commit de07290

Browse files
committed
Add target click hat
1 parent 2b74f8b commit de07290

File tree

4 files changed

+19
-7
lines changed

4 files changed

+19
-7
lines changed

include/scratchcpp/iengine.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,9 @@ class LIBSCRATCHCPP_EXPORT IEngine
283283
/* Registers the given "when key pressed" script. */
284284
virtual void addKeyPressScript(std::shared_ptr<Block> hatBlock, int fieldId) = 0;
285285

286+
/* Registers the given "when this sprite/stage clicked" script. */
287+
virtual void addTargetClickScript(std::shared_ptr<Block> hatBlock) = 0;
288+
286289
/*! Returns the list of targets. */
287290
virtual const std::vector<std::shared_ptr<Target>> &targets() const = 0;
288291

src/engine/internal/engine.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,8 @@
3434
using namespace libscratchcpp;
3535

3636
const std::unordered_map<Engine::HatType, bool> Engine::m_hatRestartExistingThreads = {
37-
{ HatType::GreenFlag, true },
38-
{ HatType::BroadcastReceived, true },
39-
{ HatType::BackdropChanged, true },
40-
{ HatType::CloneInit, false },
41-
{ HatType::KeyPressed, false }
37+
{ HatType::GreenFlag, true }, { HatType::BroadcastReceived, true }, { HatType::BackdropChanged, true },
38+
{ HatType::CloneInit, false }, { HatType::KeyPressed, false }, { HatType::TargetClicked, true }
4239
};
4340

4441
Engine::Engine() :
@@ -686,7 +683,7 @@ void Engine::setMousePressed(bool pressed)
686683

687684
void Engine::clickTarget(Target *target)
688685
{
689-
// TODO: Implement this (#92, #93)
686+
startHats(HatType::TargetClicked, {}, target);
690687
}
691688

692689
unsigned int Engine::stageWidth() const
@@ -969,6 +966,11 @@ void Engine::addKeyPressScript(std::shared_ptr<Block> hatBlock, int fieldId)
969966
addHatField(script, HatField::KeyOption, fieldId);
970967
}
971968

969+
void Engine::addTargetClickScript(std::shared_ptr<Block> hatBlock)
970+
{
971+
addHatToMap(m_whenTargetClickedHats, m_scripts[hatBlock].get());
972+
}
973+
972974
const std::vector<std::shared_ptr<Target>> &Engine::targets() const
973975
{
974976
return m_targets;
@@ -1354,6 +1356,9 @@ const std::vector<Script *> &Engine::getHats(Target *target, HatType type)
13541356
case HatType::KeyPressed:
13551357
return m_whenKeyPressedHats[target];
13561358

1359+
case HatType::TargetClicked:
1360+
return m_whenTargetClickedHats[target];
1361+
13571362
default: {
13581363
static const std::vector<Script *> empty = {};
13591364
return empty;

src/engine/internal/engine.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ class Engine : public IEngine
120120
void addBackdropChangeScript(std::shared_ptr<Block> hatBlock, int fieldId) override;
121121
void addCloneInitScript(std::shared_ptr<Block> hatBlock) override;
122122
void addKeyPressScript(std::shared_ptr<Block> hatBlock, int fieldId) override;
123+
void addTargetClickScript(std::shared_ptr<Block> hatBlock) override;
123124

124125
const std::vector<std::shared_ptr<Target>> &targets() const override;
125126
void setTargets(const std::vector<std::shared_ptr<Target>> &newTargets) override;
@@ -156,7 +157,8 @@ class Engine : public IEngine
156157
BroadcastReceived,
157158
BackdropChanged,
158159
CloneInit,
159-
KeyPressed
160+
KeyPressed,
161+
TargetClicked
160162
};
161163

162164
enum class HatField
@@ -222,6 +224,7 @@ class Engine : public IEngine
222224
std::unordered_map<Target *, std::vector<Script *>> m_broadcastHats;
223225
std::unordered_map<Target *, std::vector<Script *>> m_cloneInitHats;
224226
std::unordered_map<Target *, std::vector<Script *>> m_whenKeyPressedHats;
227+
std::unordered_map<Target *, std::vector<Script *>> m_whenTargetClickedHats;
225228

226229
std::unordered_map<Script *, std::unordered_map<HatField, int>> m_scriptHatFields; // HatField, field ID from the block implementation
227230

test/mocks/enginemock.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ class EngineMock : public IEngine
101101
MOCK_METHOD(void, addBackdropChangeScript, (std::shared_ptr<Block>, int), (override));
102102
MOCK_METHOD(void, addCloneInitScript, (std::shared_ptr<Block>), (override));
103103
MOCK_METHOD(void, addKeyPressScript, (std::shared_ptr<Block>, int), (override));
104+
MOCK_METHOD(void, addTargetClickScript, (std::shared_ptr<Block>), (override));
104105

105106
MOCK_METHOD(const std::vector<std::shared_ptr<Target>> &, targets, (), (const, override));
106107
MOCK_METHOD(void, setTargets, (const std::vector<std::shared_ptr<Target>> &), (override));

0 commit comments

Comments
 (0)