Esempio n. 1
0
        public IEnumerator <bool> Init()
        {
            iniSerializer = new INISerializer("DroneControl");
            iniSerializer.AddValue("controllerName", x => x, "Controller");

            if (Me.CustomData == "")
            {
                string temp = Me.CustomData;
                iniSerializer.FirstSerialization(ref temp);
                Me.CustomData = temp;
            }
            else
            {
                iniSerializer.DeSerialize(Me.CustomData);
            }
            yield return(true);

            time = new IngameTime();
            GTS  = new GridTerminalSystemUtils(Me, GridTerminalSystem);
            yield return(true);

            controller = GTS.GetBlockWithNameOnGrid(controllerName) as IMyShipController;
            yield return(true);

            entityTracking = new EntityTracking_Module(GTS, controller, null, EntityTracking_Module.refExpSettings.Turret);
            autoPilot      = new AutoPilot(GTS, controller, time, entityTracking);
            yield return(true);

            comms   = new InterGridComms(IGC, time, Me);
            comms.P = this;
            yield return(true);

            RegisterCommands();
            loaded = true;
        }
Esempio n. 2
0
            public ACPWrapperV2(GridTerminalSystemUtils GTS, string antennaTag = null)
            {
                this.GTS = GTS;

                GTS.GridTerminalSystem.GetBlocksOfType <IMyFunctionalBlock>(null,
                                                                            x =>
                {
                    if (antennaTag == null)
                    {
                        return(false);
                    }
                    else if (!x.CustomName.Contains(antennaTag))
                    {
                        return(false);
                    }

                    var antenna = x as IMyRadioAntenna;
                    if (antenna != null)
                    {
                        antennas.Add(new Antenna(antenna));
                    }
                    else
                    {
                        var laserAntenna = x as IMyLaserAntenna;
                        if (laserAntenna != null)
                        {
                            antennas.Add(new Antenna(laserAntenna));
                        }
                    }

                    return(false);
                });

                listenIds.Add("0");
            }
            public ControlModule(GridTerminalSystemUtils gts, IMyShipController control)
            {
                this.control = control;

                gts.GetBlocksOfTypeOnGrid(thrusters);
                gts.GetBlocksOfTypeOnGrid(gyros);
            }
            public EntityTracking_Module(GridTerminalSystemUtils GTS, IMyShipController reference, IMyCameraBlock targetingCamera, string ignoreTag = null)
            {
                Func <IMyTerminalBlock, bool> filter = null;

                if (ignoreTag != null)
                {
                    filter = (x => !x.CustomName.Contains(ignoreTag));
                }

                List <IMyLargeTurretBase> turretList = new List <IMyLargeTurretBase>();

                GTS.GridTerminalSystem.GetBlocksOfType(turretList, filter);
                ObjectTrackers.Add(new TurretTracking(turretList));

                List <IMySensorBlock> sensorList = new List <IMySensorBlock>();

                GTS.GridTerminalSystem.GetBlocksOfType(sensorList, filter);
                ObjectTrackers.Add(new SensorTracking(sensorList));

                List <IMyCameraBlock> cameraList = new List <IMyCameraBlock>();

                GTS.GridTerminalSystem.GetBlocksOfType(cameraList, filter);
                ObjectTrackers.Add(new LidarTracking(cameraList, reference, known_Objects.LidarEntities));

                targetPainter = new TargetPainter(targetingCamera, cameraList);

                foreach (var tracker in ObjectTrackers)
                {
                    tracker.OnEntityDetected += OnEntityDetected;
                }
            }
            public MissileTurretGroup(GridTerminalSystemUtils GTS, IMyBlockGroup turretGroup, IngameTime ingameTime, DeadzoneProvider deadzoneProvider, string azimuthTag, string elevationTag)
            {
                var rotors = new List <IMyMotorStator>();

                turretGroup.GetBlocksOfType(rotors);

                Setup(GTS, rotors, ingameTime, deadzoneProvider, azimuthTag, elevationTag);
            }
            public Autopilot_Module(GridTerminalSystemUtils GTS, IMyShipController controller, IngameTime ingameTime,
                                    PID_Controller.PIDSettings gyroPidSettings, PID_Controller.PIDSettings thrustPidSettings,
                                    EntityTracking_Module trackingModule) : this(GTS, controller, ingameTime, trackingModule)
            {
                thrustPidController = new PID_Controller(thrustPidSettings);

                gyroControl = new AdvGyroControl(gyroPidSettings, ingameTime);
            }
