コード例 #1
0
        // draw the given unit's graphic
        private void DrawGraphic(SpriteBatch sb, UnitInstance unit)
        {
            if (unit == null)
            {
                return; // don't render anything if the unit is null
            }
            // calculate the units position
            Vector2   tileCentre = boardRenderer.GetTileCentre(unit.Location);
            Rectangle dest       = new Rectangle(
                (int)tileCentre.X - boardRenderer.TileSize / 2,
                (int)tileCentre.Y - boardRenderer.TileSize / 2,
                boardRenderer.TileSize,
                boardRenderer.TileSize);
            // draw the correct sprite at the unit's position
            SpriteAtlas atlas = Engine.Instance.Content.GetAsset <SpriteAtlas>(unit.BaseUnit.IconAtlas);

            atlas.Draw(sb, unit.BaseUnit.IconKey, dest); // TODO this might be bad for performance
        }
コード例 #2
0
            public TileIcon(Tile tile, BoardRenderer boardRenderer)
            {
                Income = tile.GetIncome();
                RichText resourceIcons = new RichText();

                Icons = new List <RichText>();
                for (int inc = 0; inc < Income[(int)TileIncomeFormat.Culture]; inc++)
                {
                    Icons.Add("$(culture)".ToRichText());
                }
                for (int inc = 0; inc < Income[(int)TileIncomeFormat.Food]; inc++)
                {
                    Icons.Add("$(food)".ToRichText());
                }
                for (int inc = 0; inc < Income[(int)TileIncomeFormat.Gold]; inc++)
                {
                    Icons.Add("$(gold)".ToRichText());
                }
                for (int inc = 0; inc < Income[(int)TileIncomeFormat.Happiness]; inc++)
                {
                    Icons.Add("$(happiness)".ToRichText());
                }
                for (int inc = 0; inc < Income[(int)TileIncomeFormat.Production]; inc++)
                {
                    Icons.Add("$(production)".ToRichText());
                }
                for (int inc = 0; inc < Income[(int)TileIncomeFormat.Science]; inc++)
                {
                    Icons.Add("$(science)".ToRichText());
                }

                tileCentre = boardRenderer.GetTileCentre(tile);
                iconPos    = new List <Vector2>(Icons.Count);
                int i = 0;

                switch (Icons.Count)
                {
                case 1:
                    iconPos.Add(tileCentre - Icons[i].Measure() / 2);
                    break;

                case 2:
                    iconPos.Add(tileCentre - Icons[i].Measure() / 2 - new Vector2(Icons[i].Measure().X, 0));
                    i++;
                    iconPos.Add(tileCentre - Icons[i].Measure() / 2 + new Vector2(Icons[i].Measure().X, 0));
                    break;

                case 3:
                    iconPos.Add(tileCentre - Icons[i].Measure() / 2 - new Vector2(Icons[i].Measure().X, 0));
                    i++;
                    iconPos.Add(tileCentre - Icons[i].Measure() / 2 + new Vector2(Icons[i].Measure().X, 0));
                    i++;
                    iconPos.Add(tileCentre - Icons[i].Measure() / 2 - new Vector2(0, Icons[i].Measure().Y));
                    break;

                case 4:
                    iconPos.Add(tileCentre - Icons[i].Measure() / 2 - new Vector2(Icons[i].Measure().X, 0));
                    i++;
                    iconPos.Add(tileCentre - Icons[i].Measure() / 2 + new Vector2(Icons[i].Measure().X, 0));
                    i++;
                    iconPos.Add(tileCentre - Icons[i].Measure() / 2 - new Vector2(0, Icons[i].Measure().Y));
                    i++;
                    iconPos.Add(tileCentre - Icons[i].Measure() / 2 + new Vector2(0, Icons[i].Measure().Y));
                    break;

                case 5:
                    iconPos.Add(tileCentre - Icons[i].Measure() / 2 - new Vector2(Icons[i].Measure().X * 1.5f, 0));
                    i++;
                    iconPos.Add(tileCentre - Icons[i].Measure() / 2 + new Vector2(Icons[i].Measure().X * 1.5f, 0));
                    i++;
                    iconPos.Add(tileCentre - Icons[i].Measure() / 2 - new Vector2(0, Icons[i].Measure().Y * 1.5f));
                    i++;
                    iconPos.Add(tileCentre - Icons[i].Measure() / 2 + new Vector2(0, Icons[i].Measure().Y * 1.5f));
                    i++;
                    iconPos.Add(tileCentre - Icons[i].Measure() / 2);
                    break;
                }
            }