File tree Expand file tree Collapse file tree 3 files changed +41
-0
lines changed
Expand file tree Collapse file tree 3 files changed +41
-0
lines changed Original file line number Diff line number Diff line change @@ -47,6 +47,8 @@ class LIBSCRATCHCPP_EXPORT Sprite : public Target
4747 double size () const ;
4848 void setSize (double newSize);
4949
50+ void setCurrentCostume (int newCostume);
51+
5052 double direction () const ;
5153 void setDirection (double newDirection);
5254
Original file line number Diff line number Diff line change 55#include < scratchcpp/iengine.h>
66#include < scratchcpp/variable.h>
77#include < scratchcpp/list.h>
8+ #include < scratchcpp/costume.h>
89#include < cassert>
910
1011#include " sprite_p.h"
@@ -181,6 +182,24 @@ void Sprite::setSize(double newSize)
181182 impl->size = newSize;
182183 if (impl->iface )
183184 impl->iface ->onSizeChanged (impl->size );
185+
186+ // TODO: Make currentCostume() return the costume (not index)
187+ auto costume = costumeAt (currentCostume () - 1 );
188+
189+ if (costume)
190+ costume->setScale (newSize / 100 );
191+ }
192+
193+ /* ! Overrides Target#setCurrentCostume(). */
194+ void Sprite::setCurrentCostume (int newCostume)
195+ {
196+ // TODO: Make currentCostume() return the costume (not index)
197+ auto costume = costumeAt (newCostume - 1 );
198+
199+ if (costume)
200+ costume->setScale (impl->size / 100 );
201+
202+ Target::setCurrentCostume (newCostume);
184203}
185204
186205/* ! Returns the direction. */
Original file line number Diff line number Diff line change @@ -209,10 +209,30 @@ TEST(SpriteTest, Y)
209209
210210TEST (SpriteTest, Size)
211211{
212+ auto c1 = std::make_shared<Costume>(" " , " " , " " );
213+ auto c2 = std::make_shared<Costume>(" " , " " , " " );
214+
212215 Sprite sprite;
213216 ASSERT_EQ (sprite.size (), 100 );
217+ sprite.addCostume (c1);
218+ sprite.addCostume (c2);
219+ sprite.setCurrentCostume (1 );
220+
221+ ASSERT_EQ (c1->scale (), 1 );
222+
214223 sprite.setSize (63.724 );
215224 ASSERT_EQ (sprite.size (), 63.724 );
225+ ASSERT_EQ (std::round (c1->scale () * 100000 ) / 100000 , 0.63724 );
226+
227+ sprite.setCurrentCostume (2 );
228+ ASSERT_EQ (std::round (c2->scale () * 100000 ) / 100000 , 0.63724 );
229+
230+ sprite.setSize (186.84 );
231+ ASSERT_EQ (sprite.size (), 186.84 );
232+ ASSERT_EQ (std::round (c2->scale () * 10000 ) / 10000 , 1.8684 );
233+
234+ sprite.setCurrentCostume (1 );
235+ ASSERT_EQ (std::round (c1->scale () * 10000 ) / 10000 , 1.8684 );
216236}
217237
218238TEST (SpriteTest, Direction)
You can’t perform that action at this time.
0 commit comments