Browse Source

make char-to-terrain lookup dictionary-based instead of switch-based

GitOrigin-RevId: 0d81e95bf0
master
Colin McMillen 4 years ago
parent
commit
1f7da03515
  1. 47
      Shared/World.cs

47
Shared/World.cs

@ -90,6 +90,18 @@ namespace SemiColinGames {
====================> <====..========..======..=========..=========> <=============> <==============================================================> <=======..==============..==============================
....................] [............................................] [.............] [..............................................................] [.......................................................";
private static readonly Dictionary<char, Terrain> charToTerrain =
new Dictionary<char, Terrain>() {
{ '=', Terrain.Grass },
{ '<', Terrain.GrassL },
{ '>', Terrain.GrassR },
{ '.', Terrain.Rock },
{ '[', Terrain.RockL },
{ ']', Terrain.RockR },
{ '~', Terrain.Water },
{ 'X', Terrain.Block }
};
public World(Texture2D texture) {
var tilesList = new List<Tile>();
string[] worldDesc = worldString.Split('\n');
@ -98,39 +110,14 @@ namespace SemiColinGames {
Debug.WriteLine("world size: {0}x{1}", tileWidth, tileHeight);
for (int i = 0; i < tileWidth; i++) {
for (int j = 0; j < tileHeight; j++) {
Terrain? terrain = null;
if (i < worldDesc[j].Length) {
switch (worldDesc[j][i]) {
case '=':
terrain = Terrain.Grass;
break;
case '<':
terrain = Terrain.GrassL;
break;
case '>':
terrain = Terrain.GrassR;
break;
case '.':
terrain = Terrain.Rock;
break;
case '[':
terrain = Terrain.RockL;
break;
case ']':
terrain = Terrain.RockR;
break;
case '~':
terrain = Terrain.Water;
break;
case 'X':
terrain = Terrain.Block;
break;
char key = worldDesc[j][i];
if (charToTerrain.ContainsKey(key)) {
Terrain terrain = charToTerrain[key];
var position = new Rectangle(i * TileSize, j * TileSize, TileSize, TileSize);
tilesList.Add(new Tile(texture, terrain, position));
}
}
if (terrain != null) {
var position = new Rectangle(i * TileSize, j * TileSize, TileSize, TileSize);
tilesList.Add(new Tile(texture, terrain.Value, position));
}
}
}
tiles = tilesList.ToArray();

Loading…
Cancel
Save