public override ISimplePlacement GetPlacement(IPurchasable purchasable, IResourceContainer resources)
        {
            var placement = new StructurePlacement(() => resources.HasEnough(purchasable.Cost) ? null : "Not enough resources");

            placement.OnPlaced += OnPlaced;
            return(placement);
        }
예제 #2
0
 public void Assign(IContentCachedPrefab prefab, Action onSelected)
 {
     _prefab      = prefab;
     _purchasable = _prefab.GetCache().GetComponent <IPurchasable>();
     _onSelected  = onSelected;
     Init();
 }
예제 #3
0
    public void Buy(IPurchasable item, int quantity)
    {
        bool purchased = false;

        if (!CanBuy(item, quantity))
        {
            return;
        }

        switch (item.ItemType)
        {
        case ItemType.Food:
            uIManager.foodInventory += item.Quantity * quantity;
            purchased = true;
            break;

        case ItemType.Medicine:
            uIManager.medicineInventory += item.Quantity * quantity;
            purchased = true;
            break;
        }

        //Subtract the cost from your budget if we made the purchase.
        if (purchased)
        {
            uIManager.budget.budget -= item.Price * quantity;
            RefreshView();
        }
    }
 public virtual void SetPurchasable(IPurchasable purchasable)
 {
     this.purchasable       = purchasable;
     icon.sprite            = purchasable.Icon;
     nameLabel.text         = purchasable.Name;
     costLabel.text         = purchasable.Cost.ToString();
     buyButton.interactable = purchasable.CanPurchase();
 }
예제 #5
0
 public void AddProduct(string type, IPurchasable product)
 {
     if (!Products.ContainsKey(type))
     {
         Products.Add(type, new List <IPurchasable>());
     }
     Products[type].Add(product);
 }
예제 #6
0
        protected Purchasable(IPurchasable copyFrom)
        {
            Name   = copyFrom.Name;
            Symbol = copyFrom.Symbol;

            BuildTime = copyFrom.BuildTime;
            Cost      = new Dictionary <ResourceType, int>(copyFrom.Cost);

            Prerequisite = copyFrom.Prerequisite;
        }
예제 #7
0
    public void Purchase(IPurchasable purchasable)
    {
        int cost = purchasable.Cost;

        if (cost <= localPlayerStats.Gold)
        {
            localPlayerStats.Gold -= cost;
            purchasable.OnPurchased();
            UpdateUi();
        }
    }
예제 #8
0
 public void Purchase(string selection)
 {
     for (int i = 0; i < Machine.ItemList.Count; i++)
     {
         IPurchasable item = Machine.ItemList[i];
         if (item.Location == selection.ToUpper())
         {
             Machine.ItemList.Remove(item);
         }
     }
     return;
 }
예제 #9
0
    public override void SetPurchasable(IPurchasable purchasable)
    {
        base.SetPurchasable(purchasable);

        upgradePurchasable = purchasable as IUpgradePurchasable;
        int currentLevel = upgradePurchasable.CurrentUpgrade;

        for (int i = 0; i < upgradeIcons.Count; i++)
        {
            upgradeIcons[i].color = i < currentLevel ? hasPurchasedColor : notPurchasedColor;
        }
    }
예제 #10
0
        public override void HandleMouseMovingEvent(object sender, MouseMotionEventArgs e)
        {
            // get the map cell that the user's mouse is hovering over
            if (userInterfaceManager.CurrentState == UserInterfaceState.PlaceEquipmentActive || userInterfaceManager.CurrentState == UserInterfaceState.PlaceRoomActive)
            {
                IPurchasable selectedPurchasable = userInterfaceManager.SelectedPurchasableItem;
                hoveredMapCells = GetHoveredMapCellAndNeighbors(e.RelativeToWindowX, e.RelativeToWindowY, selectedPurchasable.HorizontalMapCellCount, selectedPurchasable.VerticalMapCellCount);
                userInterfaceManager.SetHoveredMapCells(hoveredMapCells);
            }

            userInterfaceManager.HandleMouseMovingEvent(sender, e);
        }
예제 #11
0
        internal string GetPurchasables()
        {
            var list = "THANK YOU FOR PURCHASING \n";
            List <IPurchasable> items = new List <IPurchasable>();

            for (int i = 0; i < items.Count; i++)
            {
                IPurchasable item = items[i];
                list += $"{i + 1}. {item.Price}";
            }
            return(list);
        }
예제 #12
0
    IEnumerator BuyWeapon()
    {
        int rand = UnityEngine.Random.Range(0, purchasables.Length);

        IPurchasable weapon = purchasables[rand];

        if (aiCurrency.AttemptPurchase(weapon.GetCost()))
        {
            weapon.Buy();
        }

        yield return(new WaitForSeconds(8f));

        StartCoroutine("BuyWeapon");
    }
예제 #13
0
        public void GetPurchasables()
        {
            Messages.Add("Available to Buy");
            for (int i = 0; i < ForSale.Count; i++)
            {
                IPurchasable forSale = ForSale[i];
                Messages.Add($"{i + 1}");

                IPhysical carSale = forSale as IPhysical;
                if (carSale != null)
                {
                    carSale.Make;
                }
            }
            Messages.Add("Type a number to see details or Q to quit");
        }
예제 #14
0
        public static async Task PurchaseAsync(this IPurchasable self)
        {
            var invokeResult = default(bool?);

            self.Purchase(
                () => invokeResult = true,
                () => invokeResult = false);

            while (!invokeResult.HasValue)
            {
                await Task.Delay(MillisecondsDelay);
            }

            if (!invokeResult.Value)
            {
                throw new InvalidOperationException();
            }
        }
