Beispiel #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
            }
Beispiel #4
0
            private void OnTarget(bool val, RotorControl.RotorReferencePair pair)
            {
                if (val)
                {
                    if (currentTargetDir != Vector3D.Zero)
                    {
                        bool blockInTheWay = deadzoneProvider.IsBlockInTheWay(rotorControl.azimuth.reference.GetPosition() + currentTargetDir * 15, rotorControl.azimuth.reference.GetPosition() + currentTargetDir * 800);
                        FireCannons(!blockInTheWay);
                        rotorControl.Lock(false);
                        return;
                    }

                    if (rotorControl.currentAccuracy > accuracyVal && restAfterReset)
                    {
                        rotorControl.Lock(true);
                        restMode = true;
                    }
                }
                else if (currentTargetDir != Vector3D.Zero)
                {
                    rotorControl.Lock(false);
                }
            }