Esempio n. 7
0
        public IEnumerator <bool> Init()
        {
            cannonSettings = new INISerializer("CannonSettings");
            cannonSettings.AddValue("referenceName", x => x, "RCReference");
            cannonSettings.AddValue("speedCap", x => double.Parse(x), 104.38);
            cannonSettings.AddValue("launchVelocity", x => double.Parse(x), 100.0);
            cannonSettings.AddValue("sourceRotorTName", x => x, "[OrbitalCannonBase]_[Azimuth]");
            cannonSettings.AddValue("elevationTag", x => x, "[Elevation]");
            cannonSettings.AddValue("timerName", x => x, "CannonTimer");


            if (Me.CustomData == "")
            {
                string temp = Me.CustomData;
                cannonSettings.FirstSerialization(ref temp);
                Me.CustomData = temp;
            }
            else
            {
                cannonSettings.DeSerialize(Me.CustomData);
            }
            yield return(true);

            ingameTime = new IngameTime();
            GTSUtils   = new GridTerminalSystemUtils(Me, GridTerminalSystem);

            yield return(true);

            IMyShipController reference   = GridTerminalSystem.GetBlockWithName((string)cannonSettings.GetValue("referenceName")) as IMyShipController;
            IMyMotorStator    sourceRotor = GridTerminalSystem.GetBlockWithName((string)cannonSettings.GetValue("sourceRotorTName")) as IMyMotorStator;
            IMyTimerBlock     timer       = GridTerminalSystem.GetBlockWithName((string)cannonSettings.GetValue("timerName")) as IMyTimerBlock;

            Echo($"Getting blocks status:...\nreference: {reference != null}\nsourceRotor: {sourceRotor != null}");

            if (reference == null || sourceRotor == null)
            {
                throw new Exception("cant get blocks!");
            }

            yield return(true);

            targeter = new Targeter
                       (
                (double)cannonSettings.GetValue("speedCap"),
                (double)cannonSettings.GetValue("launchVelocity"),
                reference
                       );
            targeter.directionFoundCallback += TargetCalculatedCallback;

            yield return(true);

            cannon       = Cannon.CreateCannon(sourceRotor, GTSUtils, ingameTime, reference, (string)cannonSettings.GetValue("sourceRotorTName"), (string)cannonSettings.GetValue("elevationTag"));
            cannon.Timer = timer;
            yield return(true);

            Echo("Initialized!");
            initialized = true;
        }
            public EntityTracking_Module(GridTerminalSystemUtils GTS, IMyShipController reference, IMyCameraBlock targetingCamera, refExpSettings supportRefExp, string ignoreTag = null) : this(GTS, reference, targetingCamera, ignoreTag)
            {
                this.supportRefExp = supportRefExp;

                foreach (var tracker in ObjectTrackers)
                {
                    tracker.SetRefExpSettings(GTS.Me, supportRefExp);
                }

                targetPainter.SetRefExpSettings(GTS.Me, supportRefExp);
            }
            public void Setup(GridTerminalSystemUtils GTS, List <IMyMotorStator> rotors, IngameTime ingameTime, DeadzoneProvider deadzoneProvider, string azimuthTag, string elevationTag)
            {
                this.GTS = GTS;
                this.deadzoneProvider = deadzoneProvider;
                this.ingameTime       = ingameTime;

                List <IMyMotorStator> elevation = rotors.Where(x => x.CustomName.Contains(elevationTag)).ToList();
                IMyMotorStator        azimuth   = rotors.First(x => x.CustomName.Contains(azimuthTag));

                defaultDir = azimuth.WorldMatrix.Forward;

                launchers = Select(elevation);

                List <RotorControl.RotorReferencePair> elevationPairs = new List <RotorControl.RotorReferencePair>();

                for (int i = 0; i < elevation.Count; i++)
                {
                    elevationPairs.Add(new RotorControl.RotorReferencePair {
                        rotor = elevation[i], reference = launchers[i]
                    });
                }

                RotorControl.RotorReferencePair azimuthPair = new RotorControl.RotorReferencePair {
                    rotor = azimuth, reference = launchers[0]
                };

                rotorControl            = new RotorControl(azimuthPair, elevationPairs);
                rotorControl.onTarget   = OnTarget;
                rotorControl.useForward = true;

                #region configuration
                turretConfig = new INISerializer("TurretConfig");

                turretConfig.AddValue("azimuthMultiplier", x => double.Parse(x), -1.0);
                turretConfig.AddValue("elevationMultiplier", x => double.Parse(x), -1.0);
                turretConfig.AddValue("salvoSize", x => int.Parse(x), 3);
                turretConfig.AddValue("salvoTimeout", x => double.Parse(x), 2.5);

                if (rotorControl.azimuth.rotor.CustomData == "")
                {
                    string temp = rotorControl.azimuth.rotor.CustomData;
                    turretConfig.FirstSerialization(ref temp);
                    rotorControl.azimuth.rotor.CustomData = temp;
                }
                else
                {
                    turretConfig.DeSerialize(rotorControl.azimuth.rotor.CustomData);
                }
                #endregion
            }
            public Payload(GridTerminalSystemUtils GTS, double backupDetonateEngageDist)
            {
                this.backupDetonateEngageDistSq = backupDetonateEngageDist * backupDetonateEngageDist;

                GTS.GetBlocksOfTypeOnGrid(warheads);

                var templist = new List <IMySensorBlock>();

                GTS.GetBlocksOfTypeOnGrid(templist);

                if (templist.Count > 0)
                {
                    sensor = templist.First();
                }
            }
