/* * 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(); } }
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 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)); }