Skip to content

Commit b2ed432

Browse files
authored
Merge pull request #294 from scratchcpp/costume_range
Force current costume to be in range
2 parents 4b83845 + 43cc2e4 commit b2ed432

File tree

6 files changed

+35
-9
lines changed

6 files changed

+35
-9
lines changed

src/internal/scratch3reader.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,10 +193,6 @@ bool Scratch3Reader::load()
193193

194194
// TODO: Add comments
195195

196-
// currentCostume
197-
READER_STEP(step, "target -> currentCostume");
198-
target->setCurrentCostume(jsonTarget["currentCostume"]);
199-
200196
// costumes
201197
READER_STEP(step, "target -> costumes");
202198
auto costumes = jsonTarget["costumes"];
@@ -218,6 +214,10 @@ bool Scratch3Reader::load()
218214
target->addCostume(costume);
219215
}
220216

217+
// currentCostume
218+
READER_STEP(step, "target -> currentCostume");
219+
target->setCurrentCostume(jsonToValue(jsonTarget["currentCostume"]).toInt() + 1);
220+
221221
// sounds
222222
READER_STEP(step, "target -> sounds");
223223
auto sounds = jsonTarget["sounds"];

src/scratch/target.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,8 @@ int Target::currentCostume() const
203203
/*! Sets the ID of the current costume. */
204204
void Target::setCurrentCostume(int newCostume)
205205
{
206-
impl->currentCostume = newCostume;
206+
if (newCostume > 0 && newCostume <= costumes().size())
207+
impl->currentCostume = newCostume;
207208
}
208209

209210
/*! Returns the list of costumes. */

src/scratch/target_p.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ struct TargetPrivate
2626
std::vector<std::shared_ptr<Variable>> variables;
2727
std::vector<std::shared_ptr<List>> lists;
2828
std::vector<std::shared_ptr<Block>> blocks;
29-
int currentCostume = 1;
29+
int currentCostume = 0;
3030
std::vector<std::shared_ptr<Costume>> costumes;
3131
std::vector<std::shared_ptr<Sound>> sounds;
3232
int layerOrder = 0;

test/load_project/load_project_test.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ TEST(LoadProjectTest, EmptyProject)
4040
ASSERT_EQ(stage->blocks().size(), 0);
4141
ASSERT_EQ(stage->costumes().size(), 1);
4242
// TODO: Add comments
43-
ASSERT_EQ(stage->currentCostume(), 0);
43+
ASSERT_EQ(stage->currentCostume(), 1);
4444
ASSERT_EQ(stage->sounds().size(), 0);
4545
ASSERT_EQ(stage->layerOrder(), 0);
4646
ASSERT_EQ(stage->volume(), 100);
@@ -104,6 +104,7 @@ TEST(LoadProjectTest, LoadTestProject)
104104
ASSERT_EQ(sprite1->lists().size(), 1);
105105
ASSERT_EQ(sprite1->blocks().size(), 18);
106106
ASSERT_EQ(sprite1->costumes().size(), 2);
107+
ASSERT_EQ(sprite1->currentCostume(), 2);
107108
ASSERT_EQ(sprite1->sounds().size(), 1);
108109
ASSERT_TRUE(sprite1->visible());
109110
ASSERT_EQ(sprite1->x(), 0);

test/scratch_classes/sprite_test.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ TEST(SpriteTest, Clone)
4444
sprite.addList(list1);
4545
sprite.addList(list2);
4646

47+
sprite.addCostume(std::make_shared<Costume>("", "", ""));
48+
sprite.addCostume(std::make_shared<Costume>("", "", ""));
4749
sprite.setCurrentCostume(2);
4850
sprite.setLayerOrder(5);
4951
sprite.setVolume(50);

test/scratch_classes/target_test.cpp

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,9 +178,31 @@ TEST(TargetTest, Blocks)
178178
TEST(TargetTest, CurrentCostume)
179179
{
180180
Target target;
181+
ASSERT_EQ(target.currentCostume(), 0);
182+
183+
target.setCurrentCostume(1);
184+
ASSERT_EQ(target.currentCostume(), 0);
185+
186+
target.setCurrentCostume(2);
187+
ASSERT_EQ(target.currentCostume(), 0);
188+
189+
target.addCostume(std::make_shared<Costume>("", "", ""));
190+
ASSERT_EQ(target.currentCostume(), 0);
191+
192+
target.setCurrentCostume(1);
193+
ASSERT_EQ(target.currentCostume(), 1);
194+
195+
target.setCurrentCostume(2);
196+
ASSERT_EQ(target.currentCostume(), 1);
197+
198+
target.addCostume(std::make_shared<Costume>("", "", ""));
181199
ASSERT_EQ(target.currentCostume(), 1);
182-
target.setCurrentCostume(5);
183-
ASSERT_EQ(target.currentCostume(), 5);
200+
201+
target.setCurrentCostume(2);
202+
ASSERT_EQ(target.currentCostume(), 2);
203+
204+
target.setCurrentCostume(3);
205+
ASSERT_EQ(target.currentCostume(), 2);
184206
}
185207

186208
TEST(TargetTest, Costumes)

0 commit comments

Comments
 (0)