private static bool HandleStockSelection(
            ref Decorators.PurchaseAnimalsMenu moddedMenu,
            int x,
            int y,
            Farmer moddedPlayer)
        {
            var textureComponent = moddedMenu.GetAnimalsToPurchase().Where(o => (o.item as StardewValley.Object).Type == null)
                                   .FirstOrDefault(o => o.containsPoint(x, y));

            if (textureComponent == null)
            {
                return(true);
            }
            var amount = textureComponent.item.salePrice();

            if (!moddedPlayer.CanAfford(amount))
            {
                return(true);
            }
            var randomAnimalShopType =
                new Api.BetterFarmAnimalVariety(Mod.ReadConfig <ModConfig>()).GetRandomAnimalShopType(textureComponent.hoverText,
                                                                                                      moddedPlayer.GetOriginal());
            var farmAnimal1 = moddedPlayer.CreateFarmAnimal(randomAnimalShopType);

            SelectedStockBellsAndWhistles(ref moddedMenu);
            moddedMenu.SetOnFarm(true);
            moddedMenu.SetAnimalBeingPurchased(farmAnimal1);
            var farmAnimal2 = new Decorators.FarmAnimal(farmAnimal1);

            moddedMenu.SetPriceOfAnimal(farmAnimal2.GetPrice());
            return(false);
        }
示例#2
0
 private static void AdjustMenuHeight(ref Decorators.PurchaseAnimalsMenu moddedMenu, int iconHeight)
 {
     if (iconHeight <= 0)
     {
         return;
     }
     moddedMenu.AdjustHeightBasedOnIcons(iconHeight);
 }
示例#3
0
        public static void Postfix(ref StardewValley.Menus.PurchaseAnimalsMenu __instance,
                                   ref List <StardewValley.Object> stock)
        {
            var moddedMenu = new Decorators.PurchaseAnimalsMenu(__instance);
            var dictionary = FarmAnimals.GetCategories().Where(o => o.CanBePurchased())
                             .ToDictionary(o => o.Category, o => o.GetAnimalShopIconTexture());
            int iconHeight;

            moddedMenu.SetUpAnimalsToPurchase(stock, dictionary, out iconHeight);
            AdjustMenuHeight(ref moddedMenu, iconHeight);
            StardewValley.Menus.PurchaseAnimalsMenu.menuWidth = 640;
        }
示例#4
0
        public static bool Prefix(ref StardewValley.Menus.PurchaseAnimalsMenu __instance, ref SpriteBatch b)
        {
            var purchaseAnimalsMenu = new Decorators.PurchaseAnimalsMenu(__instance);
            var farmAnimal          = new Decorators.FarmAnimal(purchaseAnimalsMenu.GetAnimalBeingPurchased());

            if (!BellsAndWhistles.IsFaded() && purchaseAnimalsMenu.IsOnFarm())
            {
                var str = Content.FormatMoneyString(farmAnimal.GetPrice());
                var x   = Game.GetViewport().Width / 2 - Content.GetWidthOfString(str) / 2;
                var y   = (int)(18.0 * SpriteText.fontPixelZoom * 2.0);
                BellsAndWhistles.DrawScroll(b, str, x, y);
            }

            return(true);
        }
        public static bool Prefix(
            ref StardewValley.Menus.PurchaseAnimalsMenu __instance,
            ref int x,
            ref int y,
            ref bool playSound)
        {
            var moddedMenu = new Decorators.PurchaseAnimalsMenu(__instance);

            if (!IsActionable(moddedMenu) || IsClosingMenu(moddedMenu, x, y))
            {
                return(true);
            }
            var moddedPlayer = new Farmer(Game.GetPlayer());

            return(moddedMenu.IsOnFarm()
        ? HandleOnFarm(ref moddedMenu, x, y, moddedPlayer)
        : HandleStockSelection(ref moddedMenu, x, y, moddedPlayer));
        }
        private static bool HandleOnFarm(
            ref Decorators.PurchaseAnimalsMenu moddedMenu,
            int x,
            int y,
            Farmer moddedPlayer)
        {
            if (moddedMenu.IsNamingAnimal())
            {
                return(true);
            }
            var viewport   = Game.GetViewport();
            var buildingAt = Game.GetFarm().getBuildingAt(new Vector2((x + viewport.X) / 64, (y + viewport.Y) / 64));

            if (buildingAt == null)
            {
                return(true);
            }
            var animalBeingPurchased = moddedMenu.GetAnimalBeingPurchased();
            var moddedAnimal         = new Decorators.FarmAnimal(animalBeingPurchased);

            if (!moddedAnimal.CanLiveIn(buildingAt) || new Building(buildingAt).IsFull() || !moddedAnimal.CanBeNamed())
            {
                return(true);
            }
            var priceOfAnimal = moddedMenu.GetPriceOfAnimal();

            if (!moddedPlayer.CanAfford(priceOfAnimal))
            {
                return(true);
            }
            moddedAnimal.AddToBuilding(buildingAt);
            moddedMenu.SetAnimalBeingPurchased(animalBeingPurchased);
            moddedMenu.SetNewAnimalHome(null);
            moddedMenu.SetNamingAnimal(false);
            moddedPlayer.SpendMoney(priceOfAnimal);
            PurchasedAnimalBellsAndWhistles(moddedAnimal);
            return(false);
        }
 private static void SelectedStockBellsAndWhistles(ref Decorators.PurchaseAnimalsMenu moddedMenu)
 {
     BellsAndWhistles.FadeToBlack(afterFade: moddedMenu.GetOriginal().setUpForAnimalPlacement);
     BellsAndWhistles.PlaySound("smallSelect");
 }
 private static bool IsClosingMenu(Decorators.PurchaseAnimalsMenu moddedMenu, int x, int y)
 {
     return(moddedMenu.HasTappedOkButton(x, y) && moddedMenu.IsReadyToClose());
 }
 private static bool IsActionable(Decorators.PurchaseAnimalsMenu moddedMenu)
 {
     return(!BellsAndWhistles.IsFaded() && !moddedMenu.IsFrozen());
 }