示例#1
0
    public void CreateMap()
    {
        map    = GetComponent <HexMapController>();
        player = FindObjectOfType <PlayerController>();

        if (transform.Find(TILE_HOLDER_NAME))
        {
            DestroyImmediate(transform.Find(TILE_HOLDER_NAME).gameObject);
        }

        var tiles = new Dictionary <HexPos, HexTileController>();

        Transform tileHolder      = new GameObject(TILE_HOLDER_NAME).transform;
        Transform movableHolder   = new GameObject("Movable").transform;
        Transform immovableHolder = new GameObject("Immovable").transform;

        tileHolder.parent      = this.transform;
        movableHolder.parent   = tileHolder;
        immovableHolder.parent = tileHolder;

        if (mapString != null)
        {
            String[] lines = mapString.Split(new String[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);
            for (int y = 0; y < lines.Length; y++)
            {
                String[] tileChars = lines[lines.Length - 1 - y].Split(new String[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                for (int x = 0; x < tileChars.Length; x++)
                {
                    TileEnum   tileType = (TileEnum)int.Parse(tileChars[x]);
                    GameObject tile     = GetTilePrefab(tileType);

                    if (tile != null)
                    {
                        HexPos            hexPos     = new HexPos(x, y);
                        GameObject        tileObject = Instantiate(GetTilePrefab(tileType), map.GetPositionFor(hexPos), Quaternion.identity);
                        HexTileController hexTile    = tileObject.GetComponentInChildren <HexTileController>();
                        hexTile.pos = hexPos;
                        var hexOrigScale = hexTile.transform.localScale;
                        hexTile.transform.localScale = new Vector3(scale * hexOrigScale.x, scaleY * hexOrigScale.y, scale * hexOrigScale.z);

                        switch (tileType)
                        {
                        case TileEnum.GRASS:
                        case TileEnum.HILL:
                        case TileEnum.RIVER:
                            tileObject.transform.parent = movableHolder;
                            break;

                        case TileEnum.MOUNTAIN:
                        case TileEnum.WATER:
                            tileObject.transform.parent = immovableHolder;
                            break;
                        }

                        if (!showTiles)
                        {
                            hexTile.flipped = startPos.DistanceTo(hexPos) <= player.viewDistance;
                        }

                        tiles.Add(hexPos, hexTile);
                    }
                }
            }
        }

        map.SetTiles(tiles);
        map.SetPlayerStart(startPos);
    }