Esempio n. 11
0
        public Program()
        {
            #region serializer
            nameSerializer = new INISerializer("Config");

            nameSerializer.AddValue("rotorTurretGroupTag", x => x, "[HaE RotorTurret]");
            nameSerializer.AddValue("gatlingTurretGroupTag", x => x, "[HaE GatlingTurret]");
            nameSerializer.AddValue("missileTurretGroupTag", x => x, "[HaE MissileTurret]");
            nameSerializer.AddValue("azimuthTag", x => x, "[Azimuth]");
            nameSerializer.AddValue("elevationTag", x => x, "[Elevation]");
            nameSerializer.AddValue("controllerName", x => x, "Controller");
            nameSerializer.AddValue("groupType", x => x, "Any");
            nameSerializer.AddValue("lcdStatusTag", x => x, "[GridcannonStatus]");
            nameSerializer.AddValue("maxProjectileVel", x => double.Parse(x), 104.45);
            nameSerializer.AddValue("maxActiveRotorGunVel", x => double.Parse(x), 30.0);
            nameSerializer.AddValue("maxGatlingBulletVel", x => double.Parse(x), 400.0);
            nameSerializer.AddValue("maxMissileAccel", x => double.Parse(x), 600.0);
            nameSerializer.AddValue("maxMissileVel", x => double.Parse(x), 200.0);
            nameSerializer.AddValue("maxGatlingBulletVel", x => double.Parse(x), 400.0);
            nameSerializer.AddValue("enableAutoDeadzoning", x => bool.Parse(x), true);

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

            GTSUtils                 = new GridTerminalSystemUtils(Me, GridTerminalSystem);
            mainScheduler            = new Scheduler();
            ingameTime               = new IngameTime();
            rotorTurretGroups        = new List <RotorTurretGroup>();
            missileTurretGroups      = new List <MissileTurretGroup>();
            gatlingTurretGroups      = new List <GatlingTurretGroup>();
            deadzoneProvider         = new DeadzoneProvider(GTSUtils);
            deadzoneProvider.Enabled = enableAutoDeadzoning;

            mainScheduler.AddTask(Init());

            Runtime.UpdateFrequency = UpdateFrequency.Update1 | UpdateFrequency.Update10 | UpdateFrequency.Update100;
        }
            public Autopilot_Module(GridTerminalSystemUtils GTS, IMyShipController controller, IngameTime ingameTime,
                                    PID_Controller.PIDSettings gyroPidSettings, PID_Controller.PIDSettings thrustPidSettings,
                                    EntityTracking_Module trackingModule)
            {
                GTS.GridTerminalSystem.GetBlocksOfType(allThrusters);
                GTS.GridTerminalSystem.GetBlocksOfType(gyros);

                this.controller = controller;
                this.ingameTime = ingameTime;

                thrustPidController = new PID_Controller(thrustPidSettings);

                gyroControl        = new AdvGyroControl(gyroPidSettings, ingameTime);
                thrustControl      = new AdvThrustControl(controller, allThrusters, ingameTime);
                collisionAvoidance = new CollisionAvoidance(controller, trackingModule, 10, 10);
                trackingModule.onEntityDetected += collisionAvoidance.OnEntityDetected;
            }
