public IEnumerator <bool> CheckTurrets() { int normal = 0; int minor = 0; int major = 0; foreach (var cannon in rotorTurretGroups) { TurretGroupUtils.TurretGroupStatus status = cannon.CheckGroupStatus(); switch (status) { case TurretGroupUtils.TurretGroupStatus.Active: normal++; break; case TurretGroupUtils.TurretGroupStatus.MinorDMG: minor++; break; case TurretGroupUtils.TurretGroupStatus.MajorDMG: major++; cannon.DisableTurret(true); break; } yield return(true); } foreach (var cannon in gatlingTurretGroups) { TurretGroupUtils.TurretGroupStatus status = cannon.CheckGroupStatus(); switch (status) { case TurretGroupUtils.TurretGroupStatus.Active: normal++; break; case TurretGroupUtils.TurretGroupStatus.MinorDMG: minor++; break; case TurretGroupUtils.TurretGroupStatus.MajorDMG: major++; cannon.DisableTurret(true); break; } yield return(true); } statusWriter.UpdateCannonCount(normal, minor, major); }
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; }