Skip to content

Commit 6470e72

Browse files
committed
Add currentCostume method to Target
to return the costume (instead of its index)
1 parent e1afa60 commit 6470e72

File tree

7 files changed

+30
-26
lines changed

7 files changed

+30
-26
lines changed

include/scratchcpp/target.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ class LIBSCRATCHCPP_EXPORT Target
5353
int costumeIndex() const;
5454
void setCostumeIndex(int newCostumeIndex);
5555

56+
std::shared_ptr<Costume> currentCostume() const;
57+
5658
const std::vector<std::shared_ptr<Costume>> &costumes() const;
5759
int addCostume(std::shared_ptr<Costume> costume);
5860
std::shared_ptr<Costume> costumeAt(int index) const;

src/blocks/looksblocks.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -710,8 +710,7 @@ void LooksBlocks::startBackdropScripts(VirtualMachine *vm, bool wait)
710710
{
711711
if (Stage *stage = vm->engine()->stage()) {
712712
if (stage->costumes().size() > 0)
713-
// TODO: Use currentCostume()
714-
vm->engine()->broadcastByPtr(stage->costumeAt(stage->costumeIndex())->broadcast(), vm, wait);
713+
vm->engine()->broadcastByPtr(stage->currentCostume()->broadcast(), vm, wait);
715714
}
716715
}
717716

