public Interpreter(ShipControllerBlock block) { this.m_logger = new Logger("Interpreter", block.Controller); this.Controller = block; this.NavSet = new AllNavigationSettings(block.Controller); this.Mover = new Mover(block, NavSet); }
/// <summary> /// Creates a Mover for a given ShipControllerBlock and AllNavigationSettings /// </summary> /// <param name="block">Controlling block for the grid</param> /// <param name="NavSet">Navigation settings to use.</param> public Mover(ShipControllerBlock block, AllNavigationSettings NavSet) { this.myLogger = new Logger("Mover", block.Controller); //this.myLogger.MinimumLevel = Logger.severity.DEBUG; this.Block = block; this.NavSet = NavSet; }
/// <summary> /// Search every possible ore detector for materials. /// </summary> /// <param name="requester">Must be able to control OreDetector and have same NetworkStorage</param> /// <param name="oreType">Voxel materials to search for</param> public static void SearchForMaterial(ShipControllerBlock requester, byte[] oreType, OreSearchComplete onComplete) { Vector3D position = requester.CubeBlock.GetPosition(); RelayStorage storage = requester.NetworkStorage; Static.m_thread.EnqueueAction(() => { List <OreDetector> oreDetectors = ResourcePool <List <OreDetector> > .Get(); Registrar.ForEach((OreDetector detector) => { if (detector.Block.IsWorking && requester.CubeBlock.canControlBlock(detector.Block) && detector.m_netClient.GetStorage() == storage) { oreDetectors.Add(detector); } }); IOrderedEnumerable <OreDetector> sorted = oreDetectors.OrderBy(detector => Vector3D.DistanceSquared(position, detector.Block.GetPosition())); foreach (OreDetector detector in sorted) { if (detector.GetOreLocations(position, oreType, onComplete)) { return; } } oreDetectors.Clear(); ResourcePool <List <OreDetector> > .Return(oreDetectors); onComplete(false, null, null, null); }); }
/// <summary> /// Creates a Mover for a given ShipControllerBlock and AllNavigationSettings /// </summary> /// <param name="block">Controlling block for the grid</param> /// <param name="NavSet">Navigation settings to use.</param> public Mover(ShipControllerBlock block, AllNavigationSettings NavSet) { this.m_logger = new Logger("Mover", block.Controller); this.Block = block; this.m_navSet = NavSet; CheckGrid(); }
/// <summary> /// Creates a Mover for a given ShipControllerBlock and AllNavigationSettings /// </summary> /// <param name="block">Controlling block for the grid</param> /// <param name="NavSet">Navigation settings to use.</param> public Mover(ShipControllerBlock block, RotateChecker rotateCheck) { this.Block = block; this.NavSet = new AllNavigationSettings(block.CubeBlock); this.RotateCheck = rotateCheck; this.NavSet.AfterTaskComplete += NavSet_AfterTaskComplete; CheckGrid(); }
public PathTester(ShipControllerBlock controller) { this.Controller = controller; this.AutopilotGrid = (MyCubeGrid)controller.CubeGrid; }
/// <summary> /// Search every possible ore detector for materials. /// </summary> /// <param name="requester">Must be able to control OreDetector and have same NetworkStorage</param> /// <param name="oreType">Voxel materials to search for</param> public static void SearchForMaterial(ShipControllerBlock requester, byte[] oreType, OreSearchComplete onComplete) { Vector3D position = requester.CubeBlock.GetPosition(); RelayStorage storage = requester.NetworkStorage; m_thread.EnqueueAction(() => { List<OreDetector> oreDetectors = ResourcePool<List<OreDetector>>.Get(); Registrar.ForEach((OreDetector detector) => { if (detector.Block.IsWorking && requester.CubeBlock.canControlBlock(detector.Block) && detector.m_netClient.GetStorage() == storage) oreDetectors.Add(detector); }); IOrderedEnumerable<OreDetector> sorted = oreDetectors.OrderBy(detector => Vector3D.DistanceSquared(position, detector.Block.GetPosition())); foreach (OreDetector detector in sorted) if (detector.GetOreLocations(position, oreType, onComplete)) return; oreDetectors.Clear(); ResourcePool<List<OreDetector>>.Return(oreDetectors); onComplete(false, Vector3D.Zero, null, null); }); }