Exemple #1
0
    //检查消除方块的上下左右是否有毒液
    private void CheckPoison(GridBean gridBean)
    {
        int checkCounts = mPoisonList.Count;

        for (int x = 0; x < checkCounts; x++)
        {
            for (int i = 0, v, h; i < mPoisonList.Count; i++)
            {
                v = mPoisonList[i].vertical;
                h = mPoisonList[i].horizontal;
                if ((System.Math.Abs(v - gridBean.vertical) <= 1 && h - gridBean.horizontal == 0) || (v - gridBean.vertical == 0 && System.Math.Abs(h - gridBean.horizontal) <= 1))
                {
                    mGridListManager[v].Remove(mPoisonList[i]);
                    Destroy(mPoisonList[i].gridObject);
                    mGridBaseListManager[v][h].gridBean    = null;
                    mGridBaseListManager[v][h].isHasGrid   = false;
                    mGridBaseListManager[v][h].spriteIndex = 0;//随机赋值,只要不是挖空,雪块、毒液的资源索引值即可
                    isRemovePoison = true;
                    mPoisonList.RemoveAt(i);
                    deleteCounts++;
                    break;
                }
            }
        }
    }
Exemple #2
0
    /// <summary>
    /// GridBean的复制方法
    /// </summary>
    /// <param name="copyGridBean"></param>
    /// <param name="Grid"></param>
    /// <returns></returns>
    public static GridBean mClone(GridBean copyGridBean, GameObject Grid)
    {
        GridBean   gridBean   = new GridBean();
        GameObject gridObject = new GameObject();

        gridObject.AddComponent <RectTransform>();
        gridObject.GetComponent <RectTransform>().position  = copyGridBean.gridObject.GetComponent <RectTransform>().position;
        gridObject.GetComponent <RectTransform>().sizeDelta = copyGridBean.gridObject.GetComponent <RectTransform>().sizeDelta;
        gridObject.AddComponent <Image>();
        gridObject.GetComponent <Image>().sprite = copyGridBean.gridObject.GetComponent <Image>().sprite;
        gridObject.transform.SetParent(Grid.transform);

        gridBean.gridObject  = gridObject;
        gridBean.horizontal  = copyGridBean.horizontal;
        gridBean.vertical    = copyGridBean.vertical;
        gridBean.spriteIndex = copyGridBean.spriteIndex;

        gridBean.dropCounts = copyGridBean.dropCounts;
        gridBean.dropHeight = copyGridBean.dropHeight;

        gridBean.dropHeightFromOtherCounts = copyGridBean.dropHeightFromOtherCounts;
        gridBean.hasDropHeight             = copyGridBean.hasDropHeight;

        gridBean.moveDirection = copyGridBean.moveDirection;
        gridBean.hasMoveWidth  = copyGridBean.hasMoveWidth;
        gridBean.moveCounts    = copyGridBean.moveCounts;

        gridBean.isTop            = copyGridBean.isTop;
        gridBean.isDropInDoor     = copyGridBean.isDropInDoor;
        gridBean.isDropOutDoor    = copyGridBean.isDropOutDoor;
        gridBean.isDestroy        = copyGridBean.isDestroy;
        gridBean.isFrostingRemove = copyGridBean.isFrostingRemove;

        return(gridBean);
    }
Exemple #3
0
    //初始化格子内容
    private void InitGridContentSet()
    {
        gridSize = (Screen.width - leaveSize - (9 - 1) * intervalPx) / 9;
        interval = gridSize + intervalPx;
        x        = leaveSize / 2 + gridSize / 2;

        //设置编辑器格子内容
        gridListOfEditor = new List <List <GridBean> >();
        for (int vertical = 0; vertical < 9; vertical++, x = x + interval)
        {
            y        = Screen.height * 0.75f - gridSize / 2;
            gridList = new List <GridBean>();
            for (int horizontal = 0; horizontal < 9; horizontal++, y = y - interval)
            {
                GameObject grid = Instantiate(Resources.Load("prefabs/grid"), GridContentSet.transform) as GameObject;
                Destroy(grid.GetComponent <SpriteRenderer>());
                grid.AddComponent <Image>();
                GridBean gridBean = new GridBean();
                if (mGridDataList != null)
                {
                    foreach (GridBean gridData in mGridDataList)
                    {
                        if (vertical == gridData.vertical && horizontal == gridData.horizontal)
                        {
                            if (gridData.spriteIndex == -1)
                            {
                                gridBean.spriteIndex = 1;
                            }
                            else
                            {
                                gridBean.spriteIndex = gridData.spriteIndex;
                            }
                            break;
                        }
                        else
                        {
                            gridBean.spriteIndex = 0;
                        }
                    }
                }
                else
                {
                    gridBean.spriteIndex = 0;
                }

                grid.GetComponent <Image>().sprite            = mSprites[gridBean.spriteIndex];
                grid.GetComponent <RectTransform>().position  = new Vector3(x, y, 0);
                grid.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize, gridSize);
                grid.AddComponent <Button>();
                grid.GetComponent <Button>().onClick.AddListener(OnGridClick);
                gridBean.gridObject = grid;
                gridList.Add(gridBean);
            }
            gridListOfEditor.Add(gridList);
        }
    }
