public void Setup(List <IMyMotorStator> rotors, IngameTime ingameTime, DeadzoneProvider deadzoneProvider, string azimuthTag, string elevationTag) { 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; List <IMyMotorStator> cannonBases = 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 = cannonBases[i] }); } RotorControl.RotorReferencePair azimuthPair = new RotorControl.RotorReferencePair { rotor = azimuth, reference = cannonBases[0] }; rotorControl = new RotorControl(azimuthPair, elevationPairs); rotorControl.onTarget = OnTarget; #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 foreach (var cannonbase in cannonBases) { var launcher = new RotorLauncher(cannonbase, ingameTime, salvoTimeout); launchers.Add(launcher); } }
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 void Setup(List <IMyMotorStator> rotors, IngameTime ingameTime, DeadzoneProvider deadzoneProvider, string azimuthTag, string elevationTag) { 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; List <IMyUserControllableGun> gatlingGunsList = new List <IMyUserControllableGun>(); List <RotorControl.RotorReferencePair> elevationPairs = Select(elevation, gatlingGunsList); RotorControl.RotorReferencePair azimuthPair = new RotorControl.RotorReferencePair { rotor = azimuth, reference = gatlingGunsList[0] }; gatlingGuns = new IMyUserControllableGun[gatlingGunsList.Count]; for (int i = 0; i < gatlingGunsList.Count; i++) { gatlingGuns[i] = gatlingGunsList[i]; } gatlingGunsList = null; 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); 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 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 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 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 MissileTurretGroup(GridTerminalSystemUtils GTS, List <IMyMotorStator> rotors, IngameTime ingameTime, DeadzoneProvider deadzoneProvider, string azimuthTag, string elevationTag) { Setup(GTS, rotors, ingameTime, deadzoneProvider, azimuthTag, elevationTag); }
public RotorTurretGroup(IMyBlockGroup turretGroup, IngameTime ingameTime, DeadzoneProvider deadzoneProvider, string azimuthTag, string elevationTag) { var rotors = new List <IMyMotorStator>(); turretGroup.GetBlocksOfType(rotors); Setup(rotors, ingameTime, deadzoneProvider, azimuthTag, elevationTag); }
public RotorTurretGroup(List <IMyMotorStator> rotors, IngameTime ingameTime, DeadzoneProvider deadzoneProvider, string azimuthTag, string elevationTag) { Setup(rotors, ingameTime, deadzoneProvider, azimuthTag, elevationTag); }
public RotorTurretGroup(List <IMyMotorStator> rotors, IngameTime ingameTime, DeadzoneProvider deadzoneProvider, string azimuthTag, string elevationTag, GridTerminalSystemUtils GTS) { Setup(rotors, ingameTime, deadzoneProvider, azimuthTag, elevationTag, GTS); }
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); }