public override void Arrived(Caravan caravan) { Map map = this.mapParent.Map; if (map == null) { return; } Pawn t = caravan.PawnsListForReading[0]; CaravanDropInventoryMode dropInventoryMode = (!map.IsPlayerHome) ? CaravanDropInventoryMode.DoNotDrop : CaravanDropInventoryMode.UnloadIndividually; bool draftColonists = this.mapParent.Faction != null && this.mapParent.Faction.HostileTo(Faction.OfPlayer); CaravanEnterMapUtility.Enter(caravan, map, CaravanEnterMode.Edge, dropInventoryMode, draftColonists, null); if (this.mapParent.def == WorldObjectDefOf.Ambush) { Find.LetterStack.ReceiveLetter("LetterLabelCaravanEnteredAmbushMap".Translate(), "LetterCaravanEnteredAmbushMap".Translate(new object[] { caravan.Label }).CapitalizeFirst(), LetterDefOf.NeutralEvent, t, null, null); } else if (caravan.IsPlayerControlled || this.mapParent.Faction == Faction.OfPlayer) { Messages.Message("MessageCaravanEnteredWorldObject".Translate(new object[] { caravan.Label, this.mapParent.Label }).CapitalizeFirst(), t, MessageTypeDefOf.TaskCompletion, true); } }
public override void Arrived(Caravan caravan) { Map map = this.mapParent.Map; if (map != null) { Pawn t = caravan.PawnsListForReading[0]; CaravanDropInventoryMode dropInventoryMode = (CaravanDropInventoryMode)(map.IsPlayerHome ? 2 : 0); bool draftColonists = this.mapParent.Faction != null && this.mapParent.Faction.HostileTo(Faction.OfPlayer); CaravanEnterMapUtility.Enter(caravan, map, CaravanEnterMode.Edge, dropInventoryMode, draftColonists, null); if (this.mapParent.def == WorldObjectDefOf.Ambush) { Find.TickManager.CurTimeSpeed = TimeSpeed.Paused; Find.LetterStack.ReceiveLetter("LetterLabelCaravanEnteredAmbushMap".Translate(), "LetterCaravanEnteredAmbushMap".Translate(caravan.Label).CapitalizeFirst(), LetterDefOf.NeutralEvent, t, null); } else { if (!caravan.IsPlayerControlled && this.mapParent.Faction != Faction.OfPlayer) { return; } Messages.Message("MessageCaravanEnteredWorldObject".Translate(caravan.Label, this.mapParent.Label).CapitalizeFirst(), t, MessageTypeDefOf.TaskCompletion); } } }
public override void Arrived(Caravan caravan) { Map map = mapParent.Map; if (map != null) { CaravanDropInventoryMode dropInventoryMode = map.IsPlayerHome ? CaravanDropInventoryMode.UnloadIndividually : CaravanDropInventoryMode.DoNotDrop; bool draftColonists = mapParent.Faction != null && mapParent.Faction.HostileTo(Faction.OfPlayer); if (caravan.IsPlayerControlled || mapParent.Faction == Faction.OfPlayer) { Find.LetterStack.ReceiveLetter("LetterLabelCaravanEnteredMap".Translate(mapParent), "LetterCaravanEnteredMap".Translate(caravan.Label, mapParent).CapitalizeFirst(), LetterDefOf.NeutralEvent, caravan.PawnsListForReading); } CaravanEnterMapUtility.Enter(caravan, map, CaravanEnterMode.Edge, dropInventoryMode, draftColonists); } }
public override void Arrived(Caravan caravan) { Map map = this.mapParent.Map; if (map == null) { return; } Pawn t = caravan.PawnsListForReading[0]; CaravanDropInventoryMode dropInventoryMode = (!map.IsPlayerHome) ? CaravanDropInventoryMode.DoNotDrop : CaravanDropInventoryMode.UnloadIndividually; bool draftColonists = this.mapParent.Faction != null && this.mapParent.Faction.HostileTo(Faction.OfPlayer); CaravanEnterMapUtility.Enter(caravan, map, CaravanEnterMode.Edge, dropInventoryMode, draftColonists, null); if (caravan.IsPlayerControlled || this.mapParent.Faction == Faction.OfPlayer) { Find.LetterStack.ReceiveLetter("LetterLabelCaravanEnteredMap".Translate(this.mapParent), "LetterCaravanEnteredMap".Translate(caravan.Label, this.mapParent).CapitalizeFirst(), LetterDefOf.NeutralEvent, t, null, null); } }
private static void CaravanEnter(Caravan caravan, Map map, Func <Pawn, IntVec3> spawnCellGetter, CaravanDropInventoryMode dropInventoryMode = CaravanDropInventoryMode.DoNotDrop, bool draftColonists = false) { TacticUtils.TacticalGroups.RemoveCaravanGroup(caravan); TacticUtils.TacticalGroups.CreateOrJoinColony(caravan.PawnsListForReading, map); }
public static void Enter(Caravan caravan, Map map, Func <Pawn, IntVec3> spawnCellGetter, CaravanDropInventoryMode dropInventoryMode = CaravanDropInventoryMode.DoNotDrop, bool draftColonists = false) { tmpPawns.Clear(); tmpPawns.AddRange(caravan.PawnsListForReading); for (int i = 0; i < tmpPawns.Count; i++) { IntVec3 loc = spawnCellGetter(tmpPawns[i]); GenSpawn.Spawn(tmpPawns[i], loc, map, Rot4.Random); } switch (dropInventoryMode) { case CaravanDropInventoryMode.DropInstantly: DropAllInventory(tmpPawns); break; case CaravanDropInventoryMode.UnloadIndividually: { for (int j = 0; j < tmpPawns.Count; j++) { tmpPawns[j].inventory.UnloadEverything = true; } break; } } if (draftColonists) { DraftColonists(tmpPawns); } if (map.IsPlayerHome) { for (int k = 0; k < tmpPawns.Count; k++) { if (tmpPawns[k].IsPrisoner) { tmpPawns[k].guest.WaitInsteadOfEscapingForDefaultTicks(); } } } caravan.RemoveAllPawns(); if (!caravan.Destroyed) { caravan.Destroy(); } tmpPawns.Clear(); }
public static void Enter(Caravan caravan, Map map, CaravanEnterMode enterMode, CaravanDropInventoryMode dropInventoryMode = CaravanDropInventoryMode.DoNotDrop, bool draftColonists = false, Predicate <IntVec3> extraCellValidator = null) { if (enterMode == CaravanEnterMode.None) { Log.Error("Caravan " + caravan + " tried to enter map " + map + " with enter mode " + enterMode); enterMode = CaravanEnterMode.Edge; } IntVec3 enterCell = GetEnterCell(caravan, map, enterMode, extraCellValidator); Func <Pawn, IntVec3> spawnCellGetter = (Pawn p) => CellFinder.RandomSpawnCellForPawnNear(enterCell, map); Enter(caravan, map, spawnCellGetter, dropInventoryMode, draftColonists); }
public static void EnterAndSpawn(Caravan caravan, Map map, CaravanEnterMode enterMode, CaravanDropInventoryMode dropInventoryMode = CaravanDropInventoryMode.DoNotDrop, bool draftColonists = false, Predicate <IntVec3> extraValidator = null) { bool coastalSpawn = caravan.HasBoat(); if (enterMode == CaravanEnterMode.None) { Log.Error(string.Concat(new object[] { "Caravan ", caravan, " tried to enter map ", map, " with no enter mode. Defaulting to edge." })); enterMode = CaravanEnterMode.Edge; } List <Pawn> pawns = new List <Pawn>(caravan.PawnsListForReading).ToList(); IntVec3 enterCell = pawns.NotNullAndAny(v => v.IsBoat()) ? GetWaterCell(caravan, map, CaravanEnterMode.Edge) : GetEnterCellVehicle(caravan, map, enterMode, extraValidator); Rot4 edge = enterMode == CaravanEnterMode.Edge ? CellRect.WholeMap(map).GetClosestEdge(enterCell) : Rot4.North; Predicate <IntVec3> validator = (IntVec3 c) => coastalSpawn?GenGridVehicles.Standable(c, map) : GenGrid.Standable(c, map); Func <Pawn, IntVec3> spawnCellGetter = (Pawn p) => CellFinderExtended.RandomSpawnCellForPawnNear(enterCell, map, p, validator); SpawnVehicles(caravan, pawns, map, spawnCellGetter, edge, draftColonists); }
public static void Enter(Caravan caravan, Map map, Func <Pawn, IntVec3> spawnCellGetter, CaravanDropInventoryMode dropInventoryMode = CaravanDropInventoryMode.DoNotDrop, bool draftColonists = false) { CaravanEnterMapUtility.tmpPawns.Clear(); CaravanEnterMapUtility.tmpPawns.AddRange(caravan.PawnsListForReading); for (int i = 0; i < CaravanEnterMapUtility.tmpPawns.Count; i++) { IntVec3 loc = spawnCellGetter(CaravanEnterMapUtility.tmpPawns[i]); GenSpawn.Spawn(CaravanEnterMapUtility.tmpPawns[i], loc, map, Rot4.Random, WipeMode.Vanish, false); } if (dropInventoryMode == CaravanDropInventoryMode.DropInstantly) { CaravanEnterMapUtility.DropAllInventory(CaravanEnterMapUtility.tmpPawns); } else if (dropInventoryMode == CaravanDropInventoryMode.UnloadIndividually) { for (int j = 0; j < CaravanEnterMapUtility.tmpPawns.Count; j++) { CaravanEnterMapUtility.tmpPawns[j].inventory.UnloadEverything = true; } } if (draftColonists) { CaravanEnterMapUtility.DraftColonists(CaravanEnterMapUtility.tmpPawns); } if (map.IsPlayerHome) { for (int k = 0; k < CaravanEnterMapUtility.tmpPawns.Count; k++) { if (CaravanEnterMapUtility.tmpPawns[k].IsPrisoner) { CaravanEnterMapUtility.tmpPawns[k].guest.WaitInsteadOfEscapingForDefaultTicks(); } } } caravan.RemoveAllPawns(); if (caravan.Spawned) { Find.WorldObjects.Remove(caravan); } CaravanEnterMapUtility.tmpPawns.Clear(); }
public static void Enter(Caravan caravan, Map map, CaravanEnterMode enterMode, CaravanDropInventoryMode dropInventoryMode = CaravanDropInventoryMode.DoNotDrop, bool draftColonists = false, Predicate <IntVec3> extraCellValidator = null) { if (enterMode == CaravanEnterMode.None) { Log.Error(string.Concat(new object[] { "Caravan ", caravan, " tried to enter map ", map, " with enter mode ", enterMode }), false); enterMode = CaravanEnterMode.Edge; } IntVec3 enterCell = CaravanEnterMapUtility.GetEnterCell(caravan, map, enterMode, extraCellValidator); Func <Pawn, IntVec3> spawnCellGetter = (Pawn p) => CellFinder.RandomSpawnCellForPawnNear(enterCell, map, 4); CaravanEnterMapUtility.Enter(caravan, map, spawnCellGetter, dropInventoryMode, draftColonists); }
public static void EnterSpawn(Caravan caravan, Map map, Func <Pawn, IntVec3> spawnCellGetter, CaravanDropInventoryMode caravanDropInventoryMode = CaravanDropInventoryMode.DoNotDrop, bool draftColonists = true) { List <Pawn> pawns = new List <Pawn>(caravan.PawnsListForReading).Where(x => ShipHarmony.IsShip(x)).ToList(); MapExtension mapE = MapExtensionUtility.GetExtensionToMap(map); Rot4 spawnDir = GetEdgeToSpawnBoatOn(caravan, map); for (int i = 0; i < pawns.Count; i++) { IntVec3 loc = CellFinderExtended.MiddleEdgeCell(spawnDir, map, pawns[i], (IntVec3 c) => GenGridShips.Standable(c, map, mapE) && !c.Fogged(map)); //Change back to spawnCellGetter later pawns[i].GetComp <CompShips>().Angle = 0; Pawn ship = GenSpawn.Spawn(pawns[i], loc, map, spawnDir.Opposite, WipeMode.Vanish, false) as Pawn; ship.drafter.Drafted = draftColonists ? true : false; } caravan.RemoveAllPawns(); if (caravan.Spawned) { Find.WorldObjects.Remove(caravan); } }
public static void Enter(Caravan caravan, Map map, CaravanEnterMode enterMode, CaravanDropInventoryMode dropInventoryMode = CaravanDropInventoryMode.DoNotDrop, bool draftColonists = true, Predicate <IntVec3> extraValidator = null) { if (enterMode == CaravanEnterMode.None) { Log.Error(string.Concat(new object[] { "Caravan ", caravan, " tried to enter map ", map, " with no enter mode. Defaulting to edge." }), false); enterMode = CaravanEnterMode.Edge; } //Ensure pawns are onboard till a fix for dock settling is done if (ShipHarmony.HasShip(caravan) && caravan.PawnsListForReading.Any(x => !ShipHarmony.IsShip(x))) { ShipHarmony.BoardAllCaravanPawns(caravan); } IntVec3 enterCell = GetWaterCell(caravan, map, CaravanEnterMode.Edge); //Caravan Enter Mode back to enterMode Func <Pawn, IntVec3> spawnCellGetter = (Pawn p) => p.ClampToMap(CellFinderExtended.RandomSpawnCellForPawnNear(enterCell, map, 4), map); EnterMapUtilityBoats.EnterSpawn(caravan, map, spawnCellGetter, dropInventoryMode, draftColonists); }
public static bool Prefix(Caravan caravan, Map map, CaravanEnterMode enterMode, CaravanDropInventoryMode dropInventoryMode = CaravanDropInventoryMode.DoNotDrop, bool draftColonists = false, Predicate <IntVec3> extraCellValidator = null) { if (enterMode == CaravanEnterMode.None) { Log.Error("Caravan " + caravan + " tried to enter map " + map + " with enter mode " + enterMode); enterMode = CaravanEnterMode.Edge; } Predicate <IntVec3> wrapped = (IntVec3 x) => (extraCellValidator == null || extraCellValidator(x)) && map.PawnKindCanEnter(caravan.pawns.InnerListForReading.First().kindDef); IntVec3 enterCell = (IntVec3)GetEnterCellInfo.Invoke(null, new object[] { caravan, map, enterMode, wrapped }); Func <Pawn, IntVec3> spawnCellGetter = (Pawn p) => CellFinderExtended.RandomSpawnCellForPawnNear(enterCell, map, p.kindDef); EnterWithFuncInfo.Invoke(null, new object[] { caravan, map, spawnCellGetter, dropInventoryMode, draftColonists }); return(false); }