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;
        }
    }
Exemple #2
0
    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);
    }