Exemple #4
0
    //生成特效方块
    private void CreateSpecialGrid(int specialTpye)
    {
        //获取连线第一个方块的位置
        int v = lineConnectGridList[0].vertical;
        int h = lineConnectGridList[0].horizontal;

        GameObject grid = Instantiate(Resources.Load("prefabs/grid"), mGrid.transform) as GameObject;

        grid.GetComponent <RectTransform>().position  = mGridBaseListManager[v][h].gridBase.GetComponent <RectTransform>().position;
        grid.GetComponent <RectTransform>().sizeDelta = new Vector2(mGridSize, mGridSize);
        Destroy(grid.GetComponent <SpriteRenderer>());
        grid.AddComponent <Image>();

        GridBean gridBean = new GridBean();

        gridBean.gridObject     = grid;
        gridBean.moveHorizontal = 9;
        gridBean.vertical       = v;
        gridBean.horizontal     = h;
        gridBean.isTop          = false;

        gridBean.spriteIndex = lineConnectGridList[0].spriteIndex;
        gridBean.specialTpye = specialTpye;
        //根据specialTpye特效类型判断生成哪种特效
        switch (specialTpye)
        {
        case 0:    //魔力鸟
            gridBean.specialIndex = 0;
            break;

        case 1:    //竖线
        case 2:    //横线
            gridBean.specialIndex = lineConnectGridList[0].spriteIndex - 1;
            break;

        case 3:    //爆炸
            gridBean.specialIndex = lineConnectGridList[0].spriteIndex - 1 + 6;
            break;
        }
        grid.GetComponent <Image>().sprite = mSpecialSprites[gridBean.specialIndex];
        grid.name = "grid" + v.ToString() + h.ToString();
        mGridBaseListManager[v][h].spriteIndex = gridBean.spriteIndex;
        mGridBaseListManager[v][h].isHasGrid   = true;

        //获取当前位置所在列的索引,进行添加
        int index = 0;

        foreach (GridBean g in mGridListManager[v])
        {
            if (h > g.horizontal)
            {
                index++;
            }
        }
        mGridListManager[v].Insert(index, gridBean);
    }
Exemple #5
0
    //初始化格子类型选择列表
    private void InitGridTypeChooseContent()
    {
        if (mSprites != null)
        {
            gridSize = Screen.width / 10;
            lines    = (mSprites.Count - 1) / 10;

            //根据选择类型个数,设置背景高度
            gridTypeBackground.GetComponent <RectTransform>().sizeDelta = new Vector2(Screen.width, gridSize * (lines + 2));
            Arrows.GetComponent <RectTransform>().sizeDelta             = new Vector2(gridSize, gridSize);
            Arrows.GetComponent <RectTransform>().position = gridTypeBackground.GetComponent <RectTransform>().position + new Vector3(0.0f, -((gridSize * (lines + 2)) / 2 - gridSize / 2), 0.0f);

            x = gridSize / 2;
            y = Arrows.GetComponent <RectTransform>().position.y + gridSize * (lines + 1);
            for (int i = 0, reSetX = 0, whichLine = 0; i < mSprites.Count; i++, reSetX++)
            {
                GameObject grid = Instantiate(Resources.Load("prefabs/grid"), gridTypeBackground.transform) as GameObject;
                Destroy(grid.GetComponent <SpriteRenderer>());
                grid.AddComponent <Image>();
                grid.GetComponent <Image>().sprite            = mSprites[i];
                grid.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize, gridSize);
                grid.AddComponent <Button>();
                grid.GetComponent <Button>().onClick.AddListener(OnGridTypeClick);
                if (reSetX == 10)
                {
                    reSetX = 0;
                    whichLine++;
                }
                grid.GetComponent <RectTransform>().position = new Vector3(x + gridSize * reSetX, y - whichLine * gridSize, 0);

                //调整部分UI的属性
                switch (i)
                {
                case 8:    //传送门入口
                    grid.GetComponent <RectTransform>().position = new Vector3(x + gridSize * reSetX, y - whichLine * gridSize - gridSize / 3, 0);
                    grid.GetComponent <RectTransform>().Rotate(new Vector3(75, 0.0f, 0.0f));
                    break;

                case 9:    //传送门出口
                    grid.GetComponent <RectTransform>().position = new Vector3(x + gridSize * reSetX, y - whichLine * gridSize + gridSize / 3, 0);
                    grid.GetComponent <RectTransform>().Rotate(new Vector3(75, 0.0f, 0.0f));
                    break;

                case 14:    //金豆荚篮子
                    grid.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize * 0.9f, gridSize * 0.4f);
                    break;
                }

                GridBean gridBean = new GridBean();
                gridBean.gridObject = grid;
            }
        }
    }
