Exemple #1
0
        private void InitGrids(int rowCount, int colCount, ref BoardGrids boardGrids)
        {
            Vector2Int pos;
            Vector3    curPos;// tileOffset, ;
            GameObject newTile   = default;
            Transform  newTileTF = default;

            for (int row = rowCount - 1; row >= 0; row--)//预制体为非镜像的方式摆放,故使用倒序遍历
            {
                for (int col = 0; col < colCount; col++)
                {
                    //tileOffset = new Vector3(CellSize.x * col, CellSize.y * row, 0f);
                    //curPos = StartPos + PosOffset + tileOffset;
                    pos    = new Vector2Int(col, row);
                    curPos = GetGridPosWithRowCol(pos);

                    if (TileResRaw != default)
                    {
                        newTile   = UnityEngine.Object.Instantiate(TileResRaw, curPos, Quaternion.identity);
                        newTileTF = newTile.transform;
                        newTileTF.SetParent(mBoardParent);
                    }
                    else
                    {
                    }

                    boardGrids.CreateGrid(col, row, newTile);

                    int rowValue = rowCount - row - 1;//需要倒序遍历,使用差运算
                    int index    = (rowValue * colCount) + col;
                    int gridType = GetGridTypeDuringCreate != default ? GetGridTypeDuringCreate.Invoke(index) : mElimiGamePlay.GridTypes.NormalGridType;
                    CreateGrid(pos, curPos, out GridCreateInfo info, string.Empty, true, gridType);
                }
            }
        }
Exemple #2
0
        public void InitAndCreate(BoardGrids boardGrids, Vector3 gridsOffset)
        {
            GameObject boardParent = new GameObject("boardParent");

            mBoardParent = boardParent.transform;
            mBoardParent.SetParent(mElimiGamePlay.GridsContainer.transform);
            GameObject shapeParent = new GameObject("shapeParent");

            mGridParent = shapeParent.transform;
            mGridParent.SetParent(mElimiGamePlay.GridsContainer.transform);

            Transform trans = mElimiGamePlay.GridsContainer.transform;
            Vector3   pos   = trans.position;

            StartPos = new Vector3(pos.x, pos.y, 0f);//消除格开始摆放的起点

            float halfToCenter = -0.5f;
            int   colCount     = boardGrids.ColumnSize;
            int   rowCount     = boardGrids.RowSize;

            InitedGridCount = rowCount * colCount;

            GridsOffset = gridsOffset;
            PosOffset   = new Vector3(CellSize.x * colCount, CellSize.y * rowCount) * halfToCenter + GridsOffset;

            InitGrids(rowCount, colCount, ref boardGrids);
        }
Exemple #3
0
 public GridSkillTrigger(ElimlnateGrid grid)
 {
     GridSelf                = grid;
     mBoardGrids             = ElimlnateCore.Instance.BoardGrids;
     mGridsChecked           = new List <int>();
     mSecondarySkillTriggers = new Queue <ISkillGridTrigger>();
 }
Exemple #4
0
        public void FillGridByRandom(out ElimlnateGrid result, Func <ElimlnateGrid, bool> randomAginFilters = default)
        {
            BoardGrids boardGrids = mElimiGamePlay.BoardGrids;
            int        index      = Utils.UnityRangeRandom(0, boardGrids.GridsSize);

            result = boardGrids.GetGridByIndex(index);

            bool flag = randomAginFilters != default ? randomAginFilters.Invoke(result) : true;

            if ((result == default) || result.IsDestroyed || flag)
            {
                FillGridByRandom(out result, randomAginFilters);
            }
Exemple #5
0
        public GridElimlnateExecuter(GridOperater operater, BoardGrids boardGrids, ref List <ElimlnateGrid> list)
        {
            GridOperater = operater;
            BoardGrids   = boardGrids;

            ElimlnateGrid grid;

            mGrids = new List <ElimlnateGrid>();
            int max = list.Count;

            for (int i = 0; i < max; i++)
            {
                grid = list[i];
                grid.AddDestroyCallback(CountNeedDestroyGrid);
                mGrids.Add(grid);
            }
            GridNeedDestroyCount = mGrids.Count;
        }
Exemple #6
0
        public void Clean()
        {
            IsClear = true;

            BoardGrids?.Clean();
            GridCreater?.Clean();
            GridOperater?.Clean();
            LineInputer?.Clean();
            GridTypes?.Clean();
            GridEffects?.Clean();
            mAutoActiveTimes?.Clear();
            mActiveTimeRemains?.Clear();

            OnUpdate        = default;
            GridsContainer  = default;
            DestroyGrid     = default;
            ElimlnateCamera = default;
            Inputer         = default;
        }
Exemple #7
0
        public void CreateBoard(int col, int row, Action <ElimlnateGrid> afterGridsDeactived = default, Action <List <GridRearrangerInfo> > rearrangerGrids = default)
        {
            IsClear    = false;
            BoardGrids = new BoardGrids(col, row);
            if (afterGridsDeactived != default)
            {
                BoardGrids.AfterGridsDeactived += afterGridsDeactived;
            }
            else
            {
            }

            if (rearrangerGrids != default)
            {
                BoardGrids.OnRearrangerGrids += rearrangerGrids;
            }
            else
            {
            }
        }
Exemple #8
0
        public override void Start(ref List <ElimlnateGrid> grids, string triggerGridEffect = null)
        {
            if (GamePlayCore == default)
            {
                GamePlayCore = ElimlnateCore.Instance;
            }
            else
            {
            }

            KeyValueList <int, List <int> > gridsEmpty = new KeyValueList <int, List <int> >();

            BoardGrids boardGrids = GamePlayCore.BoardGrids;
            int        max        = boardGrids.GridsSize;

            for (int i = 0; i < max; i++)
            {
                List <int>    emptysInCol;
                ElimlnateGrid grid = boardGrids.GetGridByIndex(i);
                if (grid == default)
                {
                    int col = i % boardGrids.RowSize;
                    if (gridsEmpty[col] == default)
                    {
                        emptysInCol     = new List <int>();
                        gridsEmpty[col] = emptysInCol;
                    }
                    else
                    {
                        emptysInCol = gridsEmpty[col];
                    }
                    emptysInCol.Add(i);
                }
                else
                {
                }
            }

            base.Start(ref grids, triggerGridEffect);
        }