public void TryLaunch(RimWorld.Planet.GlobalTargetInfo target, PawnsArriveMode arriveMode, TravelingShipArrivalAction arrivalAction, bool launchedAsSingleShip = false) { this.timeToLiftoff = 0; if (this.parentLandedShip == null) { this.shipState = ShipState.Outgoing; ShipBase_Traveling travelingShip = new ShipBase_Traveling(this, target, arriveMode, arrivalAction); GenSpawn.Spawn(travelingShip, this.Position, this.Map); this.DeSpawn(); if (this.LaunchAsFleet) { foreach (ShipBase current in DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID)) { if (current != this) { current.shipState = ShipState.Outgoing; ShipBase_Traveling travelingShip2 = new ShipBase_Traveling(current, target, arriveMode, arrivalAction); GenSpawn.Spawn(travelingShip2, current.Position, current.Map); current.DeSpawn(); } } } } else { // Find.WorldSelector.Select(parentLandedShip); TravelingShipsUtility.LaunchLandedFleet(this.parentLandedShip, target.Tile, target.Cell, arriveMode, arrivalAction); this.landedShipCached = null; //Find.MainTabsRoot.SetCurrentTab(MainButtonDefOf.World, false); } }
public static void AdjustPointsForGroupArrivalParams(IncidentParms parms) { if (parms.raidStrategy != null) { parms.points *= parms.raidStrategy.pointsFactor; } PawnsArriveMode raidArrivalMode = parms.raidArrivalMode; if (raidArrivalMode != PawnsArriveMode.EdgeWalkIn) { if (raidArrivalMode != PawnsArriveMode.EdgeDrop) { if (raidArrivalMode == PawnsArriveMode.CenterDrop) { parms.points *= 0.45f; } } else { parms.points *= 1f; } } else { parms.points *= 1f; } if (parms.raidStrategy != null) { parms.points = Mathf.Max(parms.points, parms.raidStrategy.Worker.MinimumPoints(parms.faction) * 1.05f); } }
private void TryLaunch(GlobalTargetInfo target, PawnsArriveMode arriveMode, bool attackOnArrival) { if (!this.parent.Spawned) { Log.Error("Tried to launch " + this.parent + ", but it's unspawned."); return; } List <CompTransporter> transportersInGroup = this.TransportersInGroup; if (transportersInGroup == null) { Log.Error("Tried to launch " + this.parent + ", but it's not in any group."); return; } if (!this.LoadingInProgressOrReadyToLaunch || !this.AllInGroupConnectedToFuelingPort || !this.AllFuelingPortSourcesInGroupHaveAnyFuel) { return; } Map map = this.parent.Map; int num = Find.WorldGrid.TraversalDistanceBetween(map.Tile, target.Tile); if (num > this.MaxLaunchDistance) { return; } this.Transporter.TryRemoveLord(map); int groupID = this.Transporter.groupID; float amount = Mathf.Max(CompLaunchable.FuelNeededToLaunchAtDist((float)num), 1f); for (int i = 0; i < transportersInGroup.Count; i++) { CompTransporter compTransporter = transportersInGroup[i]; Building fuelingPortSource = compTransporter.Launchable.FuelingPortSource; if (fuelingPortSource != null) { fuelingPortSource.TryGetComp <CompRefuelable>().ConsumeFuel(amount); } ThingOwner directlyHeldThings = compTransporter.GetDirectlyHeldThings(); ActiveDropPod activeDropPod = (ActiveDropPod)ThingMaker.MakeThing(ThingDefOf.ActiveDropPod, null); activeDropPod.Contents = new ActiveDropPodInfo(); activeDropPod.Contents.innerContainer.TryAddRangeOrTransfer(directlyHeldThings, true, true); DropPodLeaving dropPodLeaving = (DropPodLeaving)SkyfallerMaker.MakeSkyfaller(ThingDefOf.DropPodLeaving, activeDropPod); dropPodLeaving.groupID = groupID; dropPodLeaving.destinationTile = target.Tile; dropPodLeaving.destinationCell = target.Cell; dropPodLeaving.arriveMode = arriveMode; dropPodLeaving.attackOnArrival = attackOnArrival; compTransporter.CleanUpLoadingVars(map); compTransporter.parent.Destroy(DestroyMode.Vanish); GenSpawn.Spawn(dropPodLeaving, compTransporter.parent.Position, map); } }
public ShipBase_Traveling(ShipBase ship, RimWorld.Planet.GlobalTargetInfo target, PawnsArriveMode arriveMode, TravelingShipArrivalAction arrivalAction = TravelingShipArrivalAction.StayOnWorldMap, bool leavingForTarget = true) { this.containingShip = ship; this.def = ship.compShip.sProps.LeavingShipDef; this.def.size = ship.def.size; this.def.graphicData = ship.def.graphicData; this.destinationTile = target.Tile; this.destinationCell = target.Cell; this.pawnArriveMode = arriveMode; this.leavingForTarget = leavingForTarget; this.Rotation = ship.Rotation; this.arrivalAction = arrivalAction; }
protected override string GetLetterText(IncidentParms parms, List <Pawn> pawns) { string text = null; PawnsArriveMode raidArrivalMode = parms.raidArrivalMode; if (raidArrivalMode != PawnsArriveMode.EdgeWalkIn) { if (raidArrivalMode != PawnsArriveMode.EdgeDrop) { if (raidArrivalMode == PawnsArriveMode.CenterDrop) { text = "EnemyRaidCenterDrop".Translate(new object[] { parms.faction.def.pawnsPlural, parms.faction.Name }); } } else { text = "EnemyRaidEdgeDrop".Translate(new object[] { parms.faction.def.pawnsPlural, parms.faction.Name }); } } else { text = "EnemyRaidWalkIn".Translate(new object[] { parms.faction.def.pawnsPlural, parms.faction.Name }); } text += "\n\n"; text += parms.raidStrategy.arrivalTextEnemy; Pawn pawn = pawns.Find((Pawn x) => x.Faction.leader == x); if (pawn != null) { text += "\n\n"; text += "EnemyRaidLeaderPresent".Translate(new object[] { pawn.Faction.def.pawnsPlural, pawn.LabelShort }); } return(text); }
public static void LaunchLandedFleet(LandedShip landedShip, int destinationTile, IntVec3 destinationCell, PawnsArriveMode pawnArriveMode, TravelingShipArrivalAction arrivalAction) { if (destinationTile < 0) { Log.Error("Tried launching landed ship, but its destination tile is " + destinationTile); return; } TravelingShips travelingShips = (TravelingShips)WorldObjectMaker.MakeWorldObject(ShipNamespaceDefOfs.TravelingSuborbitalShip); travelingShips.Tile = landedShip.Tile; travelingShips.SetFaction(landedShip.Faction); travelingShips.destinationTile = destinationTile; travelingShips.destinationCell = destinationCell; // travelingShips.destinationCell = this.destinationCell; travelingShips.arriveMode = pawnArriveMode; travelingShips.arrivalAction = arrivalAction; Find.WorldObjects.Add(travelingShips); foreach (ShipBase current in landedShip.ships) { travelingShips.AddShip(current, true); // current.SavePotentialWorldPawns(); DropShipUtility.ReimbarkWorldPawnsForLandedShip(current); } travelingShips.SetFaction(landedShip.Faction); TravelingShipsUtility.AddAllLandedPawnsToWorld(landedShip); if (Find.World.worldObjects.Contains(landedShip)) { Find.World.worldObjects.Remove(landedShip); } }