public void Init()
        {
            #region fetchblocks
            GridTerminalSystemUtils GTS = new GridTerminalSystemUtils(Me, GridTerminalSystem);
            control    = GTS.GetBlockWithNameOnGrid(controllerName) as IMyShipController;
            mergeBlock = GTS.GetBlockWithNameOnGrid(mergeBlockName) as IMyShipMergeBlock;

            var antennas = new List <IMyRadioAntenna>();
            GTS.GetBlocksOfTypeOnGrid(antennas);
            #endregion

            #region initModules
            if (antennas.Count > 0)
            {
                commsHandler = new CommsHandler(this, antennas.First());
            }
            else
            {
                commsHandler = new CommsHandler(this, null);
            }

            var commands = new Commands(this, commsHandler);
            commands.RegisterCommands();

            EntityTracking_Module.refExpSettings refExp = EntityTracking_Module.refExpSettings.Sensor | EntityTracking_Module.refExpSettings.Turret;
            targetTracker = new EntityTracking_Module(GTS, control, null, refExp);
            targetTracker.onEntityDetected += OnTargetFound;

            controlModule = new ControlModule(GTS, control);
            proNav        = new ProNav(controlModule, 30);

            missionScheduler = new Scheduler();

            payload = new Payload(GTS, backupDetonationEngageDist);
            #endregion

            mode = CurrentMode.Idle;

            initialized             = true;
            Runtime.UpdateFrequency = UpdateFrequency.Update1;
        }
 public Commands(Program P, CommsHandler handler)
 {
     this.P       = P;
     this.handler = handler;
 }
Пример #3
0
        public IEnumerator <bool> ProgramInit()
        {
            #region serializer
            nameSerializer = new INISerializer("HaE MissileBase");
            nameSerializer.AddValue("missileTag", x => x, "[HaE Missile]");
            nameSerializer.AddValue("siloDoorTag", x => x, "[HaE SiloDoor]");
            nameSerializer.AddValue("missileStatusLCDTag", x => x, "[HaE MissileStatus]");
            nameSerializer.AddValue("targetingCameraName", x => x, "TargetingCamera");
            nameSerializer.AddValue("controllername", x => x, "controller");
            nameSerializer.AddValue("IgnoreTag", x => x, "[IgnoreTracker]");
            nameSerializer.AddValue("targetingCastLength", x => double.Parse(x), 3000);

            if (Me.CustomData == "")
            {
                string temp = Me.CustomData;
                nameSerializer.FirstSerialization(ref temp);
                Me.CustomData = temp;
            }
            else
            {
                nameSerializer.DeSerialize(Me.CustomData);
            }

            yield return(true);

            #endregion

            #region fetchblocks
            GridTerminalSystemUtils GTS = new GridTerminalSystemUtils(Me, GridTerminalSystem);
            missiles = new MissileManager(GTS, this, missileTag);
            yield return(true);

            var antennas = new List <IMyRadioAntenna>();
            GTS.GetBlocksOfTypeOnGrid(antennas);
            yield return(true);

            var camera     = GridTerminalSystem.GetBlockWithName(targetingCameraName) as IMyCameraBlock;
            var controller = GridTerminalSystem.GetBlockWithName(controllername) as IMyShipController;
            yield return(true);

            #endregion

            #region initModules
            if (antennas.Count > 0)
            {
                commsHandler = new CommsHandler(this, antennas.First());
            }
            else
            {
                commsHandler = new CommsHandler(this, null);
            }

            var commands = new Commands(this, commsHandler);
            commands.RegisterCommands();

            silos = new MissileSilos(GTS, this, siloDoorTag);
            yield return(true);

            if (camera != null && controller != null)
            {
                entityTrackingModule = new EntityTracking_Module(GTS, controller, camera, IgnoreTag);

                ITracking cameraTracker = null;
                foreach (ITracking tracker in entityTrackingModule.ObjectTrackers)
                {
                    var camT = tracker as LidarTracking;
                    if (camT != null)
                    {
                        cameraTracker = camT;
                    }
                }
                entityTrackingModule.ObjectTrackers.Clear();
                entityTrackingModule.ObjectTrackers.Add(cameraTracker);

                entityTrackingModule.onEntityDetected += OnEntityDetected;
            }
            else
            {
                Echo($"camera: {camera != null}\ncontroller: {controller != null}");
            }

            yield return(true);

            var lcds = new List <IMyTextPanel>();
            GridTerminalSystem.GetBlocksOfType(lcds, x => x.CustomName.Contains(missileStatusLCDTag));
            statusWriter = new StatusWriter(this, lcds);
            #endregion

            initialized = true;
        }