public static void Settle(AerialVehicleInFlight aerialVehicle) { Faction faction = aerialVehicle.Faction; if (faction != Faction.OfPlayer) { Log.Error("Cannot settle with non-player faction."); return; } Settlement newHome = SettleUtility.AddNewHome(aerialVehicle.Tile, faction); LongEventHandler.QueueLongEvent(delegate() { GetOrGenerateMapUtility.GetOrGenerateMap(aerialVehicle.Tile, Find.World.info.initialMapSize, null); }, "GeneratingMap", true, new Action <Exception>(GameAndMapInitExceptionHandlers.ErrorWhileGeneratingMap), true); LongEventHandler.QueueLongEvent(delegate() { IntVec3 landingCell = GetLandingCell(newHome.Map, aerialVehicle); //AerialVehicleArrivalAction_LandSpecificCell arrivalAction = new AerialVehicleArrivalAction_LandSpecificCell(aerialVehicle.vehicle, newHome, aerialVehicle.Tile, // aerialVehicle.vehicle.CompVehicleLauncher.launchProtocols.FirstOrDefault(), landingCell, Rot4.North); //arrivalAction.Arrived(aerialVehicle.Tile); VehiclePawn vehicle = (VehiclePawn)GenSpawn.Spawn(aerialVehicle.vehicle, landingCell, newHome.Map); CameraJumper.TryJump(vehicle); aerialVehicle.Destroy(); }, "SpawningColonists", true, new Action <Exception>(GameAndMapInitExceptionHandlers.ErrorWhileGeneratingMap), true); }
public static void Settle(LandedShip landedShip, bool settlePermanent = false) { Faction faction = landedShip.Faction; if (faction != Faction.OfPlayer) { Log.Error("Cannot settle with non-player faction."); return; } MapParent newWorldObject; if (settlePermanent) { newWorldObject = SettleUtility.AddNewHome(landedShip.Tile, faction); } else { newWorldObject = (ShipDropSite)WorldObjectMaker.MakeWorldObject(ShipNamespaceDefOfs.ShipDropSite); newWorldObject.SetFaction(faction); newWorldObject.Tile = landedShip.Tile; Find.WorldObjects.Add(newWorldObject); } LongEventHandler.QueueLongEvent(delegate { IntVec3 vec3; if (settlePermanent) { vec3 = Find.World.info.initialMapSize; } else { vec3 = new IntVec3(100, 1, 100); } Map visibleMap = MapGenerator.GenerateMap(vec3, landedShip.Tile, newWorldObject, null, null); Current.Game.VisibleMap = visibleMap; }, "GeneratingMap", true, new Action <Exception>(GameAndMapInitExceptionHandlers.ErrorWhileGeneratingMap)); LongEventHandler.QueueLongEvent(delegate { Map map = newWorldObject.Map; Pawn pawn = landedShip.PawnsListForReading[0]; Predicate <IntVec3> extraCellValidator = (IntVec3 x) => x.GetRegion(map).CellCount >= 600; TravelingShipsUtility.EnterMapWithShip(landedShip, map, CaravanEnterMode.Center); Find.CameraDriver.JumpTo(map.Center); Find.MainTabsRoot.EscapeCurrentTab(false); }, "SpawningColonists", true, new Action <Exception>(GameAndMapInitExceptionHandlers.ErrorWhileGeneratingMap)); }
public static RimWorld.Planet.Settlement AddNewHome(int tile, Faction faction, WorldObjectDef cityDef = null) { if (cityDef == null) { cityDef = WorldObjectDefOf.Settlement; } if (ModsConfig.IsActive("Cabbage.RimCities")) { if (cityDef.worldObjectClass.ToString() == "Cities.City") { return(GenerateCity(tile, faction, cityDef)); } else { return(SettleUtility.AddNewHome(tile, faction)); } } else { return(SettleUtility.AddNewHome(tile, faction)); } }
public static void Settle(WorldShip worldShip, bool settlePermanent = false) { Faction faction = worldShip.Faction; PawnsArrivalModeDef arrivalMode = PawnsArrivalModeDefOf.CenterDrop; if (faction != Faction.OfPlayer) { Log.Error("Cannot settle with non-player faction."); return; } MapParent newWorldObject; Map mapToDropIn = null; if (settlePermanent) { newWorldObject = SettleUtility.AddNewHome(worldShip.Tile, faction); } else { newWorldObject = Find.WorldObjects.MapParentAt(worldShip.Tile); if (newWorldObject == null) { newWorldObject = (ShipDropSite)WorldObjectMaker.MakeWorldObject(ShipNamespaceDefOfs.ShipDropSite); newWorldObject.SetFaction(faction); newWorldObject.Tile = worldShip.Tile; Find.WorldObjects.Add(newWorldObject); } } LongEventHandler.QueueLongEvent(delegate { IntVec3 vec3; if (settlePermanent) { vec3 = Find.World.info.initialMapSize; mapToDropIn = MapGenerator.GenerateMap(vec3, newWorldObject, MapGeneratorDefOf.Base_Player, null, null); } else if (newWorldObject != null) { if (newWorldObject.HasMap) { arrivalMode = PawnsArrivalModeDefOf.EdgeDrop; mapToDropIn = newWorldObject.Map; } else { Site site = newWorldObject as Site; mapToDropIn = GetOrGenerateMapUtility.GetOrGenerateMap(worldShip.Tile, site == null ? Find.World.info.initialMapSize : SiteCoreWorker.MapSize, newWorldObject.def); arrivalMode = PawnsArrivalModeDefOf.EdgeDrop; } } else { vec3 = new IntVec3(100, 1, 100); mapToDropIn = MapGenerator.GenerateMap(vec3, newWorldObject, MapGeneratorDefOf.Base_Player, null, null); } if (mapToDropIn == null) { Log.Error("Failed to generate Map for Ship Dropdown"); return; } Current.Game.CurrentMap = mapToDropIn; }, "GeneratingMap", true, new Action <Exception>(GameAndMapInitExceptionHandlers.ErrorWhileGeneratingMap)); LongEventHandler.QueueLongEvent(delegate { Map map = newWorldObject.Map; WorldShipUtility.EnterMapWithShip(worldShip, map, IntVec3.Zero, ShipArrivalAction.EnterMapFriendly, arrivalMode); Find.CameraDriver.JumpToCurrentMapLoc(map.Center); Find.MainTabsRoot.EscapeCurrentTab(false); }, "SpawningColonists", true, new Action <Exception>(GameAndMapInitExceptionHandlers.ErrorWhileGeneratingMap)); }