コード例 #1
0
ファイル: ShipAutopilot.cs プロジェクト: zrisher/ARMS
        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);
        }
コード例 #2
0
ファイル: ShipAutopilot.cs プロジェクト: zrisher/ARMS
        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);
                    }
                }
            }
        }
コード例 #3
0
ファイル: ShipAutopilot.cs プロジェクト: Souper07/Autopilot
        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();
        }
コード例 #4
0
ファイル: ShipAutopilot.cs プロジェクト: Souper07/Autopilot
        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;
        }