示例#1
0
        void CalculateBackgroundImage()
        {
            cachedBackgroundImage = new Bitmap(this.metrics.OutterBounds.Width, this.metrics.OutterBounds.Height);

            using Graphics g = Graphics.FromImage(cachedBackgroundImage);
            g.TranslateTransform(-metrics.OutterBounds.X, -metrics.OutterBounds.Y);

            PaintLabels(g);
            var iconDrawer = new IconDrawer(g, imageDrawer);

            iconDrawer.DrawTheIcon(new IconDescriptor {
                BackgroundImg = Img.Coin
            }, metrics.BigCoin);

            foreach (var track in EnergyTrack)
            {
                iconDrawer.DrawTheIcon(track.Icon, metrics.SlotLookup[track].TrackRect);
            }

            foreach (var track in this.CardTrack)
            {
                iconDrawer.DrawTheIcon(track.Icon, metrics.SlotLookup[track].TrackRect);
            }
        }
示例#2
0
        void DrawAction(GrowthActionFactory action, RectangleF rect)
        {
            if (action is JaggedEarth.RepeatableActionFactory repeatableActionFactory &&
                repeatableActionFactory.Inner is not JaggedEarth.GainTime
                )
            {
                action = repeatableActionFactory.Inner;
            }

            if (action is GainEnergy ge)
            {
                GainEnergy(rect, ge.Delta); return;
            }

            if (action is ReclaimAll)
            {
                DrawIconInCenter(rect, Img.ReclaimAll); return;
            }

            if (action is ReclaimN)
            {
                DrawIconInCenter(rect, Img.Reclaim1); return;
            }

            if (action is ReclaimHalf)
            {
                DrawIconInCenter(rect, Img.ReclaimHalf); return;
            }

            if (action is DrawPowerCard)
            {
                DrawIconInCenter(rect, Img.GainCard); return;
            }

            if (action is PlacePresence pp)
            {
                PlacePresence(rect, pp.Range, pp.FilterEnum); return;
            }

            if (action is MovePresence mp)
            {
                MovePresence(rect, mp.Range); return;
            }

            switch (action.Name)
            {
            case "PlayExtraCardThisTurn(2)": AdditionalPlay(rect, 2); break;

            case "PlayExtraCardThisTurn(1)": AdditionalPlay(rect, 1); break;

            // Ocean
            case "PlaceInOcean":          PlacePresence(rect, null, Target.Ocean); break;

            case "GatherPresenceIntoOcean": DrawIconInCenter(rect, Img.GatherToOcean); break;

            case "PushPresenceFromOcean": DrawIconInCenter(rect, Img.Pushfromocean); break;

            // Heart of the WildFire
            case "EnergyForFire": DrawIconInCenter(rect, Img.Oneenergyfire); break;

            // Lure of the Deep Wilderness
            case "GainElement(Moon,Air,Plant)": GainElement(rect, Element.Moon, Element.Air, Element.Plant); break;

            // Fractured Dates
            case "GainElement(Air)": GainElement(rect, Element.Air); break;

            case "GainElement(Moon)": GainElement(rect, Element.Moon); break;

            case "GainElement(Sun)": GainElement(rect, Element.Sun); break;

            case "GainTime(2)":    GainTime(rect); break;

            case "GainTime(1)x2":  Gain1TimeOr2CardPlaysX2(rect); break;

            case "GainTime(1)x3":  Gain1TimeOr2EnergyX3(rect); break;

            case "DrawPowerCardFromDaysThatNeverWere": DrawImage(rect, Img.FracturedDays_DrawDtnw); break;

            // Starlight Seeks Its Form
            case "MakePowerFast": DrawIconInCenter(rect, Img.Icon_Fast); break;

            // Grinning Trickster
            case "GainEnergyEqualToCardPlays": DrawIconInCenter(rect, Img.GainEnergyEqualToCardPlays); break;

            // Stones Unyielding Defiance
            case "GainElements(Earth,Earth)":
                iconDrawer.DrawTheIcon(new IconDescriptor {
                    ContentImg  = Img.Token_Earth,
                    ContentImg2 = Img.Token_Earth,
                },
                                       rect
                                       );
                break;                         // !!! this is drawn as an OR, layer them and make them an AND

            // Many Minds
            case "Gather1Beast": DrawIconInCenter(rect, Img.Land_Gather_Beasts); break;

            case "PlacePresenceAndBeast":
                PlacePresence(rect, 3, Target.Any);
                DrawIconInCenter(rect.InflateBy(-rect.Width * .2f), Img.Icon_Beast);
                break;

            case "ApplyDamage": DrawIconInCenter(rect, Img.Damage_2); break;

            default:
                graphics.FillRectangle(Brushes.Goldenrod, Rectangle.Inflate(rect.ToInts(), -5, -5));
                break;
            }
        }