示例#1
0
    public static GameObject[,] load(string filePath)
    {
        var sizeY = 0;

        using (var reader = File.OpenText(filePath))
        {
            while (reader.ReadLine() != null)
            {
                sizeY++;
            }
        }
        var    contentreader = new StreamReader(File.OpenRead(filePath));
        string line          = contentreader.ReadLine();

        string[] values = line.Split(';');
        GameObject[,] result = new GameObject[values.Length, sizeY];
        GameObject father = GameObject.Find("tileHolder");

        bool scndRow = false;

        System.Random nRand   = new System.Random();
        double        randNum = nRand.NextDouble();



        for (int y = 0; y < sizeY; y++)
        {
            for (int x = 0; x < values.Length; x++)
            {
                result[x, y] = new GameObject("Tile: " + x.ToString() + " " + y.ToString());
                result[x, y].transform.parent = father.transform;
                Vector3 position = new Vector3();
                if (scndRow)
                {
                    position = new Vector3(0.866f + x * 1.732f, 0, y * 1.5f);
                }
                else
                {
                    position = new Vector3(x * 1.732f, 0, y * 1.5f);
                }


                Tile tempTile = result[x, y].AddComponent <Tile>();
                int  typeInt  = Convert.ToInt32(values[x]);
                switch (typeInt)
                {
                case 0: tempTile.tile_type = tileType.Desert; break;

                case 1: tempTile.tile_type = tileType.Forrest; break;

                case 2: tempTile.tile_type = tileType.Mountain; break;

                case 3: tempTile.tile_type = tileType.Oasis; break;

                default: break;
                }

                GameObject undiscovered = (GameObject)Instantiate(Initialisation.undiscoveredTile);
                undiscovered.transform.name   = "undiscovered";
                undiscovered.transform.parent = result[x, y].transform;
                undiscoveredTile ut = undiscovered.AddComponent <undiscoveredTile>();
                ut.position = new HexaPos(x, y);
                GameObject discovered;

                randNum = nRand.NextDouble();
                if (tempTile.tile_type == tileType.Desert)
                {
                    if (randNum < 0.33)
                    {
                        tempTile.genField = 1;
                        discovered        = (GameObject)Instantiate(Initialisation.sandTile_1);
                    }
                    else if (randNum < 0.66)
                    {
                        tempTile.genField = 2;
                        discovered        = (GameObject)Instantiate(Initialisation.sandTile_2);
                    }
                    else
                    {
                        tempTile.genField = 3;
                        discovered        = (GameObject)Instantiate(Initialisation.sandTile_3);
                    }
                }
                else if (tempTile.tile_type == tileType.Forrest)
                {
                    if (randNum < 0.33)
                    {
                        tempTile.genField = 1;
                        discovered        = (GameObject)Instantiate(Initialisation.forrestTile_1);
                    }
                    else if (randNum < 0.66)
                    {
                        tempTile.genField = 2;
                        discovered        = (GameObject)Instantiate(Initialisation.forrestTile_2);
                    }
                    else
                    {
                        tempTile.genField = 3;
                        discovered        = (GameObject)Instantiate(Initialisation.forrestTile_3);
                    }
                }
                else if (tempTile.tile_type == tileType.Mountain)
                {
                    if (randNum < 0.33)
                    {
                        tempTile.genField = 1;
                        discovered        = (GameObject)Instantiate(Initialisation.mountainTile_1);
                    }
                    else if (randNum < 0.66)
                    {
                        tempTile.genField = 2;
                        discovered        = (GameObject)Instantiate(Initialisation.mountainTile_2);
                    }
                    else
                    {
                        tempTile.genField = 3;
                        discovered        = (GameObject)Instantiate(Initialisation.mountainTile_3);
                    }
                }
                else
                {
                    if (randNum < 0.33)
                    {
                        tempTile.genField = 1;
                        discovered        = (GameObject)Instantiate(Initialisation.oasisTile_1);
                    }
                    else if (randNum < 0.66)
                    {
                        tempTile.genField = 2;
                        discovered        = (GameObject)Instantiate(Initialisation.oasisTile_2);
                    }
                    else
                    {
                        tempTile.genField = 3;
                        discovered        = (GameObject)Instantiate(Initialisation.oasisTile_3);
                    }
                }
                discoveredTile dT = discovered.AddComponent <discoveredTile>();
                dT.position = new HexaPos(x, y);
                discovered.transform.name   = "actualTile";
                discovered.transform.parent = result[x, y].transform;
                undiscovered.AddComponent <MeshCollider>();
                discovered.AddComponent <MeshCollider>();
                discovered.SetActive(false);
                result[x, y].transform.position = position;
            }
            line = contentreader.ReadLine();
            if (line != null)
            {
                values = line.Split(';');
            }
            if (scndRow)
            {
                scndRow = false;
            }
            else
            {
                scndRow = true;
            }
        }



        landscape = result;
        return(result);
    }
