make tile-texture lookup dictioanry-based instead of switch-based

GitOrigin-RevId: 2f0c215bf9e79e92f2c7a5011d8df3d9d80a0dff
This commit is contained in:
Colin McMillen 2020-02-02 10:24:21 -05:00
parent c1232d462d
commit b731e1a785

View File

@ -20,6 +20,18 @@ namespace SemiColinGames {
readonly Texture2D texture;
readonly Rectangle textureSource;
static readonly Dictionary<Terrain, Point> terrainToTilePosition =
new Dictionary<Terrain, Point>() {
{ Terrain.Grass, new Point(3, 0) },
{ Terrain.GrassL, new Point(2, 0) },
{ Terrain.GrassR, new Point(4, 0) },
{ Terrain.Rock, new Point(3, 1) },
{ Terrain.RockL, new Point(1, 2) },
{ Terrain.RockR, new Point(5, 2) },
{ Terrain.Water, new Point(9, 2) },
{ Terrain.Block, new Point(6, 3) },
};
public Tile(Texture2D texture, Terrain terrain, Rectangle position) {
this.texture = texture;
Terrain = terrain;
@ -37,27 +49,8 @@ namespace SemiColinGames {
private Rectangle TextureSource() {
int size = World.TileSize;
switch (Terrain) {
case Terrain.Grass:
return new Rectangle(3 * size, 0 * size, size, size);
case Terrain.GrassL:
return new Rectangle(2 * size, 0 * size, size, size);
case Terrain.GrassR:
return new Rectangle(4 * size, 0 * size, size, size);
case Terrain.Rock:
return new Rectangle(3 * size, 1 * size, size, size);
case Terrain.RockL:
return new Rectangle(1 * size, 2 * size, size, size);
case Terrain.RockR:
return new Rectangle(5 * size, 2 * size, size, size);
case Terrain.Water:
return new Rectangle(9 * size, 2 * size, size, size);
case Terrain.Block:
return new Rectangle(6 * size, 3 * size, size, size);
default:
Debug.WriteLine("Tile.TextureSource(): rectangle not found");
return new Rectangle();
}
Point pos = terrainToTilePosition[Terrain];
return new Rectangle(pos.X * size, pos.Y * size, size, size);
}
}