Skip to content

Commit f200c25

Browse files
committed
Add cloneCount method to IEngine
1 parent eaa4b6e commit f200c25

File tree

5 files changed

+21
-0
lines changed

5 files changed

+21
-0
lines changed

include/scratchcpp/iengine.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,9 @@ class LIBSCRATCHCPP_EXPORT IEngine
144144
/*! Sets the maximum number of clones (use -1 or any negative number to disable the limit). */
145145
virtual void setCloneLimit(int limit) = 0;
146146

147+
/*! Returns the current number of clones. */
148+
virtual int cloneCount() const = 0;
149+
147150
/*! Returns true if sprite fencing is enabled. */
148151
virtual bool spriteFencingEnabled() const = 0;
149152

src/engine/internal/engine.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,11 @@ void Engine::setCloneLimit(int limit)
592592
m_cloneLimit = limit < 0 ? -1 : limit;
593593
}
594594

595+
int Engine::cloneCount() const
596+
{
597+
return m_clones.size();
598+
}
599+
595600
bool Engine::spriteFencingEnabled() const
596601
{
597602
return m_spriteFencingEnabled;

src/engine/internal/engine.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ class Engine : public IEngine
6767
int cloneLimit() const override;
6868
void setCloneLimit(int limit) override;
6969

70+
int cloneCount() const override;
71+
7072
bool spriteFencingEnabled() const override;
7173
void setSpriteFencingEnabled(bool enable) override;
7274

test/engine/engine_test.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -796,6 +796,7 @@ TEST(EngineTest, CloneLimit)
796796
ASSERT_TRUE(p.load());
797797
auto engine = p.engine();
798798
ASSERT_EQ(engine->cloneLimit(), 300);
799+
ASSERT_EQ(engine->cloneCount(), 0);
799800

800801
// TODO: Set "infinite" FPS and remove this (#254)
801802
engine->setFps(100000);
@@ -808,6 +809,7 @@ TEST(EngineTest, CloneLimit)
808809
ASSERT_EQ(GET_VAR(stage, "count")->value().toInt(), 300);
809810
ASSERT_VAR(stage, "delete_passed");
810811
ASSERT_TRUE(GET_VAR(stage, "delete_passed")->value().toBool());
812+
ASSERT_EQ(engine->cloneCount(), 300);
811813

812814
engine->setCloneLimit(475);
813815
ASSERT_EQ(engine->cloneLimit(), 475);
@@ -816,6 +818,7 @@ TEST(EngineTest, CloneLimit)
816818
ASSERT_EQ(GET_VAR(stage, "count")->value().toInt(), 475);
817819
ASSERT_VAR(stage, "delete_passed");
818820
ASSERT_TRUE(GET_VAR(stage, "delete_passed")->value().toBool());
821+
ASSERT_EQ(engine->cloneCount(), 475);
819822

820823
engine->setCloneLimit(0);
821824
ASSERT_EQ(engine->cloneLimit(), 0);
@@ -824,6 +827,7 @@ TEST(EngineTest, CloneLimit)
824827
ASSERT_EQ(GET_VAR(stage, "count")->value().toInt(), 0);
825828
ASSERT_VAR(stage, "delete_passed");
826829
ASSERT_TRUE(GET_VAR(stage, "delete_passed")->value().toBool());
830+
ASSERT_EQ(engine->cloneCount(), 0);
827831

828832
engine->setCloneLimit(-1);
829833
ASSERT_EQ(engine->cloneLimit(), -1);
@@ -832,6 +836,7 @@ TEST(EngineTest, CloneLimit)
832836
ASSERT_GT(GET_VAR(stage, "count")->value().toInt(), 500);
833837
ASSERT_VAR(stage, "delete_passed");
834838
ASSERT_TRUE(GET_VAR(stage, "delete_passed")->value().toBool());
839+
ASSERT_GT(engine->cloneCount(), 500);
835840

836841
engine->setCloneLimit(-5);
837842
ASSERT_EQ(engine->cloneLimit(), -1);
@@ -840,6 +845,10 @@ TEST(EngineTest, CloneLimit)
840845
ASSERT_GT(GET_VAR(stage, "count")->value().toInt(), 500);
841846
ASSERT_VAR(stage, "delete_passed");
842847
ASSERT_TRUE(GET_VAR(stage, "delete_passed")->value().toBool());
848+
ASSERT_GT(engine->cloneCount(), 500);
849+
850+
engine->stop();
851+
ASSERT_EQ(engine->cloneCount(), 0);
843852
}
844853

845854
// TODO: Uncomment this after fixing #256 and #257

test/mocks/enginemock.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ class EngineMock : public IEngine
5353
MOCK_METHOD(int, cloneLimit, (), (const, override));
5454
MOCK_METHOD(void, setCloneLimit, (int), (override));
5555

56+
MOCK_METHOD(int, cloneCount, (), (const, override));
57+
5658
MOCK_METHOD(bool, spriteFencingEnabled, (), (const, override));
5759
MOCK_METHOD(void, setSpriteFencingEnabled, (bool), (override));
5860

0 commit comments

Comments
 (0)