Exemple #6
0
    //元素互换
    private static void exchangeGrid(LeaveGridMsg gridA, LeaveGridMsg gridB)
    {
        //获取互换位置的索引
        int gridAInedx = mGridListManager[gridA.vertical].IndexOf(mGridBaseListManager[gridA.vertical][gridA.horizontal].gridBean);
        int gridBInedx = mGridListManager[gridB.vertical].IndexOf(mGridBaseListManager[gridB.vertical][gridB.horizontal].gridBean);

        //复制互换的对象
        GridBean cloneGridA = GridBean.mClone(mGridBaseListManager[gridA.vertical][gridA.horizontal].gridBean, mGrid);
        GridBean cloneGridB = GridBean.mClone(mGridBaseListManager[gridB.vertical][gridB.horizontal].gridBean, mGrid);

        //移除对象
        Destroy(mGridBaseListManager[gridA.vertical][gridA.horizontal].gridBean.gridObject);
        Destroy(mGridBaseListManager[gridB.vertical][gridB.horizontal].gridBean.gridObject);

        mGridListManager[gridA.vertical].RemoveAt(gridAInedx);
        //根据索引添加复制后的对象
        if (gridAInedx < 8)
        {
            mGridListManager[gridA.vertical].Insert(gridAInedx, cloneGridB);
        }
        else
        {
            mGridListManager[gridA.vertical].Add(cloneGridB);
        }

        mGridListManager[gridB.vertical].RemoveAt(gridBInedx);
        if (gridBInedx < 8)
        {
            mGridListManager[gridB.vertical].Insert(gridBInedx, cloneGridA);
        }
        else
        {
            mGridListManager[gridB.vertical].Add(cloneGridA);
        }

        //修改互换的数据
        mGridListManager[gridA.vertical][gridAInedx].vertical   = gridA.vertical;
        mGridListManager[gridA.vertical][gridAInedx].horizontal = gridA.horizontal;
        mGridListManager[gridA.vertical][gridAInedx].gridObject.GetComponent <RectTransform>().position = mGridBaseListManager[gridA.vertical][gridA.horizontal].gridBase.GetComponent <RectTransform>().position;
        mGridListManager[gridA.vertical][gridAInedx].gridObject.name       = "grid" + gridA.vertical.ToString() + gridA.horizontal.ToString();
        mGridBaseListManager[gridA.vertical][gridA.horizontal].gridBean    = mGridListManager[gridA.vertical][gridAInedx];
        mGridBaseListManager[gridA.vertical][gridA.horizontal].spriteIndex = mGridListManager[gridA.vertical][gridAInedx].spriteIndex;

        mGridListManager[gridB.vertical][gridBInedx].vertical   = gridB.vertical;
        mGridListManager[gridB.vertical][gridBInedx].horizontal = gridB.horizontal;
        mGridListManager[gridB.vertical][gridBInedx].gridObject.GetComponent <RectTransform>().position = mGridBaseListManager[gridB.vertical][gridB.horizontal].gridBase.GetComponent <RectTransform>().position;
        mGridListManager[gridB.vertical][gridBInedx].gridObject.name       = "grid" + gridB.vertical.ToString() + gridB.horizontal.ToString();
        mGridBaseListManager[gridB.vertical][gridB.horizontal].gridBean    = mGridListManager[gridB.vertical][gridBInedx];
        mGridBaseListManager[gridB.vertical][gridB.horizontal].spriteIndex = mGridListManager[gridB.vertical][gridBInedx].spriteIndex;
    }
    /// <summary>
    /// 从备用行补充方块到List中
    /// </summary>
    private static void DropFromTopList(int v, int addCounts)
    {
        for (int a = addCounts, topMoveCounts = 0; a > 0; a--, topMoveCounts++)
        {
            Vector3 newDropPosition   = mGridDropList[v].gridObject.GetComponent <RectTransform>().position;
            int     newDropHorizontal = mGridDropList[v].horizontal;

            //下移的距离
            dropHeight = a * mInterval;

            //修改备用掉落方块的信息
            mGridDropList[v].dropHeight = dropHeight + mInterval * topMoveCounts;
            mGridDropList[v].dropCounts = a;
            mGridDropList[v].isTop      = true;
            mGridDropList[v].gridObject.GetComponent <RectTransform>().position += new Vector3(0.0f, +(mInterval * topMoveCounts), 0.0f);

            //管理所有列的List对象对应添加方块
            mGridListManager[v].Insert(0, mGridDropList[v]);

            //修改GridBean下移后的listHorizontal信息
            mGridListManager[v][0].horizontal      = (a - 1);
            mGridListManager[v][0].gridObject.name = "grid" + v.ToString() + mGridListManager[v][0].horizontal.ToString();
            mGridBaseListManager[v][mGridListManager[v][0].horizontal].isHasGrid   = true;
            mGridBaseListManager[v][mGridListManager[v][0].horizontal].gridBean    = mGridListManager[v][0];
            mGridBaseListManager[v][mGridListManager[v][0].horizontal].spriteIndex = mGridListManager[v][0].spriteIndex;

            //移除掉落备用List对应位置的方块
            mGridDropList.RemoveAt(v);

            //在下移的掉落对象位置,创建一个方块备用,添加于掉落备用List中
            GameObject grid = Instantiate(Resources.Load("prefabs/grid"), mGrid.transform) as GameObject;
            Destroy(grid.GetComponent <SpriteRenderer>());
            grid.AddComponent <Image>();
            GridBean gridBean = new GridBean();
            gridBean.specialTpye = -1;
            gridBean.spriteIndex = UnityEngine.Random.Range(2, 8);
            grid.GetComponent <Image>().sprite            = mAllSprites[gridBean.spriteIndex];
            grid.GetComponent <RectTransform>().position  = newDropPosition;
            grid.GetComponent <RectTransform>().sizeDelta = new Vector2(mGridSize, mGridSize);
            grid.name = "grid" + v.ToString() + newDropHorizontal.ToString();
            grid.SetActive(false);
            gridBean.gridObject     = grid;
            gridBean.horizontal     = newDropHorizontal;
            gridBean.vertical       = v;
            gridBean.isTop          = true;
            gridBean.moveHorizontal = 9;
            mGridDropList.Insert(v, gridBean);
        }
    }
