private void PrintResourceType(OrderCard orderCard, CardImage cardImage)
        {
            var graphics        = cardImage.Graphics;
            var usableRectangle = cardImage.UsableRectangle;
            var cardNameFont    = new Font(headerFontFamily, orderCardHeaderFontSize, FontStyle.Bold, GraphicsUnit.Pixel);
            var suit            = orderCard.CardSuit;
            var resourceName    = suit.ResourceName().ToUpper();
            var text            = AddHairSpaces(resourceName);
            var brush           = new SolidBrush(suit.Color());
            var textMeasurement = graphics.MeasureString(text, cardNameFont, new SizeF(usableRectangle.Width, usableRectangle.Height), GraphicsUtilities.HorizontalCenterAlignment);
            var textBoxHeight   = (int)textMeasurement.Height;
            var rectangle       = new Rectangle(
                usableRectangle.X,
                usableRectangle.Bottom - textBoxHeight,
                usableRectangle.Width,
                textBoxHeight);

            GraphicsUtilities.DrawString(
                graphics,
                text,
                cardNameFont,
                brush,
                rectangle,
                GraphicsUtilities.HorizontalFarAlignment);
        }
        private void PrintRoleIconAndName(OrderCard orderCard, CardImage cardImage)
        {
            var graphics        = cardImage.Graphics;
            var usableRectangle = cardImage.UsableRectangle;

            var cardNameFont    = new Font(headerFontFamily, orderCardHeaderFontSize, FontStyle.Bold, GraphicsUnit.Pixel);
            var suit            = orderCard.CardSuit;
            var roleName        = suit.RoleName();
            var iconImageWidth  = RoleIconWidth(cardImage);
            var iconImageHeight = (int)(iconImageWidth * 190f / 140f);

            GraphicsUtilities.PrintScaledPng(
                graphics,
                $@"RoleIcons\{roleName}",
                usableRectangle.X,
                usableRectangle.Y,
                iconImageWidth,
                iconImageHeight);

            var text  = new string(roleName.ToUpper().ToCharArray().SelectMany(character => character == 'M' ? new[] { character } : new[] { character, (char)0x2009 }).ToArray());
            var brush = BrushesByCardSuit[suit];
            var singleCharacterMeasurement = graphics.MeasureString("M", cardNameFont, new SizeF(usableRectangle.Width, usableRectangle.Height), GraphicsUtilities.HorizontalNearAlignment);
            var textBoxWidth    = (int)singleCharacterMeasurement.Width;
            var xOffset         = (int)(iconImageWidth / 2.0f - textBoxWidth / 2);
            var yOffset         = iconImageHeight;
            var rectangle       = new Rectangle(usableRectangle.X + xOffset, usableRectangle.Y + yOffset, textBoxWidth, usableRectangle.Height);
            var textMeasurement = graphics.MeasureString(text, cardNameFont, new SizeF(rectangle.Width, rectangle.Height), GraphicsUtilities.HorizontalCenterAlignment);

            graphics.FillRectangle(new SolidBrush(Color.FromArgb(200, Color.White)), new Rectangle(rectangle.X, rectangle.Y, rectangle.Width, (int)textMeasurement.Height));
            GraphicsUtilities.DrawString(graphics, text, cardNameFont, brush, rectangle);
        }
        private void PrintOrderCardName(OrderCard orderCard, CardImage cardImage)
        {
            var xOffset         = RoleIconWidth(cardImage);
            var maxTextBoxWidth = CardNameWidth(cardImage);
            var yOffset         = (int)(cardImage.UsableRectangle.Width * .05f);

            PrintCardName(orderCard.CardName, cardImage, GraphicsUtilities.BlackBrush, true, xOffset, maxTextBoxWidth, yOffset);
        }
        private int PrintCardImage(OrderCard orderCard, CardImage cardImage)
        {
            var graphics      = cardImage.Graphics;
            var fullRectangle = cardImage.FullRectangle;
            var imageWidth    = fullRectangle.Width;
            var imageHeight   = GraphicsUtilities.PrintFullWidthPng(
                graphics,
                $@"CardImages\{orderCard.CardName}",
                fullRectangle.X + (orderCard.ImageIsRoughlyCentered ? CenteredImageOffset(cardImage) : 0),
                fullRectangle.Y,
                imageWidth);

            return(fullRectangle.Y + imageHeight);
        }
        public CardImage CreateOrderCardFront(OrderCard orderCard, int index)
        {
            var name      = $"{orderCard.CardName}_{index}";
            var cardImage = new CardImage(name, ImageOrientation.Portrait);

            cardImage.PrintCardBorderAndBackground(Color.White, Color.White);
            var bottomOfImage = PrintCardImage(orderCard, cardImage);

            PrintRoleIconAndName(orderCard, cardImage);
            PrintOrderCardName(orderCard, cardImage);
            PrintResourceType(orderCard, cardImage);
            PrintSetIndicator(orderCard, cardImage);
            PrintOrderCardText(orderCard, cardImage, bottomOfImage);
            PrintInfluence(orderCard, cardImage);
            return(cardImage);
        }
        private void PrintOrderCardText(OrderCard orderCard, CardImage cardImage, int bottomOfCardImage)
        {
            var usableRectangle     = cardImage.UsableRectangle;
            var textBoxWidth        = CardTextWidth(cardImage);
            var influenceImageSide  = InfluenceImageSide(cardImage);
            var textRectangleHeight = usableRectangle.Bottom - (influenceImageSide + bottomOfCardImage);
            var top = bottomOfCardImage;

            if (textRectangleHeight < 0)
            {
                top -= usableRectangle.Height / 2;
                textRectangleHeight = usableRectangle.Bottom - (influenceImageSide + top);
            }
            var xOffset = RoleIconWidth(cardImage);

            PrintCardText(orderCard.CardText, cardImage, top, textBoxWidth, textRectangleHeight, xOffset, true, GraphicsUtilities.BlackBrush);
        }
        private void PrintInfluence(OrderCard orderCard, CardImage cardImage)
        {
            var graphics           = cardImage.Graphics;
            var usableRectangle    = cardImage.UsableRectangle;
            var influenceImageSide = InfluenceImageSide(cardImage);

            var suit = orderCard.CardSuit;

            for (var i = 0; i < suit.Influence(); i++)
            {
                GraphicsUtilities.PrintScaledPng(
                    graphics,
                    $@"Influence\{suit.ColorText()}Influence",
                    usableRectangle.X + influenceImageSide * i,
                    usableRectangle.Bottom - influenceImageSide,
                    influenceImageSide,
                    influenceImageSide);
            }
        }
