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); } }
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)); }
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)); } }