Exemplo n.º 1
0
    /// <summary>
    /// 方块旋转,踢墙和踢地板
    /// </summary>
    public void Rotation()
    {
        if (dropStat != DropStat.Dropping)
        {
            return;
        }
        Vector2Int[] newpos = new Vector2Int[4];
        // 计算原地旋转后的坐标
        for (int i = 0; i < blocks.Length; i++)
        {
            newpos[i] = Vector2Util.RotateClockWise(blocks[i].Coord, pivot.localPosition);
        }
        //踢墙检测
        for (int j = 0; j < TickOffsetPoint.Length; j++)
        {
            Vector2Int[] kickpos = new Vector2Int[4];
            for (int i = 0; i < blocks.Length; i++)
            {
                kickpos[i] = newpos[i] + Vector2Int.up;
            }

            if (CanAction(newpos))               // 能转
            {
                nextDroptime = 0f;
                for (int i = 0; i < blocks.Length; i++)
                {
                    blocks[i].Coord = newpos[i];
                }
                return;
            }
        }
    }