private static void ArrivePatch(TransportPodsArrivalAction_LandInSpecificCell __instance, List <ActiveDropPodInfo> pods, int tile) { if (Traverse.Create(__instance).Field("mapParent").GetValue() is WorldSettlementFC settlement) { List <Pawn> pawns = new List <Pawn>(); bool hasAnyPawns = false; foreach (ActiveDropPodInfo activeDropPodInfo in pods) { foreach (Thing thing in activeDropPodInfo.innerContainer) { if (thing is Pawn pawn) { hasAnyPawns = true; pawns.Add(pawn); } } } if (hasAnyPawns) { settlement.AddToDefenceFromList(pawns, tile); } } }
public static bool Prefix( TransportPodsArrivalAction_LandInSpecificCell __instance, List <ActiveDropPodInfo> pods, int tile) { foreach (ActiveDropPodInfo pod in pods) { for (int index = 0; index < pod.innerContainer.Count; index++) { if (pod.innerContainer[index].TryGetComp <CompLaunchableSRTS>() != null) { Thing lookTarget = TransportPodsArrivalActionUtility.GetLookTarget(pods); Traverse traverse = Traverse.Create((object)__instance); IntVec3 c = traverse.Field("cell").GetValue <IntVec3>(); Map map = traverse.Field("mapParent").GetValue <MapParent>().Map; TransportPodsArrivalActionUtility.RemovePawnsFromWorldPawns(pods); for (int i = 0; i < pods.Count; ++i) { pods[i].openDelay = 0; DropPodUtility.MakeDropPodAt(c, map, pods[i]); } Messages.Message("MessageTransportPodsArrived".Translate(), (LookTargets)lookTarget, MessageTypeDefOf.TaskCompletion, true); return(false); } } } return(true); }
public static bool Prefix(TransportPodsArrivalAction_LandInSpecificCell __instance, List <ActiveDropPodInfo> pods, int tile, IntVec3 ___cell, MapParent ___mapParent) { // Log.Message(string.Format("pods: {0}", pods.Count)); foreach (ActiveDropPodInfo info in pods) { for (int i = 0; i < info.innerContainer.Count; i++) { Thing dropship = info.innerContainer[i]; CompDropship comp = dropship.TryGetCompFast <CompDropship>(); if (comp != null) { // Log.Message(string.Format("pods: {0}", info.innerContainer.ContentsString)); Thing lookTarget = TransportPodsArrivalActionUtility.GetLookTarget(pods); Traverse tv = Traverse.Create(__instance); IntVec3 c = ___cell; Map map = ___mapParent.Map; TransportPodsArrivalActionUtility.RemovePawnsFromWorldPawns(pods); for (int ii = 0; ii < pods.Count; ii++) { DropPodUtility.MakeDropPodAt(c, map, pods[ii]); } Messages.Message("AvP_USCM_Dropship_MessageArrived".Translate(), lookTarget, MessageTypeDefOf.TaskCompletion, true); return(false); } } } return(true); }
private void Arrived() { if (!arrived) { arrived = true; if (arrivalAction == null || !(bool)arrivalAction.StillValid(pods.Cast <IThingHolder>(), destinationTile)) { arrivalAction = null; List <Map> maps = Find.Maps; for (int i = 0; i < maps.Count; i++) { if (maps[i].Tile == destinationTile) { if (destinationCell != default(IntVec3)) { arrivalAction = new WorldTransport.TM_TransportPodsArrivalAction_LandAtExactCell(maps[i].Parent, destinationCell, draftFlag); break; } arrivalAction = new TransportPodsArrivalAction_LandInSpecificCell(maps[i].Parent, DropCellFinder.RandomDropSpot(maps[i])); break; } } if (arrivalAction == null) { if (TransportPodsArrivalAction_FormCaravan.CanFormCaravanAt(pods.Cast <IThingHolder>(), destinationTile)) { arrivalAction = new TransportPodsArrivalAction_FormCaravan(); } else { List <Caravan> caravans = Find.WorldObjects.Caravans; for (int j = 0; j < caravans.Count; j++) { if (caravans[j].Tile == destinationTile && (bool)TransportPodsArrivalAction_GiveToCaravan.CanGiveTo(pods.Cast <IThingHolder>(), caravans[j])) { arrivalAction = new TransportPodsArrivalAction_GiveToCaravan(caravans[j]); break; } } } } } if (arrivalAction != null && arrivalAction.ShouldUseLongEvent(pods, destinationTile)) { LongEventHandler.QueueLongEvent(delegate { DoArrivalAction(); }, "GeneratingMapForNewEncounter", false, null); } else { DoArrivalAction(); } } }
private static void SyncLandInSpecificCell(SyncWorker sync, ref TransportPodsArrivalAction_LandInSpecificCell transportPodAction) { if (sync.isWriting) { sync.Write((MapParent)mapParentField.GetValue(transportPodAction)); sync.Write((IntVec3)cellField.GetValue(transportPodAction)); sync.Write((bool)landInShuttleField.GetValue(transportPodAction)); } else { transportPodAction = new TransportPodsArrivalAction_LandInSpecificCell(sync.Read <MapParent>(), sync.Read <IntVec3>(), sync.Read <bool>()); } }
public static IEnumerable <FloatMenuOption> GetMapParent(MapParent mapparent, IEnumerable <IThingHolder> pods, CompLaunchableHelicopter representative, Caravan car) { /* * foreach (FloatMenuOption o in mapparent.GetFloatMenuOptions()) * { * yield return o; * } */ if (TransportPodsArrivalAction_LandInSpecificCell.CanLandInSpecificCell(pods, mapparent)) { yield return(new FloatMenuOption("LandInExistingMap".Translate(new object[] { mapparent.Label }), delegate { Map myMap; if (car == null) { myMap = representative.parent.Map; } else { myMap = null; } Map map = mapparent.Map; Current.Game.CurrentMap = map; CameraJumper.TryHideWorld(); Find.Targeter.BeginTargeting(TargetingParameters.ForDropPodsDestination(), delegate(LocalTargetInfo x) { representative.TryLaunch(mapparent.Tile, new TransportPodsArrivalAction_LandInSpecificCell(mapparent, x.Cell), car); }, null, delegate { if (myMap != null && Find.Maps.Contains(myMap)) { Current.Game.CurrentMap = myMap; } }, CompLaunchable.TargeterMouseAttachment); }, MenuOptionPriority.Default, null, null, 0f, null, null)); } yield break; }
public static bool Prefix(TransportPodsArrivalAction_LandInSpecificCell __instance, List <ActiveDropPodInfo> pods, int tile) { foreach (ActiveDropPodInfo info in pods) { if (info.innerContainer.Contains(ThingDef.Named("Building_Helicopter"))) { Thing lookTarget = TransportPodsArrivalActionUtility.GetLookTarget(pods); Traverse tv = Traverse.Create(__instance); IntVec3 c = tv.Field("cell").GetValue <IntVec3>(); Map map = tv.Field("mapParent").GetValue <MapParent>().Map; TransportPodsArrivalActionUtility.RemovePawnsFromWorldPawns(pods); for (int i = 0; i < pods.Count; i++) { DropPodUtility.MakeDropPodAt(c, map, pods[i]); } Messages.Message("MessageTransportPodsArrived".Translate(), lookTarget, MessageTypeDefOf.TaskCompletion, true); return(false); } } return(true); }
public static bool Prefix(TransportPodsArrivalAction_LandInSpecificCell __instance, List <ActiveDropPodInfo> pods, int tile) { // Log.Message(string.Format("pods: {0}", pods.Count)); foreach (ActiveDropPodInfo info in pods) { if (info.innerContainer.Contains(USCMDefOf.RRY_USCM_DropshipUD4L)) { // Log.Message(string.Format("pods: {0}", info.innerContainer.ContentsString)); Thing lookTarget = TransportPodsArrivalActionUtility.GetLookTarget(pods); Traverse tv = Traverse.Create(__instance); IntVec3 c = tv.Field("cell").GetValue <IntVec3>(); Map map = tv.Field("mapParent").GetValue <MapParent>().Map; TransportPodsArrivalActionUtility.RemovePawnsFromWorldPawns(pods); for (int i = 0; i < pods.Count; i++) { DropPodUtility.MakeDropPodAt(c, map, pods[i]); } Messages.Message("USCM_Dropship_MessageArrived".Translate(), lookTarget, MessageTypeDefOf.TaskCompletion, true); return(false); } } return(true); }
public static IEnumerable <FloatMenuOption> GetMapParent( MapParent mapparent, IEnumerable <IThingHolder> pods, CompLaunchableHelicopter representative, Caravan car) { if (TransportPodsArrivalAction_LandInSpecificCell.CanLandInSpecificCell(pods, mapparent)) { yield return(new FloatMenuOption("LandInExistingMap".Translate((object)mapparent.Label), (Action)(() => { Map myMap = car != null ? (Map)null : representative.parent.Map; Current.Game.CurrentMap = mapparent.Map; CameraJumper.TryHideWorld(); Find.Targeter.BeginTargeting(TargetingParameters.ForDropPodsDestination(), (Action <LocalTargetInfo>)(x => representative.TryLaunch(mapparent.Tile, (TransportPodsArrivalAction) new TransportPodsArrivalAction_LandInSpecificCell(mapparent, x.Cell), car)), (Pawn)null, (Action)(() => { if (myMap == null || !Find.Maps.Contains(myMap)) { return; } Current.Game.CurrentMap = myMap; }), CompLaunchable.TargeterMouseAttachment); }), MenuOptionPriority.Default, (Action)null, (Thing)null, 0.0f, (Func <Rect, bool>)null, (WorldObject)null)); } }
private static void SyncLandInSpecificCell(ThingComp compLaunchableSrts, int destinationTile, TransportPodsArrivalAction_LandInSpecificCell arrivalAction, Caravan caravanMethodParameter, Caravan caravanFieldValue) => SyncedUniversalArrivalAction(compLaunchableSrts, destinationTile, arrivalAction, caravanMethodParameter, caravanFieldValue);