Example #1
0
    public IEnumerator shake(InGame_Block block, float sec = 0.5f)
    {
        block.Img_Block.transform.DOShakePosition(sec, 10);
        yield return(new WaitForSeconds(sec));


        block.Img_Block.sprite = null;
        block.gameObject.SetActive(false);
        InGame_Block up = null, left = null, right = null;

        for (int i = 0; i < blocks.Count; i++)
        {
            if (block.GetPos().y + 1 != blocks[i].GetPos().y)
            {
                continue;
            }

            if (block.GetPos().x == blocks[i].GetPos().x)
            {
                up = blocks[i];
            }
            if (block.GetPos().x == blocks[i].GetPos().x + 1)
            {
                left = blocks[i];
            }
            if (block.GetPos().x == blocks[i].GetPos().x - 1)
            {
                right = blocks[i];
            }
        }
    }
Example #2
0
    public bool Check_BlockAsync(InGame_Block block)
    {
        bool result = false;

        #region 가로 체크

        InGame_Block[] horizon_arr = new InGame_Block[stage.Width];

        foreach (var tile in blocks)
        {
            if (tile.GetPos().y != block.GetPos().y)
            {
                continue;
            }

            int index = (int)tile.GetPos().x + (int)(stage.Width / 2);
            horizon_arr[index] = tile;
        }


        List <InGame_Block> H_clearBlock = new List <InGame_Block>();
        for (int i = 0; i < stage.Width; i++)
        {
            if (horizon_arr[i].GetIndex() != block.GetIndex())
            {
                if (H_clearBlock.Count < 3)
                {
                    H_clearBlock.Clear();
                }

                continue;
            }

            H_clearBlock.Add(horizon_arr[i]);
        }

        if (H_clearBlock.Count < 3)
        {
            H_clearBlock.Clear();
        }

        else
        {
            GameUtils.Log($"[{block.GetPos()}] 가로 완성 ({H_clearBlock.Count })개 / {block.Img_Block.sprite.name}");

            foreach (var img in H_clearBlock)
            {
                StartCoroutine(shake(img));
            }

            result = true;
        }



        #endregion

        #region 세로 체크

        InGame_Block[] vertical_arr = new InGame_Block[stage.Height];

        foreach (var tile in blocks)
        {
            if (tile.GetPos().x != block.GetPos().x)
            {
                continue;
            }

            int index = (int)tile.GetPos().y + (int)(stage.Height / 2);
            vertical_arr[index] = tile;
        }


        List <InGame_Block> V_clearBlock = new List <InGame_Block>();
        for (int i = 0; i < stage.Height; i++)
        {
            if (vertical_arr[i].GetIndex() != block.GetIndex())
            {
                if (V_clearBlock.Count < 3)
                {
                    V_clearBlock.Clear();
                }

                continue;
            }

            V_clearBlock.Add(vertical_arr[i]);
        }

        if (V_clearBlock.Count < 3)
        {
            V_clearBlock.Clear();
        }

        else
        {
            GameUtils.Log($"[{block.GetPos()}] 세로 완성 ({V_clearBlock.Count })개 / {block.Img_Block.sprite.name}");

            foreach (var img in V_clearBlock)
            {
                StartCoroutine(shake(img));
            }

            result = true;
        }

        #endregion


        #region 사각형



        #endregion

        return(result);
    }