Пример #1
0
        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);
        }
Пример #2
0
        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));
        }
Пример #3
0
 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));
     }
 }
Пример #4
0
        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));
        }