Exemplo n.º 1
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);
            }
        }
Exemplo n.º 2
0
        private static void CallArtillerystrikeOf()
        {
            List <FloatMenuOption> list = new List <FloatMenuOption>();
            IntVec3 cell = UI.MouseCell();

            foreach (ArtilleryStrikeDef StrikeDef in DefDatabase <ArtilleryStrikeDef> .AllDefs)
            {
                ArtilleryStrikeDef localStrike = StrikeDef;
                list.Add(new FloatMenuOption(localStrike.LabelCap + " - ", delegate()
                {
                    OrdnanceUtility.SpawnArtilleryStrike(Find.CurrentMap, cell, localStrike);
                }, MenuOptionPriority.Default, null, null, 0f, null, null));
            }
            Find.WindowStack.Add(new FloatMenu(list));
        }
Exemplo n.º 3
0
 public static void SpawnArtilleryStrike(Map map, IntVec3 targetPosition, ArtilleryStrikeDef StrikeDef, Thing instigator = null, ThingDef weaponDef = null, bool warnFail = false)
 {
     for (int i = 0; i < StrikeDef.ordnance.Count; i++)
     {
         ThingDef ordnance  = StrikeDef.ordnance[i];
         IntVec3  strikeLoc = targetPosition;
         if (Rand.Chance(0.9f) || !DropCellFinder.IsGoodDropSpot(targetPosition, map, true, true))
         {
             if (!OrdnanceStrikeCellFinder.TryFindStrikeLocNear(targetPosition, map, out strikeLoc, true, true, true))
             {
                 if (warnFail)
                 {
                     Log.Warning("Artillery Strike: " + StrikeDef.LabelCap + " Target: " + targetPosition + " Failed to find location");
                 }
                 break;
             }
         }
         ArtilleryIncoming ordnanceIncoming = ArtilleryStrikeMaker.MakeSkyfaller(OrdnanceUtility.ArtilleryStrike, ordnance);
         GenPlace.TryPlaceThing(ordnanceIncoming, strikeLoc, map, ThingPlaceMode.Near, null, null, default(Rot4));
     }
 }