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 AddGatlingTurret(IMyBlockGroup group) { try { var turretGroup = new RotorTurretGroup(group, ingameTime, deadzoneProvider, azimuthTag, elevationTag); turretGroup.TargetDirection(ref Vector3D.Zero); turretGroup.defaultDir = control.WorldMatrix.Forward; if (turretGroup.CheckGroupStatus() != TurretGroupUtils.TurretGroupStatus.MajorDMG) { rotorTurretGroups.Add(turretGroup); } } catch { statusWriter.AddUninitializable(1); } }
public void AddRotorTurret(IMyMotorStator sourceRotor) { try { rotors.Clear(); cache.Clear(); prevTop.Clear(); currentTop.Clear(); rotors.Add(sourceRotor); prevTop.AddRange(rotors); while (prevTop.Count > 0) { foreach (var rotor in prevTop) { cache.Clear(); rotor.TopGrid?.GetCubesOfType(GridTerminalSystem, cache); currentTop.AddRange(cache); } rotors.AddRange(currentTop); prevTop.Clear(); prevTop.AddRange(currentTop); currentTop.Clear(); } var turretGroup = new RotorTurretGroup(rotors, ingameTime, deadzoneProvider, azimuthTag, elevationTag); turretGroup.TargetDirection(ref Vector3D.Zero); turretGroup.defaultDir = control.WorldMatrix.Forward; if (turretGroup.CheckGroupStatus() != TurretGroupUtils.TurretGroupStatus.MajorDMG) { rotorTurretGroups.Add(turretGroup); } } catch { statusWriter.AddUninitializable(1); } }
public Cannon(RotorTurretGroup rotorTurretGroup, DeadzoneProvider deadzoneProvider, IMyShipController reference) { this.rotorTurretGroup = rotorTurretGroup; this.deadzoneProvider = deadzoneProvider; this.reference = reference; }
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); }