public Builder_Autopilot GetBuilder() { if (!m_block.AutopilotControl) { return(null); } Builder_Autopilot result = new Builder_Autopilot() { AutopilotBlock = m_block.CubeBlock.EntityId }; if (m_autopilotActions == null || m_autopilotActions.CurrentIndex <= 0 || m_autopilotActions.Current == null) { return(null); } result.CurrentCommand = m_autopilotActions.CurrentIndex; Log.DebugLog("current command: " + result.CurrentCommand); result.Commands = m_commands.Commands; Log.DebugLog("commands: " + result.Commands); EnemyFinder finder = m_navSet.Settings_Current.EnemyFinder; if (finder != null) { result.EngagerOriginalEntity = finder.m_originalDestEntity == null ? 0L : finder.m_originalDestEntity.EntityId; result.EngagerOriginalPosition = finder.m_originalPosition; Log.DebugLog("added EngagerOriginalEntity: " + result.EngagerOriginalEntity + ", and EngagerOriginalPosition: " + result.EngagerOriginalPosition); } return(result); }
public void ResumeFromSave(Builder_Autopilot builder) { using (lock_execution.AcquireExclusiveUsing()) { m_navSet.OnStartOfCommands(); Log.DebugLog("resume: " + builder.Commands + ", current: " + builder.CurrentCommand, Logger.severity.DEBUG); m_autopilotActions = m_commands.GetActions(builder.Commands); while (m_autopilotActions.CurrentIndex < builder.CurrentCommand - 1 && m_autopilotActions.MoveNext()) { m_autopilotActions.Current.Invoke(m_pathfinder); Log.DebugLog("fast forward: " + m_autopilotActions.CurrentIndex); // clear navigators' levels for (AllNavigationSettings.SettingsLevelName levelName = AllNavigationSettings.SettingsLevelName.NavRot; levelName < AllNavigationSettings.SettingsLevelName.NavWay; levelName++) { AllNavigationSettings.SettingsLevel settingsAtLevel = m_navSet.GetSettingsLevel(levelName); if (settingsAtLevel.NavigatorMover != null || settingsAtLevel.NavigatorRotator != null) { Log.DebugLog("clear " + levelName); m_navSet.OnTaskComplete(levelName); break; } } } if (m_autopilotActions.MoveNext()) { m_autopilotActions.Current.Invoke(m_pathfinder); } // clear wait m_navSet.OnTaskComplete(AllNavigationSettings.SettingsLevelName.NavWay); EnemyFinder finder = m_navSet.Settings_Current.EnemyFinder; if (finder != null) { if (builder.EngagerOriginalEntity != 0L) { if (!MyAPIGateway.Entities.TryGetEntityById(builder.EngagerOriginalEntity, out finder.m_originalDestEntity)) { Log.AlwaysLog("Failed to restore original destination enitity for enemy finder: " + builder.EngagerOriginalEntity, Logger.severity.WARNING); finder.m_originalDestEntity = null; } else { Log.DebugLog("Restored original destination enitity for enemy finder: " + finder.m_originalDestEntity.getBestName()); } } if (builder.EngagerOriginalPosition.IsValid()) { finder.m_originalPosition = builder.EngagerOriginalPosition; Log.DebugLog("Restored original position for enemy finder: " + builder.EngagerOriginalPosition); } } } }
private void ResumeFromSave() { Builder_Autopilot builder = this.Resume; this.Resume = null; m_navSet.OnStartOfCommands(); m_logger.debugLog("resume: " + builder.Commands, Logger.severity.DEBUG); m_interpreter.enqueueAllActions(builder.Commands); m_logger.debugLog("from builder, added " + m_interpreter.instructionQueue.Count + " commands"); int i; for (i = 0; i < builder.CurrentCommand; i++) { m_logger.debugLog("fast forward: " + m_interpreter.instructionQueueString[i]); m_interpreter.instructionQueue.Dequeue().Invoke(); // clear navigators' levels for (AllNavigationSettings.SettingsLevelName levelName = AllNavigationSettings.SettingsLevelName.NavRot; levelName < AllNavigationSettings.SettingsLevelName.NavWay; levelName++) { AllNavigationSettings.SettingsLevel settingsAtLevel = m_navSet.GetSettingsLevel(levelName); if (settingsAtLevel.NavigatorMover != null || settingsAtLevel.NavigatorRotator != null) { m_logger.debugLog("clear " + levelName); m_navSet.OnTaskComplete(levelName); } } } // clear wait m_navSet.OnTaskComplete(AllNavigationSettings.SettingsLevelName.NavWay); EnemyFinder finder = m_navSet.Settings_Current.EnemyFinder; if (finder != null) { if (builder.EngagerOriginalEntity != 0L) { if (!MyAPIGateway.Entities.TryGetEntityById(builder.EngagerOriginalEntity, out finder.m_originalDestEntity)) { m_logger.alwaysLog("Failed to restore original destination enitity for enemy finder: " + builder.EngagerOriginalEntity, Logger.severity.WARNING); finder.m_originalDestEntity = null; } else m_logger.debugLog("Restored original destination enitity for enemy finder: " + finder.m_originalDestEntity.getBestName()); } if (builder.EngagerOriginalPosition.IsValid()) { finder.m_originalPosition = builder.EngagerOriginalPosition; m_logger.debugLog("Restored original position for enemy finder: " + builder.EngagerOriginalPosition); } } m_logger.debugLog("resume: " + m_interpreter.instructionQueueString[i]); m_interpreter.instructionQueue.Dequeue().Invoke(); }
public Builder_Autopilot GetBuilder() { if (!m_block.AutopilotControl) return null; Builder_Autopilot result = new Builder_Autopilot() { AutopilotBlock = m_block.CubeBlock.EntityId }; result.CurrentCommand = m_interpreter.instructionQueueString.Count - m_interpreter.instructionQueue.Count - 1; m_logger.debugLog("current command: " + result.CurrentCommand); // don't need to save if we are not running (-1) or on first command (0) if (result.CurrentCommand <= 0) return null; result.Commands = string.Join(";", m_interpreter.instructionQueueString); m_logger.debugLog("commands: " + result.Commands); EnemyFinder finder = m_navSet.Settings_Current.EnemyFinder; if (finder != null) { result.EngagerOriginalEntity = finder.m_originalDestEntity == null ? 0L : finder.m_originalDestEntity.EntityId; result.EngagerOriginalPosition = finder.m_originalPosition; m_logger.debugLog("added EngagerOriginalEntity: " + result.EngagerOriginalEntity + ", and EngagerOriginalPosition: " + result.EngagerOriginalPosition); } return result; }