Skip to content

Commit 02f80ac

Browse files
committed
Implement event_whentouchingobject
1 parent baa7933 commit 02f80ac

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed

src/dev/blocks/eventblocks.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
// SPDX-License-Identifier: Apache-2.0
22

3+
#include <scratchcpp/iengine.h>
4+
#include <scratchcpp/dev/compiler.h>
5+
36
#include "eventblocks.h"
47

58
using namespace libscratchcpp;
@@ -16,4 +19,11 @@ std::string libscratchcpp::EventBlocks::description() const
1619

1720
void EventBlocks::registerBlocks(IEngine *engine)
1821
{
22+
engine->addCompileFunction(this, "event_whentouchingobject", &compileWhenTouchingObject);
23+
}
24+
25+
CompilerValue *EventBlocks::compileWhenTouchingObject(Compiler *compiler)
26+
{
27+
compiler->engine()->addWhenTouchingObjectScript(compiler->block());
28+
return nullptr;
1929
}

src/dev/blocks/eventblocks.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ class EventBlocks : public IExtension
1414
std::string description() const override;
1515

1616
void registerBlocks(IEngine *engine) override;
17+
18+
private:
19+
static CompilerValue *compileWhenTouchingObject(Compiler *compiler);
1720
};
1821

1922
} // namespace libscratchcpp
Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,43 @@
1+
#include <scratchcpp/project.h>
2+
#include <scratchcpp/dev/test/scriptbuilder.h>
3+
#include <scratchcpp/dev/compiler.h>
4+
#include <scratchcpp/sprite.h>
15
#include <enginemock.h>
26

37
#include "../common.h"
48
#include "dev/blocks/eventblocks.h"
59

610
using namespace libscratchcpp;
11+
using namespace libscratchcpp::test;
712

813
class EventBlocksTest : public testing::Test
914
{
1015
public:
11-
void SetUp() override { m_extension = std::make_unique<EventBlocks>(); }
16+
void SetUp() override
17+
{
18+
m_extension = std::make_unique<EventBlocks>();
19+
m_engine = m_project.engine().get();
20+
m_extension->registerBlocks(m_engine);
21+
}
1222

1323
std::unique_ptr<IExtension> m_extension;
24+
Project m_project;
25+
IEngine *m_engine = nullptr;
1426
EngineMock m_engineMock;
1527
};
28+
29+
// TODO: Add test for when touching object hat predicate
30+
31+
TEST_F(EventBlocksTest, WhenTouchingObject)
32+
{
33+
auto target = std::make_shared<Sprite>();
34+
ScriptBuilder builder(m_extension.get(), m_engine, target);
35+
36+
builder.addBlock("event_whentouchingobject");
37+
builder.addDropdownInput("TOUCHINGOBJECTMENU", "Sprite1");
38+
auto block = builder.currentBlock();
39+
40+
Compiler compiler(&m_engineMock, target.get());
41+
EXPECT_CALL(m_engineMock, addWhenTouchingObjectScript(block));
42+
compiler.compile(block);
43+
}

0 commit comments

Comments
 (0)