Esempio n. 13
0
            public static Cannon CreateCannon
            (
                IMyMotorStator sourceRotor, GridTerminalSystemUtils GTS,
                IngameTime ingameTime, IMyShipController control,
                string azimuthTag, string elevationTag
            )
            {
                List <IMyMotorStator> rotors     = new List <IMyMotorStator>();
                List <IMyMotorStator> cache      = new List <IMyMotorStator>();
                List <IMyMotorStator> prevTop    = new List <IMyMotorStator>();
                List <IMyMotorStator> currentTop = new List <IMyMotorStator>();

                DeadzoneProvider deadzoneProvider = new DeadzoneProvider(GTS);

                rotors.Add(sourceRotor);
                prevTop.AddRange(rotors);

                while (prevTop.Count > 0)
                {
                    foreach (var rotor in prevTop)
                    {
                        cache.Clear();
                        rotor.TopGrid?.GetCubesOfType(GTS.GridTerminalSystem, cache);
                        currentTop.AddRange(cache);
                    }

                    rotors.AddRange(currentTop);

                    prevTop.Clear();
                    prevTop.AddRange(currentTop);
                    currentTop.Clear();
                }

                var turretGroup = new RotorTurretGroup(rotors, ingameTime, deadzoneProvider, azimuthTag, elevationTag, GTS);

                turretGroup.TargetDirection(ref Vector3D.Zero);
                turretGroup.defaultDir = control.WorldMatrix.Forward;

                if (turretGroup.CheckGroupStatus() != TurretGroupUtils.TurretGroupStatus.MajorDMG)
                {
                    return(new Cannon(turretGroup, deadzoneProvider, control));
                }

                return(null);
            }
        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;
        }
Esempio n. 15
0
            public DeadzoneProvider(GridTerminalSystemUtils gtsUtils)
            {
                var subgridEnablers = new List <IMyMechanicalConnectionBlock>();

                gtsUtils.GridTerminalSystem.GetBlocksOfType(subgridEnablers);

                var myCubeGrid = gtsUtils.Me.CubeGrid;

                grids[myCubeGrid.EntityId] = new GridDeadzone(myCubeGrid);
                foreach (var subgridEnabler in subgridEnablers)
                {
                    var topGrid = subgridEnabler.TopGrid;
                    if (topGrid == null)
                    {
                        continue;
                    }
                    if (!grids.ContainsKey(topGrid.EntityId))
                    {
                        grids[topGrid.EntityId] = new GridDeadzone(topGrid);
                    }
                }
            }
