Beispiel #1
0
    // Start is called before the first frame update
    public IEnumerator GenerateMap()
    {
        var itemCount  = (int)AvailableItems.Count();
        var biomeWidth = 0;
        var isYLong    = false;

        if (Size.x > Size.y)
        {
            biomeWidth = Size.x / itemCount;
        }
        else
        {
            isYLong    = true;
            biomeWidth = Size.y / itemCount;
        }

        Random.InitState(Seed);
        _tiles      = new Tile[Size.x, Size.y];
        _neighboors = new Dictionary <Tile, List <Tile> >();
        for (int i = 0; i < Target.childCount; i++)
        {
            GameObject.Destroy(Target.GetChild(i).gameObject);
        }
        for (int i = 0; i < Size.x; i++)
        {
            for (int z = 0; z < Size.y; z++)
            {
                var newTile = GameObject.Instantiate(Prefab);
                _neighboors[newTile] = new List <Tile>();

                var newState = (TileStates)Random.Range(3, 8);
                _tiles[i, z]   = newTile;
                newTile.TileId = new Vector2Int(i, z);
                newTile.State  = newState;
                newTile.transform.SetParent(Target);
                newTile.transform.localPosition = new Vector3(i, 0, z) * newTile.TileSize;

                newTile.WallW.SetActive(i == 0);
                newTile.WallE.SetActive(i == Size.x - 1);
                newTile.WallN.SetActive(z == Size.y - 1);
                if (z == 0 && i <= 1)
                {
                    newTile.State &= ~TileStates.S;
                }
                newTile.WallS.SetActive(z == 0 && i > 1);
                yield return(null);
            }
        }
        yield return(StartCoroutine(CheckConnectivity(_tiles[0, 0])));

        for (int xSize = 0; xSize < Size.x; xSize++)
        {
            for (int zSize = 0; zSize < Size.y; zSize++)
            {
                var typeTest = 0;
                var putLabel = true;
                if (isYLong)
                {
                    typeTest = zSize / biomeWidth;
                    putLabel = zSize % biomeWidth == 0;
                }
                else
                {
                    typeTest = xSize / biomeWidth;
                    putLabel = xSize % biomeWidth == 0;
                }
                var typedType = (ShopItemType)(1 << Mathf.Clamp(typeTest, 0, 6));
                if (putLabel)
                {
                    var labelPrefab = GameManager.Instance.LabelLibrary.GetLabel(typedType);

                    GameObject.Instantiate(labelPrefab, _tiles[xSize, zSize].transform);
                }

                _tiles[xSize, zSize].UpdateAisleState(typedType);
                yield return(null);
            }
        }
    }