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