// 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 }
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; } }