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); } } } }
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); }
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); }
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); }
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; }