예제 #1
0
        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);
                    }
                }
            }
        }
예제 #2
0
파일: TunnelMiner.cs 프로젝트: zrisher/ARMS
        public TunnelMiner(Pathfinder pathfinder, Destination target, string oreName) : base(pathfinder, oreName)
        {
            m_target = target;

            AllNavigationSettings.SettingsLevel level = m_navSet.Settings_Task_NavMove;
            level.NavigatorMover            = this;
            level.NavigatorRotator          = this;
            level.IgnoreAsteroid            = true;
            level.SpeedTarget               = 1f;
            level.PathfinderCanChangeCourse = false;

            m_stage = Stage.Mine;
            Log.DebugLog("started", Logger.severity.DEBUG);
        }
예제 #3
0
파일: EscapeMiner.cs 프로젝트: zrisher/ARMS
        public EscapeMiner(Pathfinder pathfinder, MyVoxelBase voxel) : base(pathfinder, string.Empty)
        {
            m_target = Destination.FromWorld(voxel, m_navBlock.WorldPosition);

            AllNavigationSettings.SettingsLevel level = m_navSet.Settings_Task_NavWay;
            level.NavigatorMover            = this;
            level.NavigatorRotator          = this;
            level.IgnoreAsteroid            = true;
            level.SpeedTarget               = 1f;
            level.PathfinderCanChangeCourse = false;

            m_stage = Stage.Backout;
            EnableDrills(false);
            Log.DebugLog("started", Logger.severity.DEBUG);
        }
예제 #4
0
        public SurfaceMiner(Pathfinder pathfinder, Destination target, string oreName) : base(pathfinder, oreName)
        {
            m_target = target;

            Vector3 toDeposit = Vector3.Normalize(m_target.WorldPosition() - m_grid.GetCentre());

            toDeposit.CalculatePerpendicularVector(out m_perp1);
            Vector3.Cross(ref toDeposit, ref m_perp1, out m_perp2);

            AllNavigationSettings.SettingsLevel level = m_navSet.Settings_Task_NavMove;
            level.NavigatorMover            = this;
            level.NavigatorRotator          = this;
            level.IgnoreAsteroid            = true;
            level.SpeedTarget               = 1f;
            level.PathfinderCanChangeCourse = false;

            m_stage = Stage.GetSurface;
            Log.DebugLog("started", Logger.severity.DEBUG);
        }
예제 #5
0
        private void UpdateCustomInfo()
        {
            AutopilotTerminal ApTerm = m_block.AutopilotTerminal;

            AllNavigationSettings.SettingsLevel Settings_Current = m_navSet.Settings_Current;

            ApTerm.m_autopilotStatus = m_state;
            if (m_state == State.Halted)
            {
                return;
            }

            AutopilotTerminal.AutopilotFlags flags = AutopilotTerminal.AutopilotFlags.None;
            if (m_controlledGrid != null)
            {
                flags |= AutopilotTerminal.AutopilotFlags.HasControl;
            }

            if (m_pathfinder.ReportedObstruction != null)
            {
                ApTerm.m_blockedBy = m_pathfinder.ReportedObstruction.EntityId;
                if (m_pathfinder.RotateCheck.ObstructingEntity != null)
                {
                    flags |= AutopilotTerminal.AutopilotFlags.RotationBlocked;
                }
            }
            else if (m_pathfinder.RotateCheck.ObstructingEntity != null)
            {
                flags |= AutopilotTerminal.AutopilotFlags.RotationBlocked;
                ApTerm.m_blockedBy = m_pathfinder.RotateCheck.ObstructingEntity.EntityId;
            }

            EnemyFinder ef = Settings_Current.EnemyFinder;

            if (ef != null && ef.Grid == null)
            {
                flags |= AutopilotTerminal.AutopilotFlags.EnemyFinderIssue;
                ApTerm.m_reasonCannotTarget = ef.m_reason;
                if (ef.m_bestGrid != null)
                {
                    ApTerm.m_enemyFinderBestTarget = ef.m_bestGrid.Entity.EntityId;
                }
            }
            INavigatorMover navM = Settings_Current.NavigatorMover;

            if (navM != null)
            {
                flags |= AutopilotTerminal.AutopilotFlags.HasNavigatorMover;
                ApTerm.m_prevNavMover = navM.GetType().Name;
                AutopilotTerminal.Static.prevNavMoverInfo.Update((IMyTerminalBlock)m_block.CubeBlock, navM.AppendCustomInfo);
            }
            INavigatorRotator navR = Settings_Current.NavigatorRotator;

            if (navR != null && navR != navM)
            {
                flags |= AutopilotTerminal.AutopilotFlags.HasNavigatorRotator;
                ApTerm.m_prevNavRotator = navR.GetType().Name;
                AutopilotTerminal.Static.prevNavRotatorInfo.Update((IMyTerminalBlock)m_block.CubeBlock, navR.AppendCustomInfo);
            }
            ApTerm.m_autopilotFlags  = flags;
            ApTerm.m_pathfinderState = m_pathfinder.CurrentState;
            ApTerm.SetWaitUntil(Settings_Current.WaitUntil);
            ApTerm.SetDistance(Settings_Current.Distance, Settings_Current.DistanceAngle);
            ApTerm.m_welderUnfinishedBlocks = m_navSet.WelderUnfinishedBlocks;
            ApTerm.m_complaint     = Settings_Current.Complaint;
            ApTerm.m_jumpComplaint = m_pathfinder.JumpComplaint;
        }