Exemple #8
0
        private void PrintSetIndicator(OrderCard orderCard, CardImage cardImage)
        {
            var graphics        = Graphics.FromImage(cardImage.Bitmap);
            var usableRectangle = cardImage.UsableRectangle;

            var setIndicatorCircleWidth = (int)(usableRectangle.Width * SetIndicatorPercentage);
            var setIndicatorImageSide   = (int)(setIndicatorCircleWidth * .7f);
            var suit      = orderCard.CardSuit;
            var brush     = new SolidBrush(suit.Color());
            var haloBrush = new SolidBrush(Color.FromArgb(200, Color.White));
            var set       = orderCard.CardSet;

            for (var i = 0; i < suit.Points(); i++)
            {
                var circleRectangle = new Rectangle(
                    usableRectangle.Right - setIndicatorCircleWidth,
                    usableRectangle.Y + (i * setIndicatorCircleWidth) + (i > 0 ? i * (int)(setIndicatorCircleWidth * .2f) : 0),
                    setIndicatorCircleWidth,
                    setIndicatorCircleWidth);
                var haloSize      = (int)(circleRectangle.Width * 1.2f);
                var haloRectangle = new Rectangle(
                    circleRectangle.X - (haloSize - circleRectangle.Width) / 2,
                    circleRectangle.Y - (haloSize - circleRectangle.Width) / 2,
                    haloSize,
                    haloSize);

                graphics.FillEllipse(haloBrush, haloRectangle);
                graphics.FillEllipse(brush, circleRectangle);
                if (set.HasSetImage())
                {
                    GraphicsUtilities.PrintScaledPng(
                        graphics,
                        "Misc",
                        set.SetText(),
                        circleRectangle.X + (int)(circleRectangle.Width * ((1 - .7f) / 2)),
                        circleRectangle.Y + (int)(circleRectangle.Height * ((1 - .7f) / 2)),
                        setIndicatorImageSide,
                        setIndicatorImageSide);
                }
            }
        }
Exemple #9
0
        private void PrintRoleIconAndName(OrderCard orderCard, CardImage cardImage)
        {
            var graphics        = Graphics.FromImage(cardImage.Bitmap);
            var usableRectangle = cardImage.UsableRectangle;

            var cardNameFont    = new Font(boldFontFamily, orderCardHeaderFontSize, FontStyle.Bold, GraphicsUnit.Pixel);
            var suit            = orderCard.CardSuit;
            var roleName        = suit.RoleName();
            var iconImageWidth  = RoleIconWidth(cardImage);
            var iconImageHeight = (int)(iconImageWidth * 190f / 140f);

            GraphicsUtilities.PrintScaledPng(
                graphics,
                "RoleIcons",
                roleName,
                usableRectangle.X,
                usableRectangle.Y,
                iconImageWidth,
                iconImageHeight);

            var text    = roleName.ToUpper();
            var brush   = BrushesByCardSuit[suit];
            var letters = text.ToList().Select(letter => letter.ToString()).ToList();;
            var singleCharacterMeasurement = letters.Max(letter => graphics.MeasureString(letter, cardNameFont, new SizeF(usableRectangle.Width, usableRectangle.Height), GraphicsUtilities.HorizontalNearAlignment).Width);
            var textBoxWidth = (int)singleCharacterMeasurement;
            var xOffset      = (int)(iconImageWidth / 2.0f - textBoxWidth / 2);
            var yOffset      = iconImageHeight;
            var rectangle    = new Rectangle(usableRectangle.X + xOffset, usableRectangle.Y + yOffset, textBoxWidth, usableRectangle.Height);
            var fragments    = letters
                               .Select(character => new TextFragment
            {
                Brush         = brush,
                Font          = cardNameFont,
                ForcesNewline = true,
                Text          = character
            })
                               .ToList();

            GraphicsUtilities.DrawFragmentsCentered(graphics, fragments, rectangle, 200, false, false);
        }
Exemple #10
0
 private static IEnumerable <CardImage> CreateCardsForOrderCard(GloryToRomeImageCreator imageCreator, OrderCard orderCard)
 {
     return(Enumerable.Range(0, orderCard.CardSuit.CardCountPerDeck())
            .Select(index => imageCreator.CreateOrderCardFront(orderCard, index))
            .ToList());
 }