public static IEnumerable <FloatMenuOption> GetFloatMenuOptions(CompLaunchablePawn representative, IEnumerable <IThingHolder> pods, Settlement settlement) { if (ByakheeArrivalAction_AttackSettlement.CanAttack(pods, settlement)) { yield break; } Func <FloatMenuAcceptanceReport> acceptanceReportGetter = new Func <FloatMenuAcceptanceReport>(() => CanAttack(pods, settlement)); Func <ByakheeArrivalAction_AttackSettlement> dropAtEdge = new Func <ByakheeArrivalAction_AttackSettlement>(() => arrivalActionEdgeDrop(settlement)); Func <FloatMenuAcceptanceReport> idunno = null; foreach (FloatMenuOption floatMenuOption in ByakheeArrivalActionUtility.GetFloatMenuOptions <ByakheeArrivalAction_AttackSettlement>(acceptanceReportGetter, dropAtEdge, "AttackAndDropAtEdge".Translate(settlement.Label), representative, settlement.Tile, null)) { yield return(floatMenuOption); } Func <ByakheeArrivalAction_AttackSettlement> dropAtCenter = new Func <ByakheeArrivalAction_AttackSettlement>(() => arrivalActionCenterDrop(settlement)); foreach (FloatMenuOption floatMenuOption2 in ByakheeArrivalActionUtility.GetFloatMenuOptions <ByakheeArrivalAction_AttackSettlement>(acceptanceReportGetter, dropAtCenter, "AttackAndDropInCenter".Translate(settlement.Label), representative, settlement.Tile, null)) { yield return(floatMenuOption2); } yield break; }
public static void DropTravelingTransportPods(List <ActiveDropPodInfo> dropPods, IntVec3 near, Map map) { ByakheeArrivalActionUtility.RemovePawnsFromWorldPawns(dropPods); for (int i = 0; i < dropPods.Count; i++) { IntVec3 c; DropCellFinder.TryFindDropSpotNear(near, map, out c, false, true, true, null, true); DropPodUtility.MakeDropPodAt(c, map, dropPods[i]); } }
public static FloatMenuAcceptanceReport CanAttack(IEnumerable <IThingHolder> pods, Settlement settlement) { if (settlement == null || !settlement.Spawned || !settlement.Attackable) { return(false); } if (!ByakheeArrivalActionUtility.AnyNonDownedColonist(pods)) { return(false); } if (settlement.EnterCooldownBlocksEntering()) { return(FloatMenuAcceptanceReport.WithFailReasonAndMessage("EnterCooldownBlocksEntering".Translate(), "MessageEnterCooldownBlocksEntering".Translate(settlement.EnterCooldownTicksLeft().ToStringTicksToPeriod(true, false, true, true)))); } return(true); }
public override void Arrived(List <ActiveDropPodInfo> pods, int tile) { Thing lookTarget = ByakheeArrivalActionUtility.GetLookTarget(pods); bool flag = !this.settlement.HasMap; Map orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(this.settlement.Tile, null); TaggedString label = "LetterLabelCaravanEnteredEnemyBase".Translate(); TaggedString text = "LetterTransportPodsLandedInEnemyBase".Translate(this.settlement.Label).CapitalizeFirst(); SettlementUtility.AffectRelationsOnAttacked(this.settlement, ref text); if (flag) { Find.TickManager.Notify_GeneratedPotentiallyHostileMap(); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(orGenerateMap.mapPawns.AllPawns, ref label, ref text, "LetterRelatedPawnsInMapWherePlayerLanded".Translate(Faction.OfPlayer.def.pawnsPlural), true, true); } Find.LetterStack.ReceiveLetter(label, text, LetterDefOf.NeutralEvent, lookTarget, this.settlement.Faction, null, null, null); this.arrivalMode.Worker.TravelingTransportPodsArrived(pods, orGenerateMap); }
public static IEnumerable <FloatMenuOption> GetFloatMenuOptions(CompLaunchablePawn representative, IEnumerable <IThingHolder> pods, Settlement settlement) { if (settlement.Faction == Faction.OfPlayer) { return(Enumerable.Empty <FloatMenuOption>()); } return(ByakheeArrivalActionUtility.GetFloatMenuOptions <ByakheeArrivalAction_GiveGift>(() => ByakheeArrivalAction_GiveGift.CanGiveGiftTo(pods, settlement), () => new ByakheeArrivalAction_GiveGift(settlement), "GiveGiftViaTransportPods".Translate(settlement.Faction.Name, FactionGiftUtility.GetGoodwillChange(pods, settlement).ToStringWithSign()), representative, settlement.Tile, delegate(Action action) { TradeRequestComp tradeReqComp = settlement.GetComponent <TradeRequestComp>(); if (tradeReqComp.ActiveRequest && pods.Any((IThingHolder p) => p.GetDirectlyHeldThings().Contains(tradeReqComp.requestThingDef))) { Find.WindowStack.Add(new Dialog_MessageBox("GiveGiftViaTransportPodsTradeRequestWarning".Translate(), "Yes".Translate(), delegate() { action(); }, "No".Translate(), null, null, false, null, null, WindowLayer.Dialog)); return; } action(); })); }
public static Thing DropShuttle(List <ActiveDropPodInfo> pods, Map map, IntVec3 cell, Faction faction = null) { ByakheeArrivalActionUtility.RemovePawnsFromWorldPawns(pods); Thing thing = QuestGen_Shuttle.GenerateShuttle(faction, null, null, false, false, false, 0, false, false, true, false, null, null, -1, null, false, true, false, false); TransportShip transportShip = TransportShipMaker.MakeTransportShip(TransportShipDefOf.Ship_Shuttle, null, thing); CompTransporter compTransporter = thing.TryGetComp <CompTransporter>(); for (int i = 0; i < pods.Count; i++) { compTransporter.innerContainer.TryAddRangeOrTransfer(pods[i].innerContainer, true, false); } if (!cell.IsValid) { cell = DropCellFinder.GetBestShuttleLandingSpot(map, Faction.OfPlayer); } transportShip.ArriveAt(cell, map.Parent); transportShip.AddJobs(new ShipJobDef[] { ShipJobDefOf.Unload, ShipJobDefOf.FlyAway }); return(thing); }
public static IEnumerable <FloatMenuOption> GetFloatMenuOptions(CompLaunchablePawn representative, IEnumerable <IThingHolder> pods, Settlement settlement) { return(ByakheeArrivalActionUtility.GetFloatMenuOptions <ByakheeArrivalAction_VisitSettlement>(() => ByakheeArrivalAction_VisitSettlement.CanVisit(pods, settlement), () => new ByakheeArrivalAction_VisitSettlement(settlement), "VisitSettlement".Translate(settlement.Label), representative, settlement.Tile, null)); }
public static IEnumerable <FloatMenuOption> GetFloatMenuOptions(CompLaunchablePawn representative, IEnumerable <IThingHolder> pods, Caravan caravan) { return(ByakheeArrivalActionUtility.GetFloatMenuOptions <ByakheeArrivalAction_GiveToCaravan>(() => ByakheeArrivalAction_GiveToCaravan.CanGiveTo(pods, caravan), () => new ByakheeArrivalAction_GiveToCaravan(caravan), "GiveToCaravan".Translate(caravan.Label), representative, caravan.Tile, null)); }