Esempio n. 1
0
        public IEnumerator <bool> CheckTurrets()
        {
            int normal = 0;
            int minor  = 0;
            int major  = 0;

            foreach (var cannon in rotorTurretGroups)
            {
                TurretGroupUtils.TurretGroupStatus status = cannon.CheckGroupStatus();

                switch (status)
                {
                case TurretGroupUtils.TurretGroupStatus.Active:
                    normal++;
                    break;

                case TurretGroupUtils.TurretGroupStatus.MinorDMG:
                    minor++;
                    break;

                case TurretGroupUtils.TurretGroupStatus.MajorDMG:
                    major++;
                    cannon.DisableTurret(true);
                    break;
                }
                yield return(true);
            }

            foreach (var cannon in gatlingTurretGroups)
            {
                TurretGroupUtils.TurretGroupStatus status = cannon.CheckGroupStatus();

                switch (status)
                {
                case TurretGroupUtils.TurretGroupStatus.Active:
                    normal++;
                    break;

                case TurretGroupUtils.TurretGroupStatus.MinorDMG:
                    minor++;
                    break;

                case TurretGroupUtils.TurretGroupStatus.MajorDMG:
                    major++;
                    cannon.DisableTurret(true);
                    break;
                }
                yield return(true);
            }

            statusWriter.UpdateCannonCount(normal, minor, major);
        }
Esempio n. 2
0
        public IEnumerator <bool> Init()
        {
            control = GridTerminalSystem.GetBlockWithName(controllerName) as IMyShipController;
            if (control == null)
            {
                Echo($"no shipcontroller found with name {controllerName}!");
                yield return(false);
            }

            List <IMyTextPanel> lcds = new List <IMyTextPanel>();

            GridTerminalSystem.GetBlocksOfType(lcds, x => x.CustomName.Contains(lcdStatusTag));
            statusWriter = new StatusWriter(lcds);


            targetTracker = new EntityTracking_Module(GTSUtils, control, null);
            foreach (var tracker in targetTracker.ObjectTrackers)
            {
                var turretTracker = tracker as TurretTracking;
                if (turretTracker != null)
                {
                    turretTracker.earlyReturn = true;
                }
            }
            targetTracker.onEntityDetected += OnEntityDetected;

            gridCannonTargeting = new PhysicsTargeting(control, ingameTime, maxProjectileVel);
            gridCannonTargeting.onRoutineFinish += OnTargetSolvedRotor;
            gridCannonTargeting.onRoutineFail   += OnTargetingFailRotor;
            gridCannonTargeting.onTargetTimeout += OnTargetTimeoutRotor;

            missileCannonTargeting = new PhysicsTargeting(control, ingameTime, maxMissileVel);
            missileCannonTargeting.onRoutineFinish += OnTargetSolvedMissile;
            missileCannonTargeting.onRoutineFail   += OnTargetingFailMissile;
            missileCannonTargeting.onTargetTimeout += OnTargetTimeoutMissile;
            missileCannonTargeting.IgnoreGravity    = true;
            missileCannonTargeting.ForwardAccel     = maxMissileAccel;

            basicTargeting = new QuarticTargeting(Vector3D.Zero, Vector3D.Zero, maxGatlingBulletVel);

            switch (groupType)
            {
            case "BlockGroup":
                List <IMyBlockGroup> groups = new List <IMyBlockGroup>();
                GridTerminalSystem.GetBlockGroups(groups, x => x.Name.Contains(rotorTurretGroupTag));
                foreach (var group in groups)
                {
                    AddRotorTurret(group);
                    yield return(true);
                }
                groups.Clear();
                GridTerminalSystem.GetBlockGroups(groups, x => x.Name.Contains(gatlingTurretGroupTag));
                foreach (var group in groups)
                {
                    AddGatlingTurret(group);
                    yield return(true);
                }
                groups.Clear();
                GridTerminalSystem.GetBlockGroups(groups, x => x.Name.Contains(missileTurretGroupTag));
                foreach (var group in groups)
                {
                    AddMissileTurret(group);
                    yield return(true);
                }
                break;

            case "NameTag":
                List <IMyMotorStator> rotors = new List <IMyMotorStator>();
                GridTerminalSystem.GetBlocksOfType(rotors, x => x.CustomName.Contains(rotorTurretGroupTag));
                foreach (var stator in rotors)
                {
                    AddRotorTurret(stator);
                    yield return(true);
                }
                rotors.Clear();
                GridTerminalSystem.GetBlocksOfType(rotors, x => x.CustomName.Contains(gatlingTurretGroupTag));
                foreach (var stator in rotors)
                {
                    AddGatlingTurret(stator);
                    yield return(true);
                }
                rotors.Clear();
                GridTerminalSystem.GetBlocksOfType(rotors, x => x.CustomName.Contains(missileTurretGroupTag));
                foreach (var stator in rotors)
                {
                    AddMissileTurret(stator);
                    yield return(true);
                }
                break;

            case "Any":
                List <IMyBlockGroup> groupsA = new List <IMyBlockGroup>();
                GridTerminalSystem.GetBlockGroups(groupsA, x => x.Name.Contains(rotorTurretGroupTag));
                foreach (var group in groupsA)
                {
                    AddRotorTurret(group);
                    yield return(true);
                }
                groupsA.Clear();
                GridTerminalSystem.GetBlockGroups(groupsA, x => x.Name.Contains(gatlingTurretGroupTag));
                foreach (var group in groupsA)
                {
                    AddGatlingTurret(group);
                    yield return(true);
                }
                groupsA.Clear();
                GridTerminalSystem.GetBlockGroups(groupsA, x => x.Name.Contains(missileTurretGroupTag));
                foreach (var group in groupsA)
                {
                    AddMissileTurret(group);
                    yield return(true);
                }

                List <IMyMotorStator> rotorsA = new List <IMyMotorStator>();
                GridTerminalSystem.GetBlocksOfType(rotorsA, x => x.CustomName.Contains(rotorTurretGroupTag));
                foreach (var stator in rotorsA)
                {
                    AddRotorTurret(stator);
                    yield return(true);
                }
                rotorsA.Clear();
                GridTerminalSystem.GetBlocksOfType(rotorsA, x => x.CustomName.Contains(gatlingTurretGroupTag));
                foreach (var stator in rotorsA)
                {
                    AddGatlingTurret(stator);
                    yield return(true);
                }
                rotorsA.Clear();
                GridTerminalSystem.GetBlocksOfType(rotorsA, x => x.CustomName.Contains(missileTurretGroupTag));
                foreach (var stator in rotorsA)
                {
                    AddMissileTurret(stator);
                    yield return(true);
                }
                break;
            }

            statusWriter.UpdateCannonCount(rotorTurretGroups.Count, 0, 0);
            initialized = true;
        }