예제 #15
0
        public void Handle(IContentCachedPrefab prefab)
        {
            GameObject         go          = prefab.GetCache();
            IPurchasable       purchasable = go.GetComponent <IPurchasable>();
            IResourceContainer resources   = GetComponent <IResourceContainer>();

            if (resources.HasEnough(purchasable.Cost))
            {
                GameObject instance = prefab.Instantiate();
                ReflectionUtils.DynamicBroadcastInvoke(instance, "OnInstantiated", true); // Definitively hacky, but better than immidiate alternative.
                instance.SetActive(true);

                ISimplePlacement placement = GetPlacement(purchasable, resources);
                placement.Pickup(instance);

                placement.OnPlaced += (obj) => resources.TrySpend(purchasable.Cost);
                PlacementController.Instance.TakePlacement(placement);
            }
        }
        internal string GetPurchasables()
        {
            var list = "ORDER FROM THE FOLLOWING: \n";
            List <IPurchasable> items = new List <IPurchasable>();

            items.AddRange(Snacks);
            // NOTE filter all rentables to only inclue things that can be purchased
            var purchasableRents = Rentables.FindAll(r => r is IPurchasable && r.IsAvailable);
            // NOTE Select functions like .map
            var rentItems = purchasableRents.Select(elem => (IPurchasable)elem);

            items.AddRange(rentItems);

            for (int i = 0; i < items.Count; i++)
            {
                IPurchasable item = items[i];
                list += $"{i + 1}. {item.Name} - ${item.Price}\n";
            }
            return(list);
        }
예제 #17
0
        public async Task AddItemToWishlistAsync(WishlistItemViewModel wishlistItemVm, int customerID)
        {
            IPurchasable item    = null;
            int?         songID  = null;
            int?         albumID = null;

            switch (wishlistItemVm.Category)
            {
            case nameof(Song):
                item = await _context.Songs
                       .AsNoTracking()
                       .Where(s => s.ID == wishlistItemVm.ItemID)
                       .FirstOrDefaultAsync();

                songID = item.ID;
                break;

            case nameof(Album):
                item = await _context.Albums
                       .AsNoTracking()
                       .Where(a => a.ID == wishlistItemVm.ItemID)
                       .FirstOrDefaultAsync();

                albumID = item.ID;
                break;

            default:
                break;
            }

            var wishlist = await _context.Customers
                           .Include(c => c.Wishlist)
                           .ThenInclude(c => c.WishlistItem)
                           .Where(c => c.ID == customerID)
                           .Select(c => c.Wishlist)
                           .FirstOrDefaultAsync();

            wishlist.AddWishlistItem(songID, albumID, item.Price);
            await _context.SaveChangesAsync();
        }
예제 #18
0
 public IPurchasable Vend(string input)
 {
     Console.Clear();
     if (int.TryParse(input, out int index))
     {
         index--;
         if (index > -1 && index < Items.Count)
         {
             IPurchasable item = Items[index];
             if (item.Quantity > 0 && item.Price < TransactionTotal)
             {
                 System.Console.WriteLine("Vmmmmmmmmmmmmmm");
                 item.Quantity--;
                 TransactionTotal -= item.Price;
                 System.Console.WriteLine($"Enjoy your {item.Name}");
                 return(item);
             }
         }
     }
     System.Console.WriteLine("Invalid Selection");
     return(null);
 }
        public bool Buy(IPurchasable purchasable, Action OnPurchaseSuccess, Action OnPurchaseFailed)
        {
            for (int i = 0; i < virtualCurrencies.Length; i++)
            {
                if (virtualCurrencies[i].Name == purchasable.CurrencyName)
                {
                    if (virtualCurrencies[i].value >= purchasable.Price)
                    {
                        virtualCurrencies[i].value -= purchasable.Price;
                        purchasable.Purchased();
                        OnPurchaseSuccess?.Invoke();
                        return(true);
                    }
                    else
                    {
                        OnPurchaseFailed?.Invoke();
                        return(false);
                    }
                }
            }

            OnPurchaseFailed?.Invoke();
            return(false);
        }
 public void Purchase(IPurchasable purchasable) => CurrencyController.AlterCurrency((float)-purchasable.Cost);
예제 #21
0
 public abstract ISimplePlacement GetPlacement(IPurchasable purchasable, IResourceContainer resources);
예제 #22
0
 public void AddFoodToOrder(IPurchasable food)
 {
     _Order.AddPurchased(food);
 }
예제 #23
0
 public bool CanBuy(IPurchasable item, int quantity = 1)
 {
     return(item.Price * quantity <= uIManager.budget.budget);
 }
예제 #24
0
 public PurchasableItemSelectedEventArgs(IPurchasable purchasableItem)
 {
     PurchasableItem = purchasableItem;
 }
예제 #25
0
 public ButtonConfirmWindowClickedEventArgs(IPurchasable purchasableItem)
 {
     PurchasableItem = purchasableItem;
 }
 public bool CanPurchase(IPurchasable purchasable) => CurrencyController.Model.Currency > purchasable.Cost;
 public PurchasableItemPlacedEventArgs(IPurchasable purchasableItem, IReadOnlyList <MapCell> hoveredMapCells)
 {
     PurchasableItem = purchasableItem;
     HoveredMapCells = hoveredMapCells;
 }
예제 #28
0
 public ButtonMenuItem(IPurchasable purchasableItem)
 {
     this.purchasableItem = purchasableItem;
     base.Clicked        += OnClicked;
     base.Hovered        += OnHovered;
 }
예제 #29
0
 public void AddItem(IPurchasable item)
 {
     Items.Add(item);
     Total += item.Price;
 }