Example #1
0
 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);
 }
Example #2
0
 /// <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;
 }
Example #3
0
        /// <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);
            });
        }
Example #4
0
        /// <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();
        }
Example #5
0
        /// <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();
        }
Example #6
0
 public PathTester(ShipControllerBlock controller)
 {
     this.Controller    = controller;
     this.AutopilotGrid = (MyCubeGrid)controller.CubeGrid;
 }
Example #7
0
        /// <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);
            });
        }