Exemplo n.º 1
0
        public static string CreateHtml(Treasure treasure, bool showTitle)
        {
            StringBuilder blocks = new StringBuilder();

            blocks.CreateHtmlHeader();



            if (treasure.Coin != null && treasure.Coin.GPValue != 0)
            {
                blocks.CreateSectionHeader("Coin");

                blocks.AppendOpenTag("p");
                blocks.AppendHtml(treasure.Coin.ToString());
                blocks.AppendCloseTag("p");
            }
            if (treasure.Goods.Count > 0)
            {
                SortedDictionary <string, List <Good> > groupedItems = new SortedDictionary <string, List <Good> >();

                foreach (Good t in treasure.Goods)
                {
                    if (!groupedItems.ContainsKey(t.Name))
                    {
                        groupedItems[t.Name] = new List <Good>();
                    }
                    groupedItems[t.Name].Add(t);
                }

                StringBuilder subBlocks = new StringBuilder();


                subBlocks.AppendOpenTag("p");

                bool    first    = true;
                decimal goodsVal = 0;
                foreach (List <Good> list in groupedItems.Values)
                {
                    if (!first)
                    {
                        subBlocks.AppendLineBreak();
                    }


                    if (list.Count > 1)
                    {
                        subBlocks.AppendHtml(list.Count + " x ");
                    }


                    Good good = list[0];

                    subBlocks.AppendHtml(good.Name);

                    bool firstTreasure = true;
                    subBlocks.AppendHtml(" (");
                    decimal tv      = 0;
                    bool    allSame = true;

                    foreach (Good ti in list)
                    {
                        goodsVal += ti.Value;

                        if (firstTreasure)
                        {
                            tv            = ti.Value;
                            firstTreasure = false;
                        }
                        else
                        {
                            if (tv != ti.Value)
                            {
                                allSame = false;
                            }
                        }
                    }

                    if (allSame && list.Count > 1)
                    {
                        subBlocks.AppendHtml(good.Value + " gp each)");
                    }
                    else
                    {
                        firstTreasure = true;
                        foreach (Good ti in list)
                        {
                            if (!firstTreasure)
                            {
                                subBlocks.AppendHtml(", ");
                            }
                            firstTreasure = false;

                            subBlocks.AppendHtml(ti.Value + " gp");
                        }
                        subBlocks.AppendHtml(")");
                    }

                    first = false;
                }

                subBlocks.AppendCloseTag("p");

                blocks.CreateSectionHeader("Goods (" + goodsVal + " gp)");

                blocks.Append(subBlocks.ToString());
            }
            if (treasure.Items.Count > 0)
            {
                SortedDictionary <string, List <TreasureItem> > groupedItems = new SortedDictionary <string, List <TreasureItem> >();

                foreach (TreasureItem t in treasure.Items)
                {
                    if (!groupedItems.ContainsKey(t.Name))
                    {
                        groupedItems[t.Name] = new List <TreasureItem>();
                    }
                    groupedItems[t.Name].Add(t);
                }


                StringBuilder subBlocks = new StringBuilder();


                subBlocks.AppendOpenTag("p");


                bool    first    = true;
                string  type     = "";
                decimal itemsVal = 0;
                foreach (List <TreasureItem> list in groupedItems.Values)
                {
                    TreasureItem item = list[0];

                    if (item.Type != type)
                    {
                        if (type != "")
                        {
                            subBlocks.AppendLineBreak();
                        }
                        type = item.Type;
                        subBlocks.AppendHtmlSpan("itemspace", type);
                        first = true;
                    }
                    if (first)
                    {
                        subBlocks.AppendLineBreak();
                    }

                    if (list.Count > 1)
                    {
                        subBlocks.AppendHtml(list.Count + " x ");
                    }



                    if (item.MagicItem != null)
                    {
                        subBlocks.AppendHtml(item.MagicItem.Name);
                    }
                    else if ((item.Type == "Scroll" || item.Type == "Wand" || item.Type == "Potion") && item.Spell != null)
                    {
                        if (item.Type == "Scroll")
                        {
                            subBlocks.AppendHtml("Scroll of ");
                        }
                        else if (item.Type == "Potion")
                        {
                            subBlocks.AppendHtml("Potion of ");
                        }
                        else
                        {
                            subBlocks.AppendHtml("Wand of ");
                        }

                        subBlocks.AppendHtml(item.Spell.Name);
                    }
                    else
                    {
                        subBlocks.AppendHtml(item.Name);
                    }

                    bool firstTreasure = true;
                    subBlocks.AppendHtml(" (");
                    decimal tv      = 0;
                    bool    allSame = true;

                    foreach (TreasureItem ti in list)
                    {
                        itemsVal += ti.Value;

                        if (firstTreasure)
                        {
                            tv            = ti.Value;
                            firstTreasure = false;
                        }
                        else
                        {
                            if (tv != ti.Value)
                            {
                                allSame = false;
                            }
                        }
                    }

                    if (allSame && list.Count > 1)
                    {
                        subBlocks.AppendHtml(item.Value + " gp each)");
                    }
                    else
                    {
                        firstTreasure = true;
                        foreach (TreasureItem ti in list)
                        {
                            if (!firstTreasure)
                            {
                                subBlocks.AppendHtml(", ");
                            }
                            firstTreasure = false;

                            subBlocks.AppendHtml(ti.Value + " gp");
                        }
                        subBlocks.AppendHtml(")");
                    }


                    subBlocks.AppendLineBreak();
                    first = false;
                }

                subBlocks.AppendCloseTag("p");

                blocks.CreateSectionHeader("Items (" + itemsVal + " gp)");
                blocks.Append(subBlocks.ToString());
            }

            blocks.CreateSectionHeader("Total Value " + treasure.TotalValue.ToString("0.##") + " gp");


            return(blocks.ToString());
        }
        public List <Block> CreateBlocks(Treasure treasure)
        {
            List <Block> blocks = new List <Block>();


            if (treasure.Coin != null && treasure.Coin.GPValue != 0)
            {
                blocks.AddRange(CreateSectionHeader("Coin", true));

                Paragraph coin = new Paragraph();
                coin.Inlines.Add(treasure.Coin.ToString());
                coin.Margin = new Thickness(0, 3, 0, 16);

                blocks.Add(coin);
            }
            if (treasure.Goods.Count > 0)
            {
                SortedDictionary <string, List <Good> > groupedItems = new SortedDictionary <string, List <Good> >();

                foreach (Good t in treasure.Goods)
                {
                    if (!groupedItems.ContainsKey(t.Name))
                    {
                        groupedItems[t.Name] = new List <Good>();
                    }
                    groupedItems[t.Name].Add(t);
                }


                Paragraph goods = new Paragraph();
                goods.Margin = new Thickness(0, 3, 0, 16);
                bool    first    = true;
                decimal goodsVal = 0;
                foreach (List <Good> list in groupedItems.Values)
                {
                    if (!first)
                    {
                        goods.Inlines.Add(new LineBreak());
                    }


                    if (list.Count > 1)
                    {
                        goods.Inlines.Add(list.Count + " x ");
                    }


                    Good good = list[0];

                    goods.Inlines.Add(good.Name);

                    bool firstTreasure = true;
                    goods.Inlines.Add(" (");
                    decimal tv      = 0;
                    bool    allSame = true;

                    foreach (Good ti in list)
                    {
                        goodsVal += ti.Value;

                        if (firstTreasure)
                        {
                            tv            = ti.Value;
                            firstTreasure = false;
                        }
                        else
                        {
                            if (tv != ti.Value)
                            {
                                allSame = false;
                            }
                        }
                    }

                    if (allSame && list.Count > 1)
                    {
                        goods.Inlines.Add(good.Value + " gp each)");
                    }
                    else
                    {
                        firstTreasure = true;
                        foreach (Good ti in list)
                        {
                            if (!firstTreasure)
                            {
                                goods.Inlines.Add(", ");
                            }
                            firstTreasure = false;

                            goods.Inlines.Add(ti.Value + " gp");
                        }
                        goods.Inlines.Add(")");
                    }

                    first = false;
                }


                blocks.AddRange(CreateSectionHeader("Goods (" + goodsVal + " gp)", true));

                blocks.Add(goods);
            }
            if (treasure.Items.Count > 0)
            {
                SortedDictionary <string, List <TreasureItem> > groupedItems = new SortedDictionary <string, List <TreasureItem> >();

                foreach (TreasureItem t in treasure.Items)
                {
                    if (!groupedItems.ContainsKey(t.Name))
                    {
                        groupedItems[t.Name] = new List <TreasureItem>();
                    }
                    groupedItems[t.Name].Add(t);
                }



                Paragraph items = new Paragraph();
                items.Margin = new Thickness(0, 3, 0, 16);
                bool    first    = true;
                string  type     = "";
                decimal itemsVal = 0;
                foreach (List <TreasureItem> list in groupedItems.Values)
                {
                    TreasureItem item = list[0];

                    if (item.Type != type)
                    {
                        if (type != "")
                        {
                            items.Inlines.Add(new LineBreak());
                        }
                        type = item.Type;
                        items.Inlines.Add(new Italic(new Underline(new Run(type))));
                        first = true;
                    }
                    if (first)
                    {
                        items.Inlines.Add(new LineBreak());
                    }

                    if (list.Count > 1)
                    {
                        items.Inlines.Add(list.Count + " x ");
                    }



                    if (item.MagicItem != null)
                    {
                        Hyperlink link = new Hyperlink(new Run(item.Name));
                        link.Tag         = item.Name;
                        link.Click      += new RoutedEventHandler(MagicItemLinkClicked);
                        link.DataContext = item.MagicItem;
                        ToolTip t = (ToolTip)App.Current.MainWindow.FindResource("ObjectToolTip");

                        if (t != null)
                        {
                            ToolTipService.SetShowDuration(link, 360000);
                            link.ToolTip         = t;
                            link.ToolTipOpening += new ToolTipEventHandler(link_ToolTipOpening);
                        }
                        items.Inlines.Add(link);
                    }
                    else if ((item.Type == "Scroll" || item.Type == "Wand" || item.Type == "Potion") && item.Spell != null)
                    {
                        if (item.Type == "Scroll")
                        {
                            items.Inlines.Add("Scroll of ");
                        }
                        else if (item.Type == "Potion")
                        {
                            items.Inlines.Add("Potion of ");
                        }
                        else
                        {
                            items.Inlines.Add("Wand of ");
                        }

                        Hyperlink link = new Hyperlink(new Run(item.Spell.name));
                        link.Tag         = item.Spell.name;
                        link.Click      += new RoutedEventHandler(MagicItemLinkClicked);
                        link.DataContext = item.Spell;
                        ToolTip t = (ToolTip)App.Current.MainWindow.FindResource("ObjectToolTip");

                        if (t != null)
                        {
                            ToolTipService.SetShowDuration(link, 360000);
                            link.ToolTip         = t;
                            link.ToolTipOpening += new ToolTipEventHandler(link_ToolTipOpening);
                        }
                        items.Inlines.Add(link);
                    }
                    else
                    {
                        items.Inlines.Add(item.Name);
                    }

                    bool firstTreasure = true;
                    items.Inlines.Add(" (");
                    decimal tv      = 0;
                    bool    allSame = true;

                    foreach (TreasureItem ti in list)
                    {
                        itemsVal += ti.Value;

                        if (firstTreasure)
                        {
                            tv            = ti.Value;
                            firstTreasure = false;
                        }
                        else
                        {
                            if (tv != ti.Value)
                            {
                                allSame = false;
                            }
                        }
                    }

                    if (allSame && list.Count > 1)
                    {
                        items.Inlines.Add(item.Value + " gp each)");
                    }
                    else
                    {
                        firstTreasure = true;
                        foreach (TreasureItem ti in list)
                        {
                            if (!firstTreasure)
                            {
                                items.Inlines.Add(", ");
                            }
                            firstTreasure = false;

                            items.Inlines.Add(ti.Value + " gp");
                        }
                        items.Inlines.Add(")");
                    }


                    items.Inlines.Add(new LineBreak());
                    first = false;
                }

                blocks.AddRange(CreateSectionHeader("Items (" + itemsVal + " gp)", true));
                blocks.Add(items);
            }

            blocks.AddRange(CreateSectionHeader("Total Value " + treasure.TotalValue + " gp"));


            return(blocks);
        }