Ejemplo n.º 1
0
        /*
         * private void BeginCallBombardment(Pawn caller, Faction faction, Map map, bool free)
         * {
         *      TargetingParameters targetingParameters = new TargetingParameters();
         *      targetingParameters.canTargetLocations = true;
         *      targetingParameters.canTargetSelf = true;
         *      targetingParameters.canTargetFires = true;
         *      targetingParameters.canTargetItems = true;
         *
         *      targetingParameters.validator = ((TargetInfo target) => !target.Cell.Fogged(map));
         *      Find.Targeter.BeginTargeting(this, null);
         * }
         */
        public static void SpawnOrbitalStrike(Map map, IntVec3 targetPosition, OrbitalStrikeDef StrikeDef, Thing instigator = null, ThingDef weaponDef = null, bool warnFail = false)
        {
            ThingDef weapon    = StrikeDef.ordnance;
            IntVec3  strikeLoc = targetPosition;

            if (!OrdnanceStrikeCellFinder.TryFindStrikeLocNear(targetPosition, map, out strikeLoc, true, true, true, StrikeDef.targetArea))
            {
                if (warnFail)
                {
                    Log.Warning("Orbital Strike: " + StrikeDef.LabelCap + " Target: " + targetPosition + " Failed to find location");
                }
                return;
            }
            AdeptusMechanicus.OrbitalStrikes.OrbitalStrike orbitalStrike = (AdeptusMechanicus.OrbitalStrikes.OrbitalStrike)GenSpawn.Spawn(StrikeDef.strikeType, strikeLoc, map, WipeMode.Vanish);
            orbitalStrike.instigator           = instigator;
            orbitalStrike.weaponDef            = weaponDef;
            orbitalStrike.strikeDef            = StrikeDef;
            orbitalStrike.targetLoc            = targetPosition;
            orbitalStrike.impactAreaRadius     = StrikeDef.impactAreaRadius;
            orbitalStrike.explosionRadiusRange = StrikeDef.ordnance.projectile.explosionRadius != 0 ? new FloatRange(StrikeDef.ordnance.projectile.explosionRadius / 2, StrikeDef.ordnance.projectile.explosionRadius * 2) : StrikeDef.explosionRadiusRange;
            orbitalStrike.randomFireRadius     = StrikeDef.randomFireRadius;
            orbitalStrike.bombIntervalTicks    = StrikeDef.bombardmentSalvoTicksBetweenShots;
            orbitalStrike.warmupTicks          = StrikeDef.warmupTicks;
            orbitalStrike.explosionCount       = StrikeDef.bombardmentSalvoSize;
            if (StrikeDef.instantStrike || StrikeDef.strikeType == OrbitalLanceStrike)
            {
                orbitalStrike.duration = StrikeDef.duration;
                orbitalStrike.StartStrike();
            }
        }
Ejemplo n.º 2
0
        public static void StartTargeting(Def def, Map map = null)
        {
            TargetingParameters targetingParameters = new TargetingParameters();

            targetingParameters.canTargetLocations = true;
            targetingParameters.canTargetSelf      = true;
            targetingParameters.canTargetFires     = true;
            targetingParameters.canTargetItems     = true;
            AirStrikeDef       airStrike       = def as AirStrikeDef;
            ArtilleryStrikeDef artilleryStrike = def as ArtilleryStrikeDef;
            OrbitalStrikeDef   orbitalStrike   = def as OrbitalStrikeDef;

            if (airStrike != null)
            {
                Find.Targeter.BeginTargeting(targetingParameters, delegate(LocalTargetInfo x)
                {
                    SpawnAirStrike(map, x.Cell, airStrike);
                }, null, delegate
                {
                    if (map != null && Find.Maps.Contains(map))
                    {
                        Current.Game.CurrentMap = map;
                    }
                }, CompLaunchable.TargeterMouseAttachment);
            }
            else
            if (artilleryStrike != null)
            {
                Find.Targeter.BeginTargeting(targetingParameters, delegate(LocalTargetInfo x)
                {
                    SpawnArtilleryStrike(map, x.Cell, artilleryStrike);
                }, null, delegate
                {
                    if (map != null && Find.Maps.Contains(map))
                    {
                        Current.Game.CurrentMap = map;
                    }
                }, CompLaunchable.TargeterMouseAttachment);
            }
            else
            if (orbitalStrike != null)
            {
                Find.Targeter.BeginTargeting(targetingParameters, delegate(LocalTargetInfo x)
                {
                    SpawnOrbitalStrike(map, x.Cell, orbitalStrike);
                }, null, delegate
                {
                    if (map != null && Find.Maps.Contains(map))
                    {
                        Current.Game.CurrentMap = map;
                    }
                }, CompLaunchable.TargeterMouseAttachment);
            }
        }
Ejemplo n.º 3
0
        private static void CallOrbitalstrikeOf()
        {
            List <FloatMenuOption> list = new List <FloatMenuOption>();

            foreach (OrbitalStrikeDef StrikeDef in DefDatabase <OrbitalStrikeDef> .AllDefs)
            {
                OrbitalStrikeDef localStrike = StrikeDef;
                list.Add(new FloatMenuOption(localStrike.LabelCap + " - ", delegate()
                {
                    OrdnanceUtility.StartTargeting(localStrike, Find.CurrentMap);
                }, MenuOptionPriority.Default, null, null, 0f, null, null));
            }
            Find.WindowStack.Add(new FloatMenu(list));
        }