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]; } } }
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); }