Exemple #8
0
    //消除特效方块
    private void RemoveSpecialGrid(GridBean gridBean)
    {
        switch (gridBean.specialTpye)
        {
        case 0:    //魔力鸟
            break;

        case 1:    //竖线
            break;

        case 2:    //横线
            break;

        case 3:    //爆炸
            break;
        }
    }
Exemple #9
0
    //检查消除方块的上下左右是否有雪块
    private void CheckFrosting(GridBean gridBean)
    {
        for (int i = 0; i < mFrostingList.Count; i++)
        {
            if ((System.Math.Abs(mFrostingList[i].vertical - gridBean.vertical) <= 1 && mFrostingList[i].horizontal - gridBean.horizontal == 0) || (mFrostingList[i].vertical - gridBean.vertical == 0 && System.Math.Abs(mFrostingList[i].horizontal - gridBean.horizontal) <= 1))
            {
                if (!mFrostingList[i].isFrostingRemove)
                {
                    mFrostingList[i].spriteIndex--;
                    if (mFrostingList[i].spriteIndex >= 15)
                    {
                        mFrostingList[i].gridObject.GetComponent <Image>().sprite = mAllSprites[mFrostingList[i].spriteIndex];
                    }
                    else
                    {
                        Destroy(mFrostingList[i].gridObject);
                        deleteCounts++;
                        mGridBaseListManager[mFrostingList[i].vertical][mFrostingList[i].horizontal].isHasGrid = false;
                    }
                    mGridBaseListManager[mFrostingList[i].vertical][mFrostingList[i].horizontal].spriteIndex = mFrostingList[i].spriteIndex;
                    mFrostingList[i].isFrostingRemove = true;
                }
            }
        }

        //更新雪块List
        for (int v = 0; v < 9; v++)
        {
            for (int h = 0; h < 9; h++)
            {
                if (mGridBaseListManager[v][h].spriteIndex == 14)
                {
                    foreach (GridBean grid in mFrostingList)
                    {
                        if (grid.vertical == v && grid.horizontal == h)
                        {
                            mFrostingList.Remove(grid);
                            mGridListManager[v].Remove(grid);
                            break;
                        }
                    }
                }
            }
        }
    }
