Ejemplo n.º 1
0
 private void CheckPieces(List <EditorLevelPiece> pieces, List <GridVO> grids)
 {
     while (grids.Count > 0)
     {
         GridVO grid = grids[0];
         grids.RemoveAt(0);
         EditorLevelPiece piece = new EditorLevelPiece();
         pieces.Add(piece);
         piece.grids.Add(new EditorLevelPieceGrid(grid.x.value, grid.y.value, grid.color.value));
         bool find = true;
         while (find)
         {
             find = false;
             for (int i = 0; i < piece.grids.Count; i++)
             {
                 GridVO nextGrid = GetGridNextTo(piece.grids[i].x, piece.grids[i].y, piece.grids[i].color, grids);
                 if (nextGrid != null)
                 {
                     grids.Remove(nextGrid);
                     piece.grids.Add(new EditorLevelPieceGrid(nextGrid.x.value, nextGrid.y.value, nextGrid.color.value));
                     find = true;
                 }
             }
         }
     }
 }
Ejemplo n.º 2
0
    private void SetPiece(EditorLevelPiece piece)
    {
        List <GridVO> grids = EditorVO.Instance.piecesGrids;
        int           minx  = piece.grids[0].x;
        int           maxy  = piece.grids[0].y;

        for (int i = 1; i < piece.grids.Count; i++)
        {
            if (piece.grids[i].x < minx)
            {
                minx = piece.grids[i].x;
            }
            if (piece.grids[i].y > maxy)
            {
                maxy = piece.grids[i].y;
            }
        }
        int offx = minx % 2 == 0 ? -minx : -minx + 1;
        int offy = -maxy;

        for (int y = 0; y > -10; y--)
        {
            for (int x = 0; x < 22; x++, x++)
            {
                bool find = true;
                for (int i = 0; i < piece.grids.Count; i++)
                {
                    GridVO grid = EditorVO.Instance.GetGridPiece((int)piece.grids[i].x + offx + x, (int)piece.grids[i].y + offy + y);
                    if (grid == null || grid.color.value != 0)
                    {
                        find = false;
                        break;
                    }
                    else
                    {
                        //获取周围的格子
                        List <Point2D> nextCoords = HaxgonCoord <Point2D> .GetCoordsNextTo(Point2D.Create((int)piece.grids[i].x + offx + x, (int)piece.grids[i].y + offy + y));

                        for (int n = 0; n < nextCoords.Count; n++)
                        {
                            GridVO nextGrid = EditorVO.Instance.GetGridPiece((int)nextCoords[n].x, (int)nextCoords[n].y);
                            if (nextGrid != null && nextGrid.color.value != 0 && nextGrid.color.value != grid.color.value)
                            {
                                find = false;
                                break;
                            }
                        }
                    }
                }
                if (find)
                {
                    for (int i = 0; i < piece.grids.Count; i++)
                    {
                        EditorVO.Instance.GetGridPiece((int)piece.grids[i].x + offx + x, (int)piece.grids[i].y + offy + y).color.value = piece.grids[i].color;
                    }
                    return;
                }
            }
        }
    }
Ejemplo n.º 3
0
    public SaveLevelCommand(int level)
    {
        //读取配置
        //ConfigDecode.Decode();

        //删除之前的 level 相关信息
        if (LevelConfig.GetConfig(level) != null)
        {
            LevelConfig old = LevelConfig.GetConfig(level);
            LevelConfig.Configs.Remove(old);
            for (int i = 0; i < old.pieces.Count; i++)
            {
                PieceConfig.Configs.Remove(PieceConfig.GetConfig(old.pieces[i].id));
            }
            for (int i = 0; i < old.pieces2.Count; i++)
            {
                PieceConfig.Configs.Remove(PieceConfig.GetConfig(old.pieces2[i].id));
            }
        }

        if (EditorVO.Instance.level.pieces.Count > 0)
        {
            LevelConfig levelConfig = new LevelConfig();
            LevelConfig.Configs.Add(levelConfig);
            levelConfig.id = level;

            for (int i = 0; i < EditorVO.Instance.level.pieces.Count; i++)
            {
                EditorLevelPiece piece       = EditorVO.Instance.level.pieces[i];
                PieceConfig      pieceConfig = new PieceConfig();
                levelConfig.pieces.Add(pieceConfig);
                pieceConfig.id = level * 100 + i;
                for (int c = 0; c < piece.grids.Count; c++)
                {
                    if (CoordConfig.GetConfig(piece.grids[c].x * 1000 + -piece.grids[c].y) == null)
                    {
                        CoordConfig coord = new CoordConfig();
                        coord.x  = piece.grids[c].x;
                        coord.y  = piece.grids[c].y;
                        coord.id = piece.grids[c].x * 1000 + -piece.grids[c].y;
                        CoordConfig.Configs.Add(coord);
                    }
                    pieceConfig.coords.Add(CoordConfig.GetConfig(piece.grids[c].x * 1000 + -piece.grids[c].y));
                }
                PieceConfig.Configs.Add(pieceConfig);
            }

            for (int i = 0; i < EditorVO.Instance.level.otherPieces.Count; i++)
            {
                EditorLevelPiece piece       = EditorVO.Instance.level.otherPieces[i];
                PieceConfig      pieceConfig = new PieceConfig();
                levelConfig.pieces2.Add(pieceConfig);
                pieceConfig.id = level * 100 + EditorVO.Instance.level.pieces.Count + i;
                for (int c = 0; c < piece.grids.Count; c++)
                {
                    if (CoordConfig.GetConfig(piece.grids[c].x * 1000 + -piece.grids[c].y) == null)
                    {
                        CoordConfig coord = new CoordConfig();
                        coord.x  = piece.grids[c].x;
                        coord.y  = piece.grids[c].y;
                        coord.id = piece.grids[c].x * 1000 + -piece.grids[c].y;
                        CoordConfig.Configs.Add(coord);
                    }
                    pieceConfig.coords.Add(CoordConfig.GetConfig(piece.grids[c].x * 1000 + -piece.grids[c].y));
                }
                PieceConfig.Configs.Add(pieceConfig);
            }

            CheckLevelPiecePosition(levelConfig);
        }

        //CheckAllLevelPiecePosition();

        Save();
        //CheckOut();
    }