@@ -226,6 +226,14 @@ void Engine::compile()
226226 Compiler compiler (this , target);
227227 auto block = monitor->block ();
228228 auto section = blockSection (block->opcode ());
229+ auto container = blockSectionContainer (block->opcode ());
230+
231+ if (container) {
232+ MonitorNameFunc f = container->resolveMonitorNameFunc (block->opcode ());
233+
234+ if (f)
235+ monitor->impl ->name = f (block.get ());
236+ }
229237
230238 if (section) {
231239 auto script = std::make_shared<Script>(target, block, this );
@@ -804,6 +812,14 @@ void Engine::addCompileFunction(IBlockSection *section, const std::string &opcod
804812 container->addCompileFunction (opcode, f);
805813}
806814
815+ void Engine::addMonitorNameFunction (IBlockSection *section, const std::string &opcode, MonitorNameFunc f)
816+ {
817+ auto container = blockSectionContainer (section);
818+
819+ if (container)
820+ container->addMonitorNameFunction (opcode, f);
821+ }
822+
807823void Engine::addHatBlock (IBlockSection *section, const std::string &opcode)
808824{
809825 auto container = blockSectionContainer (section);
@@ -1439,6 +1455,14 @@ void Engine::addVarOrListMonitor(std::shared_ptr<Monitor> monitor, Target *targe
14391455 monitor->setSprite (dynamic_cast <Sprite *>(target));
14401456
14411457 monitor->impl ->blockSection = blockSection (monitor->opcode ());
1458+ auto container = blockSectionContainer (monitor->opcode ());
1459+
1460+ if (container) {
1461+ MonitorNameFunc f = container->resolveMonitorNameFunc (monitor->opcode ());
1462+
1463+ if (f)
1464+ monitor->impl ->name = f (monitor->block ().get ());
1465+ }
14421466
14431467 // Auto-position the monitor
14441468 Rect rect = Monitor::getInitialPosition (m_monitors, monitor->width (), monitor->height ());
0 commit comments