Esempio n. 16
0
        public void SubConstructor()
        {
            //DEBUG ATTACHMENTS
            P = this;

            //Timing
            Runtime.UpdateFrequency = UpdateFrequency.Update1 | UpdateFrequency.Update100;
            ingameTime = new IngameTime();

            //Generic Inits
            gridTerminalSystemUtils = new GridTerminalSystemUtils(Me, GridTerminalSystem);
            reference       = GridTerminalSystem.GetBlockWithName(REFERENCENAME) as IMyShipController;
            targetingCamera = GridTerminalSystem.GetBlockWithName(TARGETCAMNAME) as IMyCameraBlock;
            textOut         = GridTerminalSystem.GetBlockWithName(TEXTOUTNAME) as IMyTextPanel;
            monoOut         = GridTerminalSystem.GetBlockWithName(MonoLCDName) as IMyTextPanel;

            //Module Inits
            //entityTracking = new EntityTracking_Module(gridTerminalSystemUtils, reference, targetingCamera);
            //autopilotModule = new Autopilot_Module(gridTerminalSystemUtils, reference, ingameTime, gyroPidSettings, thrustPidSettings, entityTracking);
            scheduler  = new Scheduler();
            drawingLib = new MonospaceDrawingLib(175, 175, Color.Black);
            drawingLib.onRenderDone = OnRenderDone;
            drawingLib.AddRenderTask(drawingLib.Generate(), OnRenderDone);
        }
            public EntityTracking_Module(GridTerminalSystemUtils GTS, IMyShipController reference, IMyCameraBlock targetingCamera)
            {
                List <IMyLargeTurretBase> turretList = new List <IMyLargeTurretBase>();

                GTS.GridTerminalSystem.GetBlocksOfType(turretList);
                ObjectTrackers.Add(new TurretTracking(turretList));

                List <IMySensorBlock> sensorList = new List <IMySensorBlock>();

                GTS.GridTerminalSystem.GetBlocksOfType(sensorList);
                ObjectTrackers.Add(new SensorTracking(sensorList));

                List <IMyCameraBlock> cameraList = new List <IMyCameraBlock>();

                GTS.GridTerminalSystem.GetBlocksOfType(cameraList);
                ObjectTrackers.Add(new LidarTracking(cameraList, reference, known_Objects.LidarEntities));

                targetPainter = new TargetPainter(targetingCamera, cameraList);

                foreach (var tracker in ObjectTrackers)
                {
                    tracker.OnEntityDetected += OnEntityDetected;
                }
            }
            public Autopilot_Module(GridTerminalSystemUtils GTS, IMyShipController controller, IngameTime ingameTime,
                                    EntityTracking_Module trackingModule)
            {
                GTS.GridTerminalSystem.GetBlocksOfType(allThrusters);
                GTS.GridTerminalSystem.GetBlocksOfType(gyros);

                this.controller = controller;
                this.ingameTime = ingameTime;

                thrustControl      = new AdvThrustControl(controller, allThrusters, ingameTime);
                collisionAvoidance = new CollisionAvoidance(controller, trackingModule, 10, 10);
                trackingModule.onEntityDetected += collisionAvoidance.OnEntityDetected;

                PID_Controller.PIDSettings onePid = new PID_Controller.PIDSettings
                {
                    PGain          = 1,
                    DerivativeGain = 0,
                    IntegralGain   = 0,
                };

                thrustPidController = new PID_Controller(onePid);

                gyroControl = new AdvGyroControl(onePid, ingameTime);
            }
            public void Setup(List <IMyMotorStator> rotors, IngameTime ingameTime, DeadzoneProvider deadzoneProvider, string azimuthTag, string elevationTag, GridTerminalSystemUtils GTS)
            {
                this.deadzoneProvider = deadzoneProvider;
                this.ingameTime       = ingameTime;

                List <IMyMotorStator> elevation = rotors.Where(x => x.CustomName.Contains(elevationTag)).ToList();
                IMyMotorStator        azimuth   = rotors.First(x => x.CustomName.Contains(azimuthTag));

                defaultDir = azimuth.WorldMatrix.Forward;

                #region configuration
                turretConfig = new INISerializer("TurretConfig");

                turretConfig.AddValue("azimuthMultiplier", x => double.Parse(x), -1.0);
                turretConfig.AddValue("elevationMultiplier", x => double.Parse(x), -1.0);
                turretConfig.AddValue("referenceName", x => x, "TurretReference");

                if (azimuth.CustomData == "")
                {
                    string temp = azimuth.CustomData;
                    turretConfig.FirstSerialization(ref temp);
                    azimuth.CustomData = temp;
                }
                else
                {
                    turretConfig.DeSerialize(azimuth.CustomData);
                }
                #endregion

                IMyTerminalBlock cannonref = GTS.GridTerminalSystem.GetBlockWithName(referenceName);

                if (cannonref == null)
                {
                    throw new Exception($"referenceName ({referenceName}) resolves to NULL!");
                }

                List <RotorControl.RotorReferencePair> elevationPairs = new List <RotorControl.RotorReferencePair>();
                for (int i = 0; i < elevation.Count; i++)
                {
                    elevationPairs.Add(new RotorControl.RotorReferencePair {
                        rotor = elevation[i], reference = cannonref
                    });
                }

                RotorControl.RotorReferencePair azimuthPair = new RotorControl.RotorReferencePair {
                    rotor = azimuth, reference = cannonref
                };

                rotorControl            = new RotorControl(azimuthPair, elevationPairs);
                rotorControl.onTarget  += OnTarget;
                rotorControl.useForward = true;
            }
