Ejemplo n.º 1
0
        public override void Draw(SpriteBatch spriteBatch, GameTime gameTime)
        {
            spriteBatch.FillRectangle(Bound, Color.White * 0.1f);
            var index = 0;

            foreach (var c in _recipies)
            {
                if (c != null)
                {
                    var canBeCrafted = c.CanBeCrafted(_inventory);

                    var p = new Point(Host.X + Scale(4), Host.Y + index * Scale(56));

                    var rect       = new Rectangle(p.X, p.Y, Host.Width - Scale(8), Scale(48));
                    var spriteRect = new Rectangle(p.X + Scale(8), p.Y + Scale(8), Scale(32), Scale(32));

                    var costIndex = 0;
                    foreach (var i in c.Costs)
                    {
                        var ressourceCout = _inventory.Count(i.Item);
                        for (var v = 0; v < i.Count; v++)
                        {
                            var costRect = new Rectangle(rect.X + Scale(48 + 16 * costIndex), rect.Y + Scale(26), Scale(16), Scale(16));
                            if (v < ressourceCout)
                            {
                                i.Item.GetSprite().Draw(spriteBatch, costRect, Color.White);
                            }
                            else
                            {
                                i.Item.GetSprite().Draw(spriteBatch, costRect, Color.White * 0.25f);
                            }
                            costIndex++;
                        }
                    }

                    if (Rise.Pointing.AreaOver(rect) && canBeCrafted && _inventory.GetFreeSpace() >= c.Quantity)
                    {
                        spriteBatch.FillRectangle(rect, Color.White * 0.05f);
                        spriteBatch.DrawRectangle(rect, Color.White * 0.05f);
                        _selectedRecipe = c;
                    }

                    if (canBeCrafted)
                    {
                        c.Result.GetSprite().Draw(spriteBatch, spriteRect, Color.White);
                        spriteBatch.DrawString(Ressources.FontRomulus, $"{c.Quantity}x {c.Result.GetName()}",
                                               new Vector2(rect.X + 48, rect.Y + 2), Color.White);
                    }
                    else
                    {
                        c.Result.GetSprite().Draw(spriteBatch, spriteRect, Color.White * 0.25f);
                        spriteBatch.DrawString(Ressources.FontRomulus, $"{c.Quantity}x {c.Result.GetName()}",
                                               new Vector2(rect.X + 48, rect.Y + 2), Color.White * 0.25f);
                    }

                    index++;
                }
            }
        }
Ejemplo n.º 2
0
        public virtual bool CanBeCrafted(ItemStorage inventory)
        {
            var result = true;

            foreach (var cost in Costs)
            {
                result &= inventory.Count(cost.Item) >= cost.Count;
            }

            return(result);
        }