Skip to content

Commit f49734e

Browse files
committed
Add touchingPoint() method
1 parent c05edee commit f49734e

File tree

13 files changed

+77
-0
lines changed

13 files changed

+77
-0
lines changed

include/scratchcpp/ispritehandler.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ class LIBSCRATCHCPP_EXPORT ISpriteHandler
7777
* \note The rectangle must be relative to the stage, so make sure to use the sprite's coordinates.
7878
*/
7979
virtual Rect fastBoundingRect() const = 0;
80+
81+
/*! Used to check whether the sprite touches the given point (in Scratch coordinates). */
82+
virtual bool touchingPoint(double x, double y) const = 0;
8083
};
8184

8285
} // namespace libscratchcpp

include/scratchcpp/istagehandler.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ class LIBSCRATCHCPP_EXPORT IStageHandler
5252
* which is calculated by transforming the costume rectangle.
5353
*/
5454
virtual Rect fastBoundingRect() const = 0;
55+
56+
/*! Used to check whether the stage touches the given point (in Scratch coordinates). */
57+
virtual bool touchingPoint(double x, double y) const = 0;
5558
};
5659

5760
} // namespace libscratchcpp

include/scratchcpp/sprite.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ class LIBSCRATCHCPP_EXPORT Sprite
7272
Rect fastBoundingRect() const override;
7373
void keepInFence(double newX, double newY, double *fencedX, double *fencedY) const;
7474

75+
bool touchingPoint(double x, double y) const override;
76+
7577
void setGraphicsEffectValue(IGraphicsEffect *effect, double value) override;
7678

7779
void clearGraphicsEffects() override;

include/scratchcpp/stage.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ class LIBSCRATCHCPP_EXPORT Stage : public Target
5151
Rect boundingRect() const override;
5252
Rect fastBoundingRect() const override;
5353

54+
bool touchingPoint(double x, double y) const override;
55+
5456
void setGraphicsEffectValue(IGraphicsEffect *effect, double value) override;
5557

5658
void clearGraphicsEffects() override;

include/scratchcpp/target.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ class LIBSCRATCHCPP_EXPORT Target
8888
virtual Rect boundingRect() const;
8989
virtual Rect fastBoundingRect() const;
9090

91+
virtual bool touchingPoint(double x, double y) const;
9192
bool touchingEdge() const;
9293

9394
double graphicsEffectValue(IGraphicsEffect *effect) const;

src/scratch/sprite.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,15 @@ void Sprite::keepInFence(double newX, double newY, double *fencedX, double *fenc
406406
*fencedY = newY + dy;
407407
}
408408

409+
/*! Overrides Target#touchingPoint(). */
410+
bool Sprite::touchingPoint(double x, double y) const
411+
{
412+
if (!impl->iface)
413+
return false;
414+
415+
return impl->iface->touchingPoint(x, y);
416+
}
417+
409418
/*! Overrides Target#setGraphicsEffectValue(). */
410419
void Sprite::setGraphicsEffectValue(IGraphicsEffect *effect, double value)
411420
{

src/scratch/stage.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,15 @@ Rect Stage::fastBoundingRect() const
149149
return impl->iface->fastBoundingRect();
150150
}
151151

152+
/*! Overrides Target#touchingPoint(). */
153+
bool Stage::touchingPoint(double x, double y) const
154+
{
155+
if (!impl->iface)
156+
return false;
157+
158+
return impl->iface->touchingPoint(x, y);
159+
}
160+
152161
/*! Overrides Target#setGraphicsEffectValue(). */
153162
void Stage::setGraphicsEffectValue(IGraphicsEffect *effect, double value)
154163
{

src/scratch/target.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,12 @@ Rect Target::fastBoundingRect() const
431431
return Rect();
432432
}
433433

434+
/*! Returns true if the Target is touching the given point (in Scratch coordinates). */
435+
bool Target::touchingPoint(double x, double y) const
436+
{
437+
return false;
438+
}
439+
434440
/*! Returns true if the target is touching the edge. */
435441
bool Target::touchingEdge() const
436442
{

test/mocks/spritehandlermock.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,5 @@ class SpriteHandlerMock : public ISpriteHandler
3131

3232
MOCK_METHOD(Rect, boundingRect, (), (const, override));
3333
MOCK_METHOD(Rect, fastBoundingRect, (), (const, override));
34+
MOCK_METHOD(bool, touchingPoint, (double, double), (const, override));
3435
};

test/mocks/stagehandlermock.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@ class StageHandlerMock : public IStageHandler
2222

2323
MOCK_METHOD(Rect, boundingRect, (), (const, override));
2424
MOCK_METHOD(Rect, fastBoundingRect, (), (const, override));
25+
MOCK_METHOD(bool, touchingPoint, (double, double), (const, override));
2526
};

0 commit comments

Comments
 (0)