Skip to content

Commit 1a41232

Browse files
committed
Add touchingColor() with mask param to Target
1 parent 7396c0b commit 1a41232

File tree

10 files changed

+43
-0
lines changed

10 files changed

+43
-0
lines changed

include/scratchcpp/sprite.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ class LIBSCRATCHCPP_EXPORT Sprite
8282

8383
bool touchingPoint(double x, double y) const override;
8484
bool touchingColor(const Value &color) const override;
85+
bool touchingColor(const Value &color, const Value &mask) const override;
8586

8687
void setGraphicsEffectValue(IGraphicsEffect *effect, double value) override;
8788

include/scratchcpp/stage.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class LIBSCRATCHCPP_EXPORT Stage : public Target
5656

5757
bool touchingPoint(double x, double y) const override;
5858
bool touchingColor(const Value &color) const override;
59+
bool touchingColor(const Value &color, const Value &mask) const override;
5960

6061
void setGraphicsEffectValue(IGraphicsEffect *effect, double value) override;
6162

include/scratchcpp/target.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ class LIBSCRATCHCPP_EXPORT Target
101101
virtual bool touchingPoint(double x, double y) const;
102102
bool touchingEdge() const;
103103
virtual bool touchingColor(const Value &color) const;
104+
virtual bool touchingColor(const Value &color, const Value &mask) const;
104105

105106
double graphicsEffectValue(IGraphicsEffect *effect) const;
106107
virtual void setGraphicsEffectValue(IGraphicsEffect *effect, double value);

src/scratch/sprite.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,15 @@ bool Sprite::touchingColor(const Value &color) const
503503
return impl->iface->touchingColor(color);
504504
}
505505

506+
/*! Overrides Target#touchingColor(). */
507+
bool Sprite::touchingColor(const Value &color, const Value &mask) const
508+
{
509+
if (!impl->iface)
510+
return false;
511+
512+
return impl->iface->touchingColor(color, mask);
513+
}
514+
506515
/*! Overrides Target#setGraphicsEffectValue(). */
507516
void Sprite::setGraphicsEffectValue(IGraphicsEffect *effect, double value)
508517
{

src/scratch/stage.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,15 @@ bool Stage::touchingColor(const Value &color) const
185185
return impl->iface->touchingColor(color);
186186
}
187187

188+
/*! Overrides Target#touchingColor(). */
189+
bool Stage::touchingColor(const Value &color, const Value &mask) const
190+
{
191+
if (!impl->iface)
192+
return false;
193+
194+
return impl->iface->touchingColor(color, mask);
195+
}
196+
188197
/*! Overrides Target#setGraphicsEffectValue(). */
189198
void Stage::setGraphicsEffectValue(IGraphicsEffect *effect, double value)
190199
{

src/scratch/target.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,12 @@ bool Target::touchingColor(const Value &color) const
520520
return false;
521521
}
522522

523+
/*! Returns true if the mask part of the Target is touching the given color (RGB triplet). */
524+
bool Target::touchingColor(const Value &color, const Value &mask) const
525+
{
526+
return false;
527+
}
528+
523529
/*! Returns the value of the given graphics effect. */
524530
double Target::graphicsEffectValue(IGraphicsEffect *effect) const
525531
{

test/mocks/targetmock.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class TargetMock : public Target
2828
MOCK_METHOD(bool, touchingPoint, (double, double), (const, override));
2929

3030
MOCK_METHOD(bool, touchingColor, (const Value &), (const, override));
31+
MOCK_METHOD(bool, touchingColor, (const Value &, const Value &), (const, override));
3132

3233
MOCK_METHOD(void, setGraphicsEffectValue, (IGraphicsEffect *, double), (override));
3334
MOCK_METHOD(void, clearGraphicsEffects, (), (override));

test/scratch_classes/sprite_test.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,7 @@ TEST(SpriteTest, TouchingColor)
825825
{
826826
Sprite sprite;
827827
ASSERT_FALSE(sprite.touchingColor(0));
828+
ASSERT_FALSE(sprite.touchingColor(0, 0));
828829

829830
SpriteHandlerMock iface;
830831
EXPECT_CALL(iface, init);
@@ -836,6 +837,12 @@ TEST(SpriteTest, TouchingColor)
836837

837838
EXPECT_CALL(iface, touchingColor(v2)).WillOnce(Return(true));
838839
ASSERT_TRUE(sprite.touchingColor(v2));
840+
841+
EXPECT_CALL(iface, touchingColor(v1, v2)).WillOnce(Return(false));
842+
ASSERT_FALSE(sprite.touchingColor(v1, v2));
843+
844+
EXPECT_CALL(iface, touchingColor(v2, v1)).WillOnce(Return(true));
845+
ASSERT_TRUE(sprite.touchingColor(v2, v1));
839846
}
840847

841848
TEST(SpriteTest, GraphicsEffects)

test/scratch_classes/stage_test.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ TEST(SpriteTest, TouchingColor)
222222
{
223223
Stage stage;
224224
ASSERT_FALSE(stage.touchingColor(0));
225+
ASSERT_FALSE(stage.touchingColor(0, 0));
225226

226227
StageHandlerMock iface;
227228
EXPECT_CALL(iface, init);
@@ -233,6 +234,12 @@ TEST(SpriteTest, TouchingColor)
233234

234235
EXPECT_CALL(iface, touchingColor(v2)).WillOnce(Return(true));
235236
ASSERT_TRUE(stage.touchingColor(v2));
237+
238+
EXPECT_CALL(iface, touchingColor(v1, v2)).WillOnce(Return(false));
239+
ASSERT_FALSE(stage.touchingColor(v1, v2));
240+
241+
EXPECT_CALL(iface, touchingColor(v2, v1)).WillOnce(Return(true));
242+
ASSERT_TRUE(stage.touchingColor(v2, v1));
236243
}
237244

238245
TEST(StageTest, GraphicsEffects)

test/scratch_classes/target_test.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -716,6 +716,7 @@ TEST(TargetTest, TouchingColor)
716716
Target target;
717717
Value v;
718718
ASSERT_FALSE(target.touchingColor(v));
719+
ASSERT_FALSE(target.touchingColor(v, v));
719720
}
720721

721722
TEST(TargetTest, GraphicsEffects)

0 commit comments

Comments
 (0)