Esempio n. 1
0
 public TileEntity(Vector2 coords, eTileType type, TileTheme theme)
 {
     coordsM  = coords;
     coordsW  = coords * coords.SPACE_SIZE();
     tileType = type;
     color    = theme.GetColor(type);
 }
Esempio n. 2
0
    public override void _Ready()
    {
        ChangeOrders = new List <TileChangeOrder>();

        update               = false;
        mapHandler           = new MapHandler();
        theme                = new TileTheme();
        projectileQueue      = new List <SimpleProjectile>();
        rightHighlight.color = new UITheme().cAccent;
        leftHighlight.color  = new UITheme().cBlue;


        AllLevels = new List <TileMap>()
        {
            level2, level3, level4
        };

        mapHandler.GenerateTiles(50);
        mapHandler.AddGrass();
        mapHandler.tiles.ForEach(t => level3.SetCellv(t.coordsM, GetTileId(level3, t.tileType)));
    }
Esempio n. 3
0
 public MapHandler()
 {
     rng   = new Random();
     tiles = new List <TileEntity>();
     theme = new TileTheme();
 }
Esempio n. 4
0
        // 새 타일맵 생성
        public void CreateTileMap(TileTheme theme, int horizontal, int vertical)
        {
            tileList     = new List <List <BasicTile> >();
            decoTileList = new List <DecoTileListData>();

            if (horizontal * vertical > MAX_TILE_NUMBER)
            {
                Debug.Log("타일 최대값 초과!");
                return;
            }

            PoolManager.Instance.CreateObjectPoolFromPath <BasicTile>(tileGroupData.BasicTilePath, tileGroupData.BasicTilePath, 60);

            switch (theme)
            {
            case TileTheme.Grass:
                currentTileSet = tileGroupData.GrassTileSet;
                break;

            case TileTheme.Ice:
                currentTileSet = tileGroupData.IceTileSet;
                break;

            case TileTheme.Desert:
                currentTileSet = tileGroupData.DesertTileSet;
                break;
            }
            SetCurrentMaterialOnPath(currentTileSet);

            // 테마에 맞는 랜덤 바닥 타일맵 세팅
            for (int i = 0; i < horizontal; i++)
            {
                tileList.Add(new List <BasicTile>());
                for (int j = 0; j < vertical; j++)
                {
                    int       rand = Random.Range(0, currentTileMaterial.Count);
                    BasicTile tile = PoolManager.Instance.Create <BasicTile>(tileGroupData.BasicTilePath);
                    tile.Init(TileState.None, new Vector3Int(i, 0, j), currentTileMaterial[rand][0], currentTileMaterial[rand][1]);
                    tileList[i].Add(tile);
                }
            }

            // 몬스터 성 생성
            CreateCastle(vertical, horizontal);

            // 무조건 성으로 가는 길은 하나 존재해야 하므로 None State를 잠시 바꿔둔다.
            List <Vector3Int> roadTilePosList = pathFinder.GetPath(monsterCastlePos, playerCastlePos, tileList);

            for (int i = 1; i < roadTilePosList.Count - 1; i++)
            {
                tileList[roadTilePosList[i].x][roadTilePosList[i].z].SetState(TileState.Obstacle);
            }

            int riverCreateGen;

            // 테마 별로 강 생성 확률이 다르다
            if (theme == TileTheme.Grass)
            {
                riverCreateGen = 100;
            }
            else if (theme == TileTheme.Ice)
            {
                riverCreateGen = 50;
            }
            else
            {
                riverCreateGen = 30;
            }

            if (riverCreateGen > Random.Range(1, 101))
            {
                CreateRiver(horizontal, vertical);
            }

            CreateObstacle(Random.Range(2, horizontal), horizontal, vertical);

            for (int i = 1; i < roadTilePosList.Count - 1; i++)
            {
                if (tileList[roadTilePosList[i].x][roadTilePosList[i].z].GetState() == TileState.Obstacle)
                {
                    tileList[roadTilePosList[i].x][roadTilePosList[i].z].SetState(TileState.None);
                }
            }
        }