Пример #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;
        }
            public CollisionAvoidance(IMyShipController rc, EntityTracking_Module trackingModule, int resX, int resY)
            {
                this.rc             = rc;
                this.trackingModule = trackingModule;

                localScanMap = BuildScanMap(resX, resY);
            }
            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);
            }
            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;
            }
        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 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);
            }
Пример #7
0
        public IEnumerator <bool> Init()
        {
            control = GridTerminalSystem.GetBlockWithName(controllerName) as IMyShipController;
            if (control == null)
            {
                Echo($"no shipcontroller found with name {controllerName}!");
                yield return(false);
            }

            List <IMyTextPanel> lcds = new List <IMyTextPanel>();

            GridTerminalSystem.GetBlocksOfType(lcds, x => x.CustomName.Contains(lcdStatusTag));
            statusWriter = new StatusWriter(lcds);


            targetTracker = new EntityTracking_Module(GTSUtils, control, null);
            foreach (var tracker in targetTracker.ObjectTrackers)
            {
                var turretTracker = tracker as TurretTracking;
                if (turretTracker != null)
                {
                    turretTracker.earlyReturn = true;
                }
            }
            targetTracker.onEntityDetected += OnEntityDetected;

            gridCannonTargeting = new PhysicsTargeting(control, ingameTime, maxProjectileVel);
            gridCannonTargeting.onRoutineFinish += OnTargetSolvedRotor;
            gridCannonTargeting.onRoutineFail   += OnTargetingFailRotor;
            gridCannonTargeting.onTargetTimeout += OnTargetTimeoutRotor;

            missileCannonTargeting = new PhysicsTargeting(control, ingameTime, maxMissileVel);
            missileCannonTargeting.onRoutineFinish += OnTargetSolvedMissile;
            missileCannonTargeting.onRoutineFail   += OnTargetingFailMissile;
            missileCannonTargeting.onTargetTimeout += OnTargetTimeoutMissile;
            missileCannonTargeting.IgnoreGravity    = true;
            missileCannonTargeting.ForwardAccel     = maxMissileAccel;

            basicTargeting = new QuarticTargeting(Vector3D.Zero, Vector3D.Zero, maxGatlingBulletVel);

            switch (groupType)
            {
            case "BlockGroup":
                List <IMyBlockGroup> groups = new List <IMyBlockGroup>();
                GridTerminalSystem.GetBlockGroups(groups, x => x.Name.Contains(rotorTurretGroupTag));
                foreach (var group in groups)
                {
                    AddRotorTurret(group);
                    yield return(true);
                }
                groups.Clear();
                GridTerminalSystem.GetBlockGroups(groups, x => x.Name.Contains(gatlingTurretGroupTag));
                foreach (var group in groups)
                {
                    AddGatlingTurret(group);
                    yield return(true);
                }
                groups.Clear();
                GridTerminalSystem.GetBlockGroups(groups, x => x.Name.Contains(missileTurretGroupTag));
                foreach (var group in groups)
                {
                    AddMissileTurret(group);
                    yield return(true);
                }
                break;

            case "NameTag":
                List <IMyMotorStator> rotors = new List <IMyMotorStator>();
                GridTerminalSystem.GetBlocksOfType(rotors, x => x.CustomName.Contains(rotorTurretGroupTag));
                foreach (var stator in rotors)
                {
                    AddRotorTurret(stator);
                    yield return(true);
                }
                rotors.Clear();
                GridTerminalSystem.GetBlocksOfType(rotors, x => x.CustomName.Contains(gatlingTurretGroupTag));
                foreach (var stator in rotors)
                {
                    AddGatlingTurret(stator);
                    yield return(true);
                }
                rotors.Clear();
                GridTerminalSystem.GetBlocksOfType(rotors, x => x.CustomName.Contains(missileTurretGroupTag));
                foreach (var stator in rotors)
                {
                    AddMissileTurret(stator);
                    yield return(true);
                }
                break;

            case "Any":
                List <IMyBlockGroup> groupsA = new List <IMyBlockGroup>();
                GridTerminalSystem.GetBlockGroups(groupsA, x => x.Name.Contains(rotorTurretGroupTag));
                foreach (var group in groupsA)
                {
                    AddRotorTurret(group);
                    yield return(true);
                }
                groupsA.Clear();
                GridTerminalSystem.GetBlockGroups(groupsA, x => x.Name.Contains(gatlingTurretGroupTag));
                foreach (var group in groupsA)
                {
                    AddGatlingTurret(group);
                    yield return(true);
                }
                groupsA.Clear();
                GridTerminalSystem.GetBlockGroups(groupsA, x => x.Name.Contains(missileTurretGroupTag));
                foreach (var group in groupsA)
                {
                    AddMissileTurret(group);
                    yield return(true);
                }

                List <IMyMotorStator> rotorsA = new List <IMyMotorStator>();
                GridTerminalSystem.GetBlocksOfType(rotorsA, x => x.CustomName.Contains(rotorTurretGroupTag));
                foreach (var stator in rotorsA)
                {
                    AddRotorTurret(stator);
                    yield return(true);
                }
                rotorsA.Clear();
                GridTerminalSystem.GetBlocksOfType(rotorsA, x => x.CustomName.Contains(gatlingTurretGroupTag));
                foreach (var stator in rotorsA)
                {
                    AddGatlingTurret(stator);
                    yield return(true);
                }
                rotorsA.Clear();
                GridTerminalSystem.GetBlocksOfType(rotorsA, x => x.CustomName.Contains(missileTurretGroupTag));
                foreach (var stator in rotorsA)
                {
                    AddMissileTurret(stator);
                    yield return(true);
                }
                break;
            }

            statusWriter.UpdateCannonCount(rotorTurretGroups.Count, 0, 0);
            initialized = true;
        }
 public AutoPilot(GridTerminalSystemUtils GTS, IMyShipController controller, IngameTime time, EntityTracking_Module entityTracking)
 {
     autopilotModule = new Autopilot_Module(GTS, controller, time, entityTracking);
 }
 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);
 }
Пример #10
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;
        }
Пример #11
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!");
        }