Exemplo n.º 1
0
            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
            }
Exemplo n.º 4
0
        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;
        }
Exemplo n.º 5
0
            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);
 }
Exemplo n.º 8
0
            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);
            }
Exemplo n.º 9
0
 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);
 }
Exemplo n.º 11
0
 public Cannon(RotorTurretGroup rotorTurretGroup, DeadzoneProvider deadzoneProvider, IMyShipController reference)
 {
     this.rotorTurretGroup = rotorTurretGroup;
     this.deadzoneProvider = deadzoneProvider;
     this.reference        = reference;
 }
Exemplo n.º 12
0
 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);
 }