Exemple #10
0
    /// <summary>
    /// 从传送门补充方块到List中
    /// </summary>
    private static void DropFromDoor(DoorBean doorBean, int addCounts)
    {
        int inV  = doorBean.inVertical;
        int inH  = doorBean.inHorizontal;
        int outV = doorBean.outVertical;
        int outH = doorBean.outHorizontal;

        int inVGridCounts = 0;

        //判断入口列还剩余多少个方块,是否足以掉落至出口列,
        for (int h = inH; h >= 0; h--)
        {
            if (mGridBaseListManager[inV][h].isHasGrid && mGridBaseListManager[inV][h].spriteIndex != -1 && !(mGridBaseListManager[inV][h].spriteIndex >= 15 && mGridBaseListManager[inV][h].spriteIndex <= 21))
            {
                inVGridCounts++;
            }
        }

        //若不足,则从备用列生成补充
        if (inVGridCounts < addCounts)
        {
            DropFromTopList(inV, addCounts - inVGridCounts);
        }

        //根据addCounts执行循环
        for (int i = 0, inIndex = inH, topMoveCounts = 0; i < addCounts; i++, inIndex--, topMoveCounts++)
        {
            //下移的距离
            dropHeight = addCounts * mInterval;

            //修改入口列的掉落信息和List处理
            mGridListManager[inV][inIndex].dropHeight = dropHeight;
            mGridBaseListManager[inV][mGridListManager[inV][inIndex].horizontal].gridBean  = null;
            mGridBaseListManager[inV][mGridListManager[inV][inIndex].horizontal].isHasGrid = false;
            mGridListManager[inV][inIndex].isDropInDoor = true;
            mGridListManager[inV][inIndex].isDestroy    = true;

            //复制一个对象
            GridBean gridBean = GridBean.Clone(mGridListManager[inV][inIndex], mGrid);

            //计算传送出口在GridList中的索引
            outIndex = 0;
            for (int x = 0; x < mGridListManager[outV].Count; x++)
            {
                if (inV != outV)
                {
                    if (mGridListManager[outV][x].horizontal < outH)
                    {
                        outIndex++;
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    if (mGridListManager[outV][x].horizontal < outH + addCounts - i)
                    {
                        outIndex++;
                    }
                    else
                    {
                        break;
                    }
                }
            }

            //将该方块添加进传送出口的索引位置
            mGridListManager[outV].Insert(outIndex, gridBean);

            //修改出口列的掉落信息和List处理
            mGridListManager[outV][outIndex].horizontal = outH + addCounts - 1 - i;
            mGridListManager[outV][outIndex].vertical   = outV;
            mGridListManager[outV][outIndex].gridObject.GetComponent <RectTransform>().position = mGridBaseListManager[outV][outH].gridBase.GetComponent <RectTransform>().position + new Vector3(0.0f, (i + 1) * mInterval, 0.0f);
            mGridListManager[outV][outIndex].gridObject.name = "grid" + outV.ToString() + mGridListManager[outV][outIndex].horizontal.ToString();
            mGridBaseListManager[outV][mGridListManager[outV][outIndex].horizontal].isHasGrid   = true;
            mGridBaseListManager[outV][mGridListManager[outV][outIndex].horizontal].gridBean    = mGridListManager[outV][outIndex];
            mGridBaseListManager[outV][mGridListManager[outV][outIndex].horizontal].spriteIndex = gridBean.spriteIndex;
            mGridListManager[outV][outIndex].gridObject.SetActive(false);
            mGridListManager[outV][outIndex].isDropInDoor  = false;
            mGridListManager[outV][outIndex].isDestroy     = false;
            mGridListManager[outV][outIndex].isDropOutDoor = true;

            //入口的列的剩余方块,需掉落addCounts个格子
            if (i + 1 == addCounts)
            {
                for (int x = inH - addCounts; x >= 0; x--)
                {
                    mGridListManager[inV][x].dropHeight += addCounts * mInterval;
                    mGridListManager[inV][x].dropCounts += addCounts;
                    mGridBaseListManager[inV][mGridListManager[inV][x].horizontal].gridBean  = null;
                    mGridBaseListManager[inV][mGridListManager[inV][x].horizontal].isHasGrid = false;
                    mGridListManager[inV][x].horizontal     += addCounts;
                    mGridListManager[inV][x].gridObject.name = "grid" + inV.ToString() + mGridListManager[inV][x].horizontal.ToString();
                    mGridBaseListManager[inV][mGridListManager[inV][x].horizontal].isHasGrid   = true;
                    mGridBaseListManager[inV][mGridListManager[inV][x].horizontal].gridBean    = mGridListManager[inV][x];
                    mGridBaseListManager[inV][mGridListManager[inV][x].horizontal].spriteIndex = mGridListManager[inV][x].spriteIndex;
                }
            }
        }

        //从备用行补充传送门入口方块
        DropFromTopList(inV, addCounts);
    }
    public void InitData()
    {
        //[0]读取配置,获取对象
        editorData = JsonUtil.GetEditorData(10);
        GridUIAttributeManager.GetInstance().editorData = editorData;

        //[1]获取格子内容信息
        if (!editorData.gridData.Equals(""))
        {
            string[] gridDatas = editorData.gridData.Split(',');
            gridDataList = new List <GridBean>();
            foreach (string grid in gridDatas)
            {
                if (!grid.Equals(""))
                {
                    string[] result   = grid.Split('|');
                    GridBean gridBean = new GridBean();
                    gridBean.vertical    = int.Parse(result[0]);
                    gridBean.horizontal  = int.Parse(result[1]);
                    gridBean.spriteIndex = int.Parse(result[2]);
                    gridDataList.Add(gridBean);
                }
            }
            GridUIAttributeManager.GetInstance().gridDataList = gridDataList;
        }

        //[2]获取传送门数据
        if (!editorData.doorData.Equals(""))
        {
            string[] doorDatas = editorData.doorData.Split(',');
            doorDataList = new List <DoorBean>();
            foreach (string door in doorDatas)
            {
                if (!door.Equals(""))
                {
                    string[] result   = door.Split('|');
                    DoorBean doorBean = new DoorBean();
                    doorBean.inVertical    = int.Parse(result[0]);
                    doorBean.inHorizontal  = int.Parse(result[1]);
                    doorBean.outVertical   = int.Parse(result[2]);
                    doorBean.outHorizontal = int.Parse(result[3]);
                    doorDataList.Add(doorBean);
                }
            }
            GridUIAttributeManager.GetInstance().doorDataList = doorDataList;
        }

        //[3]获取冰块数据
        if (!editorData.iceData.Equals(""))
        {
            string[] iceDatas = editorData.iceData.Split(',');
            iceDataList = new List <IceBean>();
            foreach (string ice in iceDatas)
            {
                if (!ice.Equals(""))
                {
                    string[] result  = ice.Split('|');
                    IceBean  iceBean = new IceBean();
                    iceBean.iceVertical   = int.Parse(result[0]);
                    iceBean.iceHorizontal = int.Parse(result[1]);
                    iceBean.iceLevel      = int.Parse(result[2]);
                    iceDataList.Add(iceBean);
                }
            }
            GridUIAttributeManager.GetInstance().iceDataList = iceDataList;
        }

        //获取金豆荚篮子数据
        if (!editorData.basketData.Equals(""))
        {
            string[] basketDatas = editorData.basketData.Split(',');
            basketDataList = new List <BasketBean>();
            foreach (string basket in basketDatas)
            {
                if (!basket.Equals(""))
                {
                    string[]   result     = basket.Split('|');
                    BasketBean basketBean = new BasketBean();
                    basketBean.basketVertical   = int.Parse(result[0]);
                    basketBean.basketHorizontal = int.Parse(result[1]);
                    basketDataList.Add(basketBean);
                }
            }
            GridUIAttributeManager.GetInstance().basketDataList = basketDataList;
        }

        //获取树藤数据
        if (!editorData.timboData.Equals(""))
        {
            string[] timboDatas = editorData.timboData.Split(',');
            timboDataList = new List <TimboBean>();
            foreach (string timbo in timboDatas)
            {
                if (!timbo.Equals(""))
                {
                    string[]  result    = timbo.Split('|');
                    TimboBean timboBean = new TimboBean();
                    timboBean.timboVertical   = int.Parse(result[0]);
                    timboBean.timboHorizontal = int.Parse(result[1]);
                    timboDataList.Add(timboBean);
                }
            }
            GridUIAttributeManager.GetInstance().timboDataList = timboDataList;
        }
    }
    public void InitGrid()
    {
        //[0]初始化父控件
        GridBg = new GameObject();
        Grid   = new GameObject();
        GridUIAttributeManager.GetInstance().Grid   = Grid;
        GridUIAttributeManager.GetInstance().GridBg = GridBg;

        GridBg.AddComponent <RectTransform>();
        Grid.AddComponent <RectTransform>();
        GridBg.name = "GridBg";
        Grid.name   = "Grid";
        GridBg.GetComponent <RectTransform>().SetParent(mainCanvas.transform);
        Grid.GetComponent <RectTransform>().SetParent(mainCanvas.transform);

        //[2]设置格子大小
        gameData            = new GameData();
        gameData.horizontal = 9;
        gameData.vertical   = 9;
        GridUIAttributeManager.GetInstance().gameData = gameData;
        leaveSize = 0;
        GridUIAttributeManager.GetInstance().leaveSize = leaveSize;
        intervalPx = 1.0f;
        if (Screen.height >= Screen.width)
        {
            if (gameData.vertical > 9)
            {
                gridSize = (Screen.width - leaveSize - (gameData.vertical - 1) * intervalPx) / gameData.vertical;
            }
            else
            {
                gridSize = (Screen.width - leaveSize - (9 - 1) * intervalPx) / 9;
            }
        }
        else
        {
            if (gameData.horizontal > 9)
            {
                gridSize = (gameBgWith - leaveSize - (gameData.horizontal - 1) * intervalPx) / gameData.horizontal;
            }
            else
            {
                gridSize = (gameBgWith - leaveSize - (9 - 1) * intervalPx) / 9;
            }
        }

        interval = gridSize + intervalPx;
        GridUIAttributeManager.GetInstance().intervalPx = intervalPx;
        GridUIAttributeManager.GetInstance().gridSize   = gridSize;
        GridUIAttributeManager.GetInstance().interval   = interval;
        //[3]动态创建方块
        //[3.1]设置每一列方块的初始位置 x
        if (Screen.height >= Screen.width)
        {
            x = leaveSize / 2 + gridSize / 2;
        }
        else
        {
            x = Screen.width / 2 - gameBgWith / 2 + leaveSize / 2 + gridSize / 2;
        }

        for (int vertical = 0; vertical < gameData.vertical; vertical++, x = x + interval)
        {
            //[3.2]设置第一行方块的初始位置 y
            y            = Screen.height * 0.75f - gridSize / 2 + interval;
            gridList     = new List <GridBean>();
            gridBaseList = new List <GridBaseBean>();
            for (int horizontal = 0; horizontal < gameData.horizontal + 1; horizontal++, y = y - interval)
            {
                //[3.3]生成场景
                if (horizontal != 0)
                {
                    GameObject gridbase = Instantiate(Resources.Load("prefabs/gridbase"), GridBg.transform) as GameObject;
                    Destroy(gridbase.GetComponent <SpriteRenderer>());
                    gridbase.name = "gridbase" + vertical.ToString() + (horizontal - 1).ToString();
                    gridbase.AddComponent <Image>();
                    gridbase.GetComponent <Image>().sprite            = baseSprites[0];
                    gridbase.GetComponent <RectTransform>().position  = new Vector3(x, y, 0);
                    gridbase.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize, gridSize);
                    GridBaseBean gridBaseBean = new GridBaseBean();
                    gridBaseBean.gridBase = gridbase;
                    gridBaseList.Add(gridBaseBean);
                }

                //[3.31]生成冰块
                if (iceDataList != null && horizontal != 0)
                {
                    foreach (IceBean iceBean in iceDataList)
                    {
                        if (iceBean.iceVertical == vertical && iceBean.iceHorizontal == horizontal - 1)
                        {
                            GameObject ice = Instantiate(Resources.Load("prefabs/gridbase"), GridBg.transform) as GameObject;
                            Destroy(ice.GetComponent <SpriteRenderer>());
                            ice.name = "ice" + iceBean.iceVertical.ToString() + iceBean.iceHorizontal.ToString();
                            ice.AddComponent <Image>();
                            ice.GetComponent <Image>().sprite            = allSprites[iceBean.iceLevel + 9];
                            ice.GetComponent <RectTransform>().position  = new Vector3(x, y, 0);
                            ice.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize, gridSize);
                            iceBean.ice = ice;
                            break;
                        }
                    }
                }

                //[3.32]生成金豆荚篮子
                if (basketDataList != null && horizontal != 0)
                {
                    foreach (BasketBean basketBean in basketDataList)
                    {
                        if (basketBean.basketVertical == vertical && basketBean.basketHorizontal == horizontal - 1)
                        {
                            GameObject basket = Instantiate(Resources.Load("prefabs/gridbase"), GridBg.transform) as GameObject;
                            Destroy(basket.GetComponent <SpriteRenderer>());
                            basket.name = "basket" + basketBean.basketVertical.ToString() + basketBean.basketHorizontal.ToString();
                            basket.AddComponent <Image>();
                            basket.GetComponent <Image>().sprite            = allSprites[14];
                            basket.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize * 0.9f, gridSize * 0.4f);
                            basket.GetComponent <RectTransform>().position  = new Vector3(x, y, 0) + new Vector3(0.0f, -gridSize / 2 - gridSize * 0.4f / 2, 0.0f);
                            basketBean.basket = basket;
                            break;
                        }
                    }
                }

                //[3.4]生成方块
                GameObject grid = Instantiate(Resources.Load("prefabs/grid"), Grid.transform) as GameObject;
                Destroy(grid.GetComponent <SpriteRenderer>());
                grid.AddComponent <Image>();
                GridBean gridBean = new GridBean();
                gridBean.specialTpye = -1;
                if (horizontal != 0)
                {
                    gridBaseList[horizontal - 1].gridBean = gridBean;
                }

                //遍历配置文件,若有对应固定的位置,则根据情况显示
                if (horizontal != 0)
                {
                    //默认随机
                    gridBean.spriteIndex = UnityEngine.Random.Range(2, 8);
                    gridBaseList[horizontal - 1].spriteIndex = gridBean.spriteIndex;
                    gridBaseList[horizontal - 1].isHasGrid   = true;
                    //如果配置数据为空,则默认随机
                    if (gridDataList != null)
                    {
                        foreach (GridBean gridData in gridDataList)
                        {
                            if (vertical == gridData.vertical && (horizontal - 1) == gridData.horizontal)
                            {
                                switch (gridData.spriteIndex)
                                {
                                case 1:    //不显示
                                    gridBaseList[horizontal - 1].spriteIndex = -1;
                                    gridBean.spriteIndex = gridData.spriteIndex;
                                    gridBaseList[horizontal - 1].gridBase.SetActive(false);
                                    grid.SetActive(false);
                                    break;

                                case 15:    //雪块
                                case 16:
                                case 17:
                                case 18:
                                case 19:
                                    gridBean.spriteIndex = gridData.spriteIndex;
                                    gridBaseList[horizontal - 1].spriteIndex = gridData.spriteIndex;
                                    frostingList.Add(gridBean);
                                    break;

                                case 20:
                                    gridBean.spriteIndex = gridData.spriteIndex;
                                    gridBaseList[horizontal - 1].spriteIndex = gridData.spriteIndex;
                                    poisonList.Add(gridBean);
                                    break;

                                default:    //默认根据ID显示对应资源
                                    gridBean.spriteIndex = gridData.spriteIndex;
                                    gridBaseList[horizontal - 1].spriteIndex = gridBean.spriteIndex;
                                    break;
                                }
                                break;
                            }
                        }
                    }
                    else
                    {
                        //如果格子内容没有数据, 则默认为空
                        gridBean.spriteIndex = UnityEngine.Random.Range(2, 8);
                        gridBaseList[horizontal - 1].spriteIndex = gridBean.spriteIndex;
                        gridBaseList[horizontal - 1].isHasGrid   = true;
                    }
                }
                else
                {
                    //备用方块的资源
                    gridBean.spriteIndex = UnityEngine.Random.Range(2, 8);
                }

                //设置金豆荚位置
                if (beanPodList != null && horizontal != 0)
                {
                    foreach (BeanPod beanPod in beanPodList)
                    {
                        if (beanPod.beanPodVeritcal == vertical && beanPod.beanPodHorizontal == horizontal - 1)
                        {
                            gridBean.spriteIndex = 13;
                            gridOfBeanPodList.Add(gridBean);
                            break;
                        }
                    }
                }

                //生成树藤
                if (timboDataList != null && horizontal != 0)
                {
                    foreach (TimboBean timboBean in timboDataList)
                    {
                        if (timboBean.timboVertical == vertical && timboBean.timboHorizontal == horizontal - 1)
                        {
                            GameObject timbo = Instantiate(Resources.Load("prefabs/gridbase"), Grid.transform) as GameObject;
                            Destroy(timbo.GetComponent <SpriteRenderer>());
                            timbo.name = "timbo" + timboBean.timboVertical.ToString() + timboBean.timboHorizontal.ToString();
                            timbo.AddComponent <Image>();
                            timbo.GetComponent <Image>().sprite            = allSprites[21];
                            timbo.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize * 1.1f, gridSize * 1.1f);
                            timbo.GetComponent <RectTransform>().position  = new Vector3(x - gridSize * 0.05f, y, 0);
                            timboBean.timbo = timbo;
                            gridBaseList[horizontal - 1].spriteIndex = 21;
                            break;
                        }
                    }
                }

                if (gridBean.spriteIndex > 1)
                {
                    grid.GetComponent <Image>().sprite = allSprites[gridBean.spriteIndex];
                }
                grid.GetComponent <RectTransform>().position  = new Vector3(x, y, 0);
                grid.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize, gridSize);
                gridBean.gridObject     = grid;
                gridBean.moveHorizontal = 9;

                //[3.5]储存格子掉落信息
                if (horizontal == 0)
                {
                    gridBean.horizontal = horizontal;
                    gridBean.vertical   = vertical;
                    grid.name           = "grid" + gridBean.vertical.ToString() + gridBean.horizontal.ToString();
                    grid.SetActive(false);
                    gridBean.isTop = true;
                    gridDropList.Add(gridBean);
                }

                //[3.6]储存格式显示信息
                if (horizontal != 0)
                {
                    gridBean.horizontal = horizontal - 1;
                    gridBean.vertical   = vertical;
                    grid.name           = "grid" + gridBean.vertical.ToString() + gridBean.horizontal.ToString();
                    gridBean.isTop      = false;
                    gridList.Add(gridBean);
                }
            }
            gridBaseListManager.Add(gridBaseList);
            gridListManager.Add(gridList);
        }
        GridUIAttributeManager.GetInstance().gridDropList        = gridDropList;
        GridUIAttributeManager.GetInstance().gridListManager     = gridListManager;
        GridUIAttributeManager.GetInstance().gridBaseListManager = gridBaseListManager;
        if (gridOfBeanPodList != null)
        {
            GridUIAttributeManager.GetInstance().gridOfBeanPodList = gridOfBeanPodList;
        }
        if (frostingList != null)
        {
            GridUIAttributeManager.GetInstance().frostingList = frostingList;
        }
        if (poisonList != null)
        {
            GridUIAttributeManager.GetInstance().poisonList = poisonList;
        }

        //[4]生成传送门
        if (doorDataList != null)
        {
            foreach (DoorBean doorbean in doorDataList)
            {
                //入口
                GameObject indoor = Instantiate(Resources.Load("prefabs/gridbase"), GridBg.transform) as GameObject;
                Destroy(indoor.GetComponent <SpriteRenderer>());
                indoor.name = "indoor" + doorbean.inVertical.ToString() + doorbean.inHorizontal.ToString();
                indoor.AddComponent <Image>();
                indoor.GetComponent <Image>().sprite = allSprites[8];
                doorPoint = gridListManager[doorbean.inVertical][doorbean.inHorizontal].gridObject.GetComponent <RectTransform>().position;
                indoor.GetComponent <RectTransform>().position  = doorPoint + new Vector3(0.0f, -gridSize * 2 / 3, 0.0f);
                indoor.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize, gridSize);
                indoor.GetComponent <RectTransform>().Rotate(new Vector3(75, 0.0f, 0.0f));
                doorbean.indoor = indoor;

                //出口
                GameObject outdoor = Instantiate(Resources.Load("prefabs/gridbase"), GridBg.transform) as GameObject;
                Destroy(outdoor.GetComponent <SpriteRenderer>());
                outdoor.name = "outdoor" + doorbean.outVertical.ToString() + doorbean.outHorizontal.ToString();
                outdoor.AddComponent <Image>();
                outdoor.GetComponent <Image>().sprite = allSprites[9];
                doorPoint = gridListManager[doorbean.outVertical][doorbean.outHorizontal].gridObject.GetComponent <RectTransform>().position;
                outdoor.GetComponent <RectTransform>().position  = doorPoint + new Vector3(0.0f, gridSize * 2 / 3, 0.0f);
                outdoor.GetComponent <RectTransform>().sizeDelta = new Vector2(gridSize, gridSize);
                outdoor.GetComponent <RectTransform>().Rotate(new Vector3(75, 0.0f, 0.0f));
                doorbean.outdoor = outdoor;
            }
        }
    }
Exemple #13
0
 //消除特效方块
 private void removeSpecialGrid(GridBean gridBean)
 {
 }