11// SPDX-License-Identifier: Apache-2.0
22
3+ #include < scratchcpp/iengine.h>
4+ #include < scratchcpp/compiler.h>
5+ #include < scratchcpp/sprite.h>
6+
37#include " looksblocks.h"
48
59using namespace libscratchcpp ;
@@ -11,4 +15,93 @@ std::string LooksBlocks::name() const
1115
1216void LooksBlocks::registerBlocks (IEngine *engine)
1317{
18+ // Blocks
19+ engine->addCompileFunction (this , " looks_show" , &compileShow);
20+ engine->addCompileFunction (this , " looks_hide" , &compileHide);
21+ engine->addCompileFunction (this , " looks_changesizeby" , &compileChangeSizeBy);
22+ engine->addCompileFunction (this , " looks_setsizeto" , &compileSetSizeTo);
23+ engine->addCompileFunction (this , " looks_size" , &compileSize);
24+
25+ // Inputs
26+ engine->addInput (this , " CHANGE" , CHANGE);
27+ engine->addInput (this , " SIZE" , SIZE);
28+ }
29+
30+ void LooksBlocks::compileShow (Compiler *compiler)
31+ {
32+ compiler->addFunctionCall (&show);
33+ }
34+
35+ void LooksBlocks::compileHide (Compiler *compiler)
36+ {
37+ compiler->addFunctionCall (&hide);
38+ }
39+
40+ void LooksBlocks::compileChangeSizeBy (Compiler *compiler)
41+ {
42+ compiler->addInput (CHANGE);
43+ compiler->addFunctionCall (&changeSizeBy);
44+ }
45+
46+ void LooksBlocks::compileSetSizeTo (Compiler *compiler)
47+ {
48+ compiler->addInput (SIZE);
49+ compiler->addFunctionCall (&setSizeTo);
50+ }
51+
52+ void LooksBlocks::compileSize (Compiler *compiler)
53+ {
54+ compiler->addFunctionCall (&size);
55+ }
56+
57+ unsigned int LooksBlocks::show (VirtualMachine *vm)
58+ {
59+ Sprite *sprite = dynamic_cast <Sprite *>(vm->target ());
60+
61+ if (sprite)
62+ sprite->setVisible (true );
63+
64+ return 0 ;
65+ }
66+
67+ unsigned int LooksBlocks::hide (VirtualMachine *vm)
68+ {
69+ Sprite *sprite = dynamic_cast <Sprite *>(vm->target ());
70+
71+ if (sprite)
72+ sprite->setVisible (false );
73+
74+ return 0 ;
75+ }
76+
77+ unsigned int LooksBlocks::changeSizeBy (VirtualMachine *vm)
78+ {
79+ Sprite *sprite = dynamic_cast <Sprite *>(vm->target ());
80+
81+ if (sprite)
82+ sprite->setSize (sprite->size () + vm->getInput (0 , 1 )->toDouble ());
83+
84+ return 1 ;
85+ }
86+
87+ unsigned int LooksBlocks::setSizeTo (VirtualMachine *vm)
88+ {
89+ Sprite *sprite = dynamic_cast <Sprite *>(vm->target ());
90+
91+ if (sprite)
92+ sprite->setSize (vm->getInput (0 , 1 )->toDouble ());
93+
94+ return 1 ;
95+ }
96+
97+ unsigned int LooksBlocks::size (VirtualMachine *vm)
98+ {
99+ Sprite *sprite = dynamic_cast <Sprite *>(vm->target ());
100+
101+ if (sprite)
102+ vm->addReturnValue (sprite->size ());
103+ else
104+ vm->addReturnValue (0 );
105+
106+ return 0 ;
14107}
0 commit comments