Esempio n. 20
0
 public Cannon(List <IMyMotorStator> rotors, IMyShipController reference, IngameTime ingameTime, GridTerminalSystemUtils GTSUtils, string azimuthTag, string elevationTag)
 {
     this.reference   = reference;
     deadzoneProvider = new DeadzoneProvider(GTSUtils);
     rotorTurretGroup = new RotorTurretGroup(rotors, ingameTime, deadzoneProvider, azimuthTag, elevationTag, GTSUtils);
 }
 public MissileSilos(GridTerminalSystemUtils GTS, Program P, string SiloDoorTag)
 {
     GTS.GridTerminalSystem.GetBlocksOfType(siloDoors, x => x.CustomName.Contains(SiloDoorTag));
     this.P = P;
 }
 public MissileManager(GridTerminalSystemUtils GTS, Program P, string missileTag)
 {
     this.GTS        = GTS;
     this.missileTag = missileTag;
     this.P          = P;
 }
Esempio n. 23
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;
        }
 public RotorTurretGroup(List <IMyMotorStator> rotors, IngameTime ingameTime, DeadzoneProvider deadzoneProvider, string azimuthTag, string elevationTag, GridTerminalSystemUtils GTS)
 {
     Setup(rotors, ingameTime, deadzoneProvider, azimuthTag, elevationTag, GTS);
 }
 public MissileTurretGroup(GridTerminalSystemUtils GTS, List <IMyMotorStator> rotors, IngameTime ingameTime, DeadzoneProvider deadzoneProvider, string azimuthTag, string elevationTag)
 {
     Setup(GTS, rotors, ingameTime, deadzoneProvider, azimuthTag, elevationTag);
 }
 public AutoPilot(GridTerminalSystemUtils GTS, IMyShipController controller, IngameTime time,
                  PID_Controller.PIDSettings gyroPidSettings, PID_Controller.PIDSettings thrustPidSettings,
                  EntityTracking_Module entityTracking)
 {
     autopilotModule = new Autopilot_Module(GTS, controller, time, gyroPidSettings, thrustPidSettings, entityTracking);
 }
 public AutoPilot(GridTerminalSystemUtils GTS, IMyShipController controller, IngameTime time, EntityTracking_Module entityTracking)
 {
     autopilotModule = new Autopilot_Module(GTS, controller, time, entityTracking);
 }
Esempio n. 28
0
        IEnumerator <bool> Initialize()
        {
            cameras = new List <IMyCameraBlock>();
            GridTerminalSystem.GetBlocksOfType(cameras, x => x.CubeGrid == Me.CubeGrid);
            foreach (var cam in cameras)
            {
                cam.EnableRaycast = true;
            }
            yield return(true);

            gyros = new List <IMyGyro>();
            GridTerminalSystem.GetBlocksOfType(gyros, x => x.CubeGrid == Me.CubeGrid);
            yield return(true);

            antennaComms = new ACPWrapper(this, x => x.CubeGrid == Me.CubeGrid);
            yield return(true);

            thrusters = new List <IMyThrust>();
            GridTerminalSystem.GetBlocksOfType(thrusters, x => x.CubeGrid == Me.CubeGrid);
            yield return(true);

            rc = GetBlockWithNameOnGrid(RCNAME) as IMyRemoteControl;
            yield return(true);

            mainCam = GetBlockWithNameOnGrid(MAINCAM) as IMyCameraBlock;
            yield return(true);

            var GTSUtils = new GridTerminalSystemUtils(Me, GridTerminalSystem);

            ingameTime = new IngameTime();
            yield return(true);

            entityTracking = new EntityTracking_Module(GTSUtils, rc, mainCam);
            yield return(true);

            var pid = new PID_Controller.PIDSettings
            {
                PGain = 1
            };

            autopilot = new Autopilot_Module(GTSUtils, rc, ingameTime, pid, pid, entityTracking);
            yield return(true);

            flightControl = new FlightControl(rc, gyros, thrusters, autopilot);
            yield return(true);

            guidance = new TargetGuidance(rc);
            yield return(true);

            clientSystem = new MissileManagementClient(antennaComms, rc, Me.EntityId, missileType);
            yield return(true);

            turretMonitor = new TurretMonitor(this);
            turretMonitor.OnTargetDetected += OnTargetDetected;
            yield return(true);

            proximityFuse = new ProximityFuse(rc, DETONATIONDIST, this);
            proximityFuse.OnEnemyInRange += proximityFuse.Detonate;

            DebugEcho("Initialized!");
        }