public bool Restore(string machineName, IEnumerable <MyObjectBuilder_ScriptSMCursor> cursors) { MyObjectBuilder_ScriptSM machineDefinition; if (!m_machineDefinitions.TryGetValue(machineName, out machineDefinition)) { return(false); } var definitionWithoutCursors = new MyObjectBuilder_ScriptSM { Name = machineDefinition.Name, Nodes = machineDefinition.Nodes, Transitions = machineDefinition.Transitions }; var newMachine = new MyVSStateMachine(); newMachine.Init(definitionWithoutCursors); foreach (var newCursorData in cursors) { if (newMachine.RestoreCursor(newCursorData.NodeName) == null) { return(false); } } m_runningMachines.Add(newMachine); return(true); }
public void Init(MyObjectBuilder_ScriptSM ob, long?ownerId = null) { m_objectBuilder = ob; Name = ob.Name; if (ob.Nodes != null) { foreach (var nodeData in ob.Nodes) { MyStateMachineNode stateNode; if (nodeData is MyObjectBuilder_ScriptSMFinalNode) { stateNode = new MyVSStateMachineFinalNode(nodeData.Name); } else if (nodeData is MyObjectBuilder_ScriptSMSpreadNode) { stateNode = new MyVSStateMachineSpreadNode(nodeData.Name); } else if (nodeData is MyObjectBuilder_ScriptSMBarrierNode) { stateNode = new MyVSStateMachineBarrierNode(nodeData.Name); } else { var scriptType = MyVSAssemblyProvider.GetType("VisualScripting.CustomScripts." + nodeData.ScriptClassName); var missionNode = new MyVSStateMachineNode(nodeData.Name, scriptType); if (missionNode.ScriptInstance != null) { if (ownerId == null) { missionNode.ScriptInstance.OwnerId = ob.OwnerId; } else { missionNode.ScriptInstance.OwnerId = ownerId.Value; } } stateNode = missionNode; } AddNode(stateNode); } } if (ob.Transitions != null) { foreach (var transitionData in ob.Transitions) { AddTransition(transitionData.From, transitionData.To, name: transitionData.Name); } } if (ob.Cursors != null) { foreach (var cursorData in ob.Cursors) { CreateCursor(cursorData.NodeName); } } }