Esempio n. 1
0
        /// <summary>
        /// Adds dimension containing buildings if there were none. Should be called when first Interdimensional Shed is built.
        /// </summary>
        public override void InitializeDimensionBuilding()
        {
            if (dimensionInfo == null || getDimensionLocation() != null)
            {
                return;
            }

            // TODO Possibly unnecessary. Depends on host event rules
            Game1.addMail(ModEntry.ShedPurchaseMailId, true, true);

            Utility.TraceLog($"Initializing dimension building for {dimensionInfo.DisplayName}");
            var farmhouseWarp = Game1.getFarm().GetMainFarmHouseEntry();

            var b = new DimensionBuilding(dimensionInfo, new BluePrint("Big Shed"), new Vector2(-100, -100));

            foreach (var warp in b.indoors.Value.warps)
            {
                // Give the warp back sensible defaults, since these are off the map
                warp.TargetX = farmhouseWarp.X;
                warp.TargetY = farmhouseWarp.Y;
            }
            Game1.getFarm().buildings.Add(b);

            Utility.TraceLog($"Dimension building initialized for {dimensionInfo.DisplayName}");
        }
        public void InitializeAfterLoad()
        {
            var farmBuildings = Game1.getFarm().buildings;

            // Take any buildings for which mods have been unloaded out of the pool
            unloadedDimensionBuildings.AddRange(farmBuildings.Where(building => building.modData.ContainsKey(DimensionBuilding.ModData_ShedDimensionKey) && data.getDimensionInfo(building.modData[DimensionBuilding.ModData_ShedDimensionKey]) == null));
            if (unloadedDimensionBuildings.Count() > 0)
            {
                Utility.Log($"Hiding buildings which are missing mod data: {string.Join(", ", unloadedDimensionBuildings.Select(b => b.modData[DimensionBuilding.ModData_ShedDimensionKey]))}");
            }
            // The vanilla saved versions of our custom buildings
            vanillaBuildings.AddRange(Game1.getFarm().buildings.Where(building => building.modData.ContainsKey(DimensionBuilding.ModData_ShedDimensionKey)));
            // Change the vanilla into custom versions
            customBuildings.AddRange(vanillaBuildings.Select(building =>
            {
                var db = new DimensionBuilding(
                    data.getDimensionInfo(building.modData[DimensionBuilding.ModData_ShedDimensionKey]),
                    new BluePrint(building.buildingType.Value),
                    new Vector2(building.tileX.Value, building.tileY.Value));
                db.modData = building.modData;
                Utility.TransferObjects(building.indoors.Value, db.indoors.Value);
                return(db);
            }));
            AfterSaved();
        }