示例#2
0
    public static GameObject[,] createLandscape(int size_X, int size_Y, double chance_Forest = 0.15, double chance_Mountain = 0.05, double chance_Oasis = 0.01, double chanceboost = 0.2)
    {
        GameObject[,] result = new GameObject[size_X, size_Y];
        GameObject father  = GameObject.Find("tileHolder");
        bool       scndRow = false;

        System.Random nRand   = new System.Random();
        double        randNum = nRand.NextDouble();

        if ((chance_Forest < 0 || chance_Mountain < 0 || chance_Oasis < 0) || (chance_Oasis + chance_Mountain + chance_Forest) > 1)
        {
            return(null);
        }
        double tempChance_Forest   = chance_Forest;
        double tempChance_Mountain = chance_Mountain;
        double tempChance_Oasis    = chance_Oasis;


        for (int y = 0; y < size_Y; y++)
        {
            for (int x = 0; x < size_X; x++)
            {
                result[x, y] = new GameObject("Tile: " + x.ToString() + " " + y.ToString());
                result[x, y].transform.parent = father.transform;
                Vector3 position = new Vector3();
                if (scndRow)
                {
                    position = new Vector3(0.866f + x * 1.732f, 0, y * 1.5f);
                }
                else
                {
                    position = new Vector3(x * 1.732f, 0, y * 1.5f);
                }


                Tile tempTile = result[x, y].AddComponent <Tile>();
                randNum = nRand.NextDouble();
                //Ab hier erfolgt die Zuteilung des Chancesboost.
                if (x == 0 && y == 0)
                {
                    if (randNum < chance_Forest)
                    {
                        tempTile.tile_type = tileType.Forrest;
                    }
                    else if (randNum < (chance_Forest + chance_Mountain))
                    {
                        tempTile.tile_type = tileType.Mountain;
                    }
                    else if (randNum < (chance_Forest + chance_Mountain + chance_Oasis))
                    {
                        tempTile.tile_type = tileType.Oasis;
                    }
                    else
                    {
                        tempTile.tile_type = tileType.Desert;
                    }
                }
                else if (x == 0 && y != 0)
                {
                    Tile t1 = result[x, (y - 1)].GetComponent <Tile>();
                    if (scndRow)
                    {
                        Tile t2 = result[(x + 1), (y - 1)].GetComponent <Tile>();
                        if (t1.tile_type == tileType.Forrest || t2.tile_type == tileType.Forrest)
                        {
                            tempChance_Forest = chance_Forest + chanceboost;
                        }
                        else
                        {
                            tempChance_Forest = chance_Forest;
                        }
                        if (t1.tile_type == tileType.Mountain || t2.tile_type == tileType.Mountain)
                        {
                            tempChance_Mountain = chance_Mountain + chanceboost;
                        }
                        else
                        {
                            tempChance_Mountain = chance_Mountain;
                        }
                        if (t1.tile_type == tileType.Oasis || t2.tile_type == tileType.Oasis)
                        {
                            tempChance_Oasis = chance_Oasis;
                        }
                        else
                        {
                            tempChance_Oasis = chance_Oasis;
                        }
                    }
                    else
                    {
                        if (t1.tile_type == tileType.Forrest)
                        {
                            tempChance_Forest = chance_Forest + chanceboost;
                        }
                        else
                        {
                            tempChance_Forest = chance_Forest;
                        }
                        if (t1.tile_type == tileType.Mountain)
                        {
                            tempChance_Mountain = chance_Mountain + chanceboost;
                        }
                        else
                        {
                            tempChance_Mountain = chance_Mountain;
                        }
                        if (t1.tile_type == tileType.Oasis)
                        {
                            tempChance_Oasis = chance_Oasis;
                        }
                        else
                        {
                            tempChance_Oasis = chance_Oasis;
                        }
                    }
                }
                else if (y == 0 && x != 0)
                {
                    Tile t1 = result[(x - 1), y].GetComponent <Tile>();
                    if (t1.tile_type == tileType.Forrest)
                    {
                        tempChance_Forest = chance_Forest + chanceboost;
                    }
                    else
                    {
                        tempChance_Forest = chance_Forest;
                    } if (t1.tile_type == tileType.Mountain)
                    {
                        tempChance_Mountain = chance_Mountain + chanceboost;
                    }
                    else
                    {
                        tempChance_Mountain = chance_Mountain;
                    }
                    if (t1.tile_type == tileType.Oasis)
                    {
                        tempChance_Oasis = chance_Oasis;
                    }
                    else
                    {
                        tempChance_Oasis = chance_Oasis;
                    }
                }
                else if (x != (size_X - 1) && y != 0)
                {
                    Tile t1 = result[(x - 1), y].GetComponent <Tile>();
                    Tile t2 = result[x, (y - 1)].GetComponent <Tile>();
                    Tile t3;
                    if (scndRow)
                    {
                        t3 = result[(x + 1), (y - 1)].GetComponent <Tile>();
                    }
                    else
                    {
                        t3 = result[(x - 1), (y - 1)].GetComponent <Tile>();
                    }
                    if (t1.tile_type == tileType.Forrest || t2.tile_type == tileType.Forrest || t3.tile_type == tileType.Forrest)
                    {
                        tempChance_Forest = chance_Forest + chanceboost;
                    }
                    else
                    {
                        tempChance_Forest = chance_Forest;
                    }
                    if (t1.tile_type == tileType.Mountain || t2.tile_type == tileType.Mountain || t3.tile_type == tileType.Mountain)
                    {
                        tempChance_Mountain = chance_Mountain + chanceboost;
                    }
                    else
                    {
                        tempChance_Mountain = chance_Mountain;
                    }
                    if (t1.tile_type == tileType.Oasis || t2.tile_type == tileType.Oasis || t3.tile_type == tileType.Oasis)
                    {
                        tempChance_Oasis = chance_Oasis;
                    }
                    else
                    {
                        tempChance_Oasis = chance_Oasis;
                    }
                }
                else
                {
                    Tile t1 = result[(x - 1), y].GetComponent <Tile>();
                    Tile t2 = result[x, (y - 1)].GetComponent <Tile>();

                    if (scndRow)
                    {
                    }
                    else
                    {
                    }
                    if (t1.tile_type == tileType.Forrest || t2.tile_type == tileType.Forrest)
                    {
                        tempChance_Forest = chance_Forest + chanceboost;
                    }
                    else
                    {
                        tempChance_Forest = chance_Forest;
                    }
                    if (t1.tile_type == tileType.Mountain || t2.tile_type == tileType.Mountain)
                    {
                        tempChance_Mountain = chance_Mountain + chanceboost;
                    }
                    else
                    {
                        tempChance_Mountain = chance_Mountain;
                    }
                    if (t1.tile_type == tileType.Oasis || t2.tile_type == tileType.Oasis)
                    {
                        tempChance_Oasis = chance_Oasis;
                    }
                    else
                    {
                        tempChance_Oasis = chance_Oasis;
                    }
                }
                if (x != 0 || y != 0)
                { //Zuweisung des Tiletypes
                    if (randNum < tempChance_Forest)
                    {
                        tempTile.tile_type = tileType.Forrest;
                    }
                    else if (randNum < (tempChance_Forest + tempChance_Mountain))
                    {
                        tempTile.tile_type = tileType.Mountain;
                    }
                    else if (randNum < (tempChance_Forest + tempChance_Mountain + tempChance_Oasis))
                    {
                        tempTile.tile_type = tileType.Oasis;
                    }
                    else
                    {
                        tempTile.tile_type = tileType.Desert;
                    }
                }

                GameObject undiscovered = (GameObject)Instantiate(Initialisation.undiscoveredTile);
                undiscovered.transform.name   = "undiscovered";
                undiscovered.transform.parent = result[x, y].transform;
                undiscoveredTile ut = undiscovered.AddComponent <undiscoveredTile>();
                ut.position = new HexaPos(x, y);
                GameObject discovered;
                randNum = nRand.NextDouble();
                //Erstellung der jeweiligen Gameobjekte
                if (tempTile.tile_type == tileType.Desert)
                {
                    if (randNum < 0.33)
                    {
                        tempTile.genField = 1;
                        discovered        = (GameObject)Instantiate(Initialisation.sandTile_1);
                    }
                    else if (randNum < 0.66)
                    {
                        tempTile.genField = 2;
                        discovered        = (GameObject)Instantiate(Initialisation.sandTile_2);
                    }
                    else
                    {
                        tempTile.genField = 3;
                        discovered        = (GameObject)Instantiate(Initialisation.sandTile_3);
                    }
                }
                else if (tempTile.tile_type == tileType.Forrest)
                {
                    if (randNum < 0.33)
                    {
                        tempTile.genField = 1;
                        discovered        = (GameObject)Instantiate(Initialisation.forrestTile_1);
                    }
                    else if (randNum < 0.66)
                    {
                        tempTile.genField = 2;
                        discovered        = (GameObject)Instantiate(Initialisation.forrestTile_2);
                    }
                    else
                    {
                        tempTile.genField = 3;
                        discovered        = (GameObject)Instantiate(Initialisation.forrestTile_3);
                    }
                }
                else if (tempTile.tile_type == tileType.Mountain)
                {
                    if (randNum < 0.33)
                    {
                        tempTile.genField = 1;
                        discovered        = (GameObject)Instantiate(Initialisation.mountainTile_1);
                    }
                    else if (randNum < 0.66)
                    {
                        tempTile.genField = 2;
                        discovered        = (GameObject)Instantiate(Initialisation.mountainTile_2);
                    }
                    else
                    {
                        tempTile.genField = 3;
                        discovered        = (GameObject)Instantiate(Initialisation.mountainTile_3);
                    }
                }
                else
                {
                    if (randNum < 0.33)
                    {
                        tempTile.genField = 1;
                        discovered        = (GameObject)Instantiate(Initialisation.oasisTile_1);
                    }
                    else if (randNum < 0.66)
                    {
                        tempTile.genField = 2;
                        discovered        = (GameObject)Instantiate(Initialisation.oasisTile_2);
                    }
                    else
                    {
                        tempTile.genField = 3;
                        discovered        = (GameObject)Instantiate(Initialisation.oasisTile_3);
                    }
                }
                discoveredTile dT = discovered.AddComponent <discoveredTile>();
                dT.position = new HexaPos(x, y);
                undiscovered.AddComponent <MeshCollider>();
                discovered.AddComponent <MeshCollider>();
                discovered.transform.name   = "actualTile";
                discovered.transform.parent = result[x, y].transform;
                discovered.SetActive(false);
                result[x, y].transform.position = position;
            }

            if (scndRow)
            {
                scndRow = false;
            }
            else
            {
                scndRow = true;
            }
        }

        landscape = result;
        return(result);
    }