public TerrainTile(TerrainTile.TerrainType type) { Type = type; switch (type) { case TerrainTile.TerrainType.Bridge: Movecost = 1; MoveGroup = MoveType.Transition; break; case TerrainTile.TerrainType.Castle: Movecost = 1; MoveGroup = MoveType.Normal; break; case TerrainTile.TerrainType.Forest: Movecost = 2; MoveGroup = MoveType.Flying; break; case TerrainTile.TerrainType.Grass: Movecost = 2; MoveGroup = MoveType.Normal; break; case TerrainTile.TerrainType.Mountain: Movecost = 2; MoveGroup = MoveType.Flying; break; case TerrainTile.TerrainType.Road: Movecost = 1; MoveGroup = MoveType.Transition; break; case TerrainTile.TerrainType.Water: Movecost = 1; MoveGroup = MoveType.WaterPassable; break; } }
public void LoadGame(string name, WorldManager manager) { CreateSchema(); TerrainTile[,] world; List <Herbivore> herbivores = new List <Herbivore>(); List <Carnivore> carnivores = new List <Carnivore>(); int size = 0; int game_id = 0; using (var conn = new SqliteConnection(StaticData.dbPath)) { conn.Open(); using (var cmd = conn.CreateCommand()) { cmd.CommandType = CommandType.Text; cmd.CommandText = "SELECT id, size_factor FROM saved_games WHERE name=@Name"; cmd.Parameters.Add(new SqliteParameter() { ParameterName = "Name", Value = name }); using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { game_id = reader.GetInt32(0); size = reader.GetInt32(1); } } int width = (int)System.Math.Pow(2, size + 1); int height = (int)System.Math.Pow(2, size); world = new TerrainTile[width, height]; cmd.CommandText = "SELECT x, y, type, height, temperature, nutrition, growth_rate, regrowth_left FROM terrain_tiles WHERE game_id=@Game"; cmd.Parameters.Clear(); cmd.Parameters.Add(new SqliteParameter() { ParameterName = "Game", Value = game_id }); using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { int x = reader.GetInt32(0); int y = reader.GetInt32(1); TerrainTile.TerrainType type = (TerrainTile.TerrainType)reader.GetInt32(2); float h = reader.GetFloat(3); float t = reader.GetFloat(4); float n = reader.GetFloat(5); float g = reader.GetFloat(6); int r = reader.GetInt32(7); world[x, y] = new TerrainTile() { height = h, temperature = t, nutrition = n, growth_rate = g, regrowth_left = r, type = type, grazers = new List <Herbivore>(), predators = new List <Carnivore>(), location = new Vector2(x, y) }; } } cmd.CommandText = "SELECT x, y, movement, perception, population, starvation_threshold, fertility, food_efficiency, size, max_growth_factor FROM herbivores WHERE game_id=@Game"; cmd.Parameters.Clear(); cmd.Parameters.Add(new SqliteParameter() { ParameterName = "Game", Value = game_id }); using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { int x = reader.GetInt32(0); int y = reader.GetInt32(1); float m = reader.GetFloat(2); float per = reader.GetFloat(3); int pop = reader.GetInt32(4); float s = reader.GetFloat(5); float f = reader.GetFloat(6); float fe = reader.GetFloat(7); float siz = reader.GetFloat(8); float mgf = reader.GetFloat(9); herbivores.Add(new Herbivore() { location = new Vector2(x, y), movement = m, perception = per, population = pop, starvation_threshold = s, fertility = f, food_efficiency = fe, size = siz, max_growth_factor = mgf }); } } cmd.CommandText = "SELECT x, y, movement, perception, population, starvation_threshold, fertility, last_meal_size FROM carnivores WHERE game_id=@Game"; cmd.Parameters.Clear(); cmd.Parameters.Add(new SqliteParameter() { ParameterName = "Game", Value = game_id }); using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { int x = reader.GetInt32(0); int y = reader.GetInt32(1); float m = reader.GetFloat(2); float per = reader.GetFloat(3); int pop = reader.GetInt32(4); float s = reader.GetFloat(5); float f = reader.GetFloat(6); float lms = reader.GetFloat(7); carnivores.Add(new Carnivore() { location = new Vector2(x, y), movement = m, perception = per, population = pop, starvation_threshold = s, fertility = f, last_meal_size = lms }); } } } } manager.LoadWorld(world, herbivores, carnivores); }