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 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); }
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(); } }
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; }
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; }
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); } } }
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; }
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; }
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); }
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!"); }