public virtual MyExecutionBlock CreateCustomExecutionPlan(MyExecutionBlock defaultPlan) { if (!m_isAfterChangeModelExecute) { // this if is true at the beginning of simulation return(defaultPlan); } m_isAfterChangeModelExecute = false; var executionPlanner = TypeMap.GetInstance <IMyExecutionPlanner>(); IMyExecutable[] thisWorldTasks = defaultPlan.Children; var blocks = new List <IMyExecutable>(); // The default plan will only contain one block with: signals in, world tasks, signals out. blocks.Add(thisWorldTasks.First()); blocks.Add(AdapterInputStep); var worldPlan = executionPlanner.CreateNodeExecutionPlan(CurrentWorld.World, false); blocks.AddRange(worldPlan.Children.Where(x => x != CurrentWorld.GetWorldRenderTask())); blocks.Add(LearningStep); blocks.Add(CurrentWorld.GetWorldRenderTask()); blocks.Add(AdapterOutputStep); blocks.Add(thisWorldTasks.Last()); return(new MyExecutionBlock(blocks.ToArray())); }