@@ -855,8 +854,7 @@ unsigned int LooksBlocks::randomBackdropAndWait(VirtualMachine *vm)
855854
unsigned int LooksBlocks::checkBackdropScripts(VirtualMachine *vm)
856855
{
857856
if (Stage *stage = vm->engine()->stage()) {
858-
// TODO: Use currentCostume()
859-
if ((stage->costumes().size() > 0) && vm->engine()->broadcastByPtrRunning(stage->costumeAt(stage->costumeIndex())->broadcast(), vm))
857+
if ((stage->costumes().size() > 0) && vm->engine()->broadcastByPtrRunning(stage->currentCostume()->broadcast(), vm))
860858
vm->stop(true, true, true);
861859
}
862860

@@ -876,8 +874,7 @@ unsigned int LooksBlocks::costumeNumber(VirtualMachine *vm)
876874
unsigned int LooksBlocks::costumeName(VirtualMachine *vm)
877875
{
878876
if (Target *target = vm->target()) {
879-
// TODO: Use currentCostume()
880-
auto costume = target->costumeAt(target->costumeIndex());
877+
auto costume = target->currentCostume();
881878

882879
if (costume)
883880
vm->addReturnValue(costume->name());
@@ -902,8 +899,7 @@ unsigned int LooksBlocks::backdropNumber(VirtualMachine *vm)
902899
unsigned int LooksBlocks::backdropName(VirtualMachine *vm)
903900
{
904901
if (Stage *stage = vm->engine()->stage()) {
905-
// TODO: Use currentCostume()
906-
auto costume = stage->costumeAt(stage->costumeIndex());
902+
auto costume = stage->currentCostume();
907903

908904
if (costume)
909905
vm->addReturnValue(costume->name());

src/blocks/sensingblocks.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -501,8 +501,7 @@ unsigned int SensingBlocks::costumeNameOfSprite(VirtualMachine *vm)
501501
Sprite *sprite = dynamic_cast<Sprite *>(target);
502502

503503
if (sprite)
504-
// TODO: Use currentCostume()
505-
vm->replaceReturnValue(sprite->costumeAt(sprite->costumeIndex())->name(), 1);
504+
vm->replaceReturnValue(sprite->currentCostume()->name(), 1);
506505
else
507506
vm->replaceReturnValue(0, 1);
508507

@@ -515,8 +514,7 @@ unsigned int SensingBlocks::costumeNameOfSpriteByIndex(VirtualMachine *vm)
515514
Sprite *sprite = dynamic_cast<Sprite *>(target);
516515

517516
if (sprite)
518-
// TODO: Use currentCostume()
519-
vm->replaceReturnValue(sprite->costumeAt(sprite->costumeIndex())->name(), 1);
517+
vm->replaceReturnValue(sprite->currentCostume()->name(), 1);
520518
else
521519
vm->replaceReturnValue(0, 1);
522520

@@ -605,8 +603,7 @@ unsigned int SensingBlocks::backdropNameOfStage(VirtualMachine *vm)
605603
Stage *stage = dynamic_cast<Stage *>(target);
606604

607605
if (stage)
608-
// TODO: Use currentCostume()
609-
vm->replaceReturnValue(stage->costumeAt(stage->costumeIndex())->name(), 1);
606+
vm->replaceReturnValue(stage->currentCostume()->name(), 1);
610607
else
611608
vm->replaceReturnValue(0, 1);
612609

@@ -619,8 +616,7 @@ unsigned int SensingBlocks::backdropNameOfStageByIndex(VirtualMachine *vm)
619616
Stage *stage = dynamic_cast<Stage *>(target);
620617

621618
if (stage)
622-
// TODO: Use currentCostume()
623-
vm->replaceReturnValue(stage->costumeAt(stage->costumeIndex())->name(), 1);
619+
vm->replaceReturnValue(stage->currentCostume()->name(), 1);
624620
else
625621
vm->replaceReturnValue(0, 1);
626622

src/scratch/sprite.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,7 @@ void Sprite::setSize(double newSize)
196196
if (impl->iface)
197197
impl->iface->onSizeChanged(impl->size);
198198

199-
// TODO: Make currentCostume() return the costume (not index)
200-
auto costume = costumeAt(costumeIndex());
199+
auto costume = currentCostume();
201200

202201
if (costume)
203202
costume->setScale(newSize / 100);
@@ -275,8 +274,7 @@ std::string Sprite::rotationStyleStr() const
275274
void Sprite::setRotationStyle(RotationStyle newRotationStyle)
276275
{
277276
impl->rotationStyle = newRotationStyle;
278-
// TODO: Make currentCostume() return the costume (not index)
279-
auto costume = costumeAt(costumeIndex());
277+
auto costume = currentCostume();
280278

281279
if (costume)
282280
costume->setMirrorHorizontally(newRotationStyle == RotationStyle::LeftRight);
@@ -327,8 +325,7 @@ void Sprite::setGraphicsEffectValue(IGraphicsEffect *effect, double value)
327325
{
328326
impl->graphicsEffects[effect] = value;
329327

330-
// TODO: Make currentCostume() return the costume (not index)
331-
auto costume = costumeAt(costumeIndex());
328+
auto costume = currentCostume();
332329

333330
if (costume)
334331
costume->setGraphicsEffectValue(effect, value);
@@ -339,8 +336,7 @@ void Sprite::clearGraphicsEffects()
339336
{
340337
impl->graphicsEffects.clear();
341338

342-
// TODO: Make currentCostume() return the costume (not index)
343-
auto costume = costumeAt(costumeIndex());
339+
auto costume = currentCostume();
344340

345341
if (costume)
346342
costume->clearGraphicsEffects();

src/scratch/sprite_p.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ void SpritePrivate::getBoundingRect(Rect *out) const
4141
{
4242
assert(out);
4343
assert(sprite);
44-
// TODO: Make currentCostume() return the costume
45-
auto costume = sprite->costumeAt(sprite->costumeIndex());
44+
auto costume = sprite->currentCostume();
4645

4746
if (!costume) {
4847
out->setLeft(x);

src/scratch/target.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,12 @@ void Target::setCostumeIndex(int newCostumeIndex)
211211
impl->costumeIndex = newCostumeIndex;
212212
}
213213

214+
/*! Returns the currently set costume. */
215+
std::shared_ptr<Costume> Target::currentCostume() const
216+
{
217+
return costumeAt(impl->costumeIndex);
218+
}
219+
214220
/*! Returns the list of costumes. */
215221
const std::vector<std::shared_ptr<Costume>> &Target::costumes() const
216222
{

test/scratch_classes/target_test.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,30 +187,39 @@ TEST(TargetTest, CostumeIndex)
187187
{
188188
Target target;
189189
ASSERT_EQ(target.costumeIndex(), -1);
190+
ASSERT_EQ(target.currentCostume(), nullptr);
190191

191192
target.setCostumeIndex(0);
192193
ASSERT_EQ(target.costumeIndex(), -1);
194+
ASSERT_EQ(target.currentCostume(), nullptr);
193195

194196
target.setCostumeIndex(1);
195197
ASSERT_EQ(target.costumeIndex(), -1);
198+
ASSERT_EQ(target.currentCostume(), nullptr);
196199

197200
target.addCostume(std::make_shared<Costume>("", "", ""));
198201
ASSERT_EQ(target.costumeIndex(), -1);
202+
ASSERT_EQ(target.currentCostume(), nullptr);
199203

200204
target.setCostumeIndex(0);
201205
ASSERT_EQ(target.costumeIndex(), 0);
206+
ASSERT_EQ(target.currentCostume(), target.costumeAt(0));
202207

203208
target.setCostumeIndex(1);
204209
ASSERT_EQ(target.costumeIndex(), 0);
210+
ASSERT_EQ(target.currentCostume(), target.costumeAt(0));
205211

206212
target.addCostume(std::make_shared<Costume>("", "", ""));
207213
ASSERT_EQ(target.costumeIndex(), 0);
214+
ASSERT_EQ(target.currentCostume(), target.costumeAt(0));
208215

209216
target.setCostumeIndex(1);
210217
ASSERT_EQ(target.costumeIndex(), 1);
218+
ASSERT_EQ(target.currentCostume(), target.costumeAt(1));
211219

212220
target.setCostumeIndex(2);
213221
ASSERT_EQ(target.costumeIndex(), 1);
222+
ASSERT_EQ(target.currentCostume(), target.costumeAt(1));
214223
}
215224

216225
TEST(TargetTest, Costumes)

0 commit comments

Comments
 (0)