@@ -48,6 +48,7 @@ void MotionBlocks::registerBlocks(IEngine *engine)
4848 engine->addCompileFunction (this , " motion_glidesecstoxy" , &compileGlideSecsToXY);
4949 engine->addCompileFunction (this , " motion_glideto" , &compileGlideTo);
5050 engine->addCompileFunction (this , " motion_changexby" , &compileChangeXBy);
51+ engine->addCompileFunction (this , " motion_setx" , &compileSetX);
5152}
5253
5354CompilerValue *MotionBlocks::compileMoveSteps (Compiler *compiler)
@@ -257,6 +258,16 @@ CompilerValue *MotionBlocks::compileChangeXBy(Compiler *compiler)
257258 return nullptr ;
258259}
259260
261+ CompilerValue *MotionBlocks::compileSetX (Compiler *compiler)
262+ {
263+ if (!compiler->target ()->isStage ()) {
264+ CompilerValue *x = compiler->addInput (" X" );
265+ compiler->addTargetFunctionCall (" motion_setx" , Compiler::StaticType::Void, { Compiler::StaticType::Number }, { x });
266+ }
267+
268+ return nullptr ;
269+ }
270+
260271extern " C" void motion_movesteps (Sprite *sprite, double steps)
261272{
262273 double dir = sprite->direction ();
@@ -526,6 +537,11 @@ extern "C" void motion_changexby(Sprite *sprite, double dx)
526537 sprite->setX (sprite->x () + dx);
527538}
528539
540+ extern " C" void motion_setx (Sprite *sprite, double x)
541+ {
542+ sprite->setX (x);
543+ }
544+
529545extern " C" double motion_xposition (Sprite *sprite)
530546{
531547 return sprite->x ();
0 commit comments