Ejemplo n.º 1
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);
            }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
 public Cannon(RotorTurretGroup rotorTurretGroup, DeadzoneProvider deadzoneProvider, IMyShipController reference)
 {
     this.rotorTurretGroup = rotorTurretGroup;
     this.deadzoneProvider = deadzoneProvider;
     this.reference        = reference;
 }
Ejemplo n.º 5
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);
 }