コード例 #1
0
    /// <summary>
    /// 创建拼图
    /// </summary>
    /// <param name="jigsawInfoData"></param>
    private void createJigsaw(JigsawStyleEnum jigsawStyle, Texture2D pic2D, int horizontalNumber, int verticalJigsawNumber)
    {
        //创建拼图数据
        listJigsawBean = CreateJigsawDataUtils.createJigsawDataList(jigsawStyle, horizontalNumber, verticalJigsawNumber, pic2D);
        //创建拼图
        CreateJigsawGameObjUtil.createJigsawGameObjList(listJigsawBean, pic2D);
        containerList = CreateJigsawContainerObjUtil.createJigsawContainerObjList(listJigsawBean);
        //初始化拼图位置
        for (int i = 0; i < listJigsawBean.Count; i++)
        {
            JigsawBean item           = listJigsawBean[i];
            Vector3    jigsawPosition = new Vector3(
                item.MarkLocation.x * item.JigsawWith - item.JigsawWith * horizontalNumber / 2f + item.JigsawWith / 2f,
                item.MarkLocation.y * item.JigsawHigh - item.JigsawHigh * verticalJigsawNumber / 2f + item.JigsawHigh / 2f
                );
            containerList[i].transform.position = jigsawPosition;

            //设置起始位置和角度
            JigsawContainerCpt containerCpt = containerList[i].transform.GetComponent <JigsawContainerCpt>();
            if (containerCpt != null)
            {
                containerCpt.startPosition = jigsawPosition;
                containerCpt.startRotation = containerList[i].transform.rotation;
            }
        }
    }
コード例 #2
0
    /// <summary>
    /// 基础-设置item坐标点
    /// </summary>
    /// <param name="jigsawItem"></param>
    public void baseSetListVerticesForItem(JigsawBean jigsawItem)
    {
        //添加中心点坐标
        Vector3 centerVector = new Vector3(0, 0);

        setCenterVector(jigsawItem, centerVector);
    }
コード例 #3
0
    //-----------------------------------------------------------------------------------------------------------------------

    /// <summary>
    /// 根据图片获取item宽高和UV
    /// </summary>
    /// <param name="horizontalJigsawNumber"></param>
    /// <param name="verticalJigsawNumber"></param>
    /// <param name="jigsawPic"></param>
    protected JigsawBean getWithAndHighByTexture2D(int horizontalJigsawNumber, int verticalJigsawNumber, Texture2D jigsawPic)
    {
        JigsawBean tempBean = new JigsawBean();

        float picItemWith = (float)jigsawPic.width / (float)horizontalJigsawNumber;
        float picItemHigh = (float)jigsawPic.height / (float)verticalJigsawNumber;

        tempBean.JigsawUVWith = picItemWith / (float)jigsawPic.width;
        tempBean.JigsawUVHigh = picItemHigh / (float)jigsawPic.height;

        if (picItemWith > picItemHigh)
        {
            //拼图的高
            tempBean.JigsawHigh = m_JigsawUnitSize;
            //拼图的宽
            tempBean.JigsawWith = tempBean.JigsawHigh * (picItemWith / picItemHigh);
        }
        else
        {
            //拼图的宽
            tempBean.JigsawWith = m_JigsawUnitSize;
            //拼图的高
            tempBean.JigsawHigh = tempBean.JigsawWith * (picItemHigh / picItemWith);
        }
        return(tempBean);
    }
コード例 #4
0
    /// <summary>
    /// 设置UV坐标
    /// </summary>
    /// <param name="jigsawItem"></param>
    public void baseSetListUVPositionForItem(JigsawBean jigsawItem)
    {
        List <Vector3> listVertices = jigsawItem.ListVertices;
        Vector2        markLocation = jigsawItem.MarkLocation;

        if (listVertices == null)
        {
            LogUtil.log("没有顶点坐标");
            return;
        }
        if (markLocation == null)
        {
            LogUtil.log("没有标记坐标");
            return;
        }

        List <Vector2> listUVposition = new List <Vector2>();

        float xRatio = jigsawItem.JigsawWith / jigsawItem.JigsawUVWith;
        float yRatio = jigsawItem.JigsawHigh / jigsawItem.JigsawUVHigh;

        foreach (Vector3 item in listVertices)
        {
            float uvXposition = ((item.x + jigsawItem.JigsawWith / 2f) / xRatio) + (markLocation.x * jigsawItem.JigsawUVWith);
            float uvYposition = ((item.y + jigsawItem.JigsawHigh / 2f) / yRatio) + (markLocation.y * jigsawItem.JigsawUVHigh);
            listUVposition.Add(new Vector2(uvXposition, uvYposition));
        }
        setListUVPosition(jigsawItem, listUVposition);
    }
コード例 #5
0
    /// <summary>
    /// 增加碰撞
    /// </summary>
    /// <param name="jigsawContainerObj"></param>
    public static CompositeCollider2D addCollider(GameObject jigsawContainerObj)
    {
        Transform[] childsTFs = jigsawContainerObj.GetComponentsInChildren <Transform>();
        if (childsTFs != null)
        {
            int childsTFsSize = childsTFs.Length;
            for (int childPosition = 0; childPosition < childsTFsSize; childPosition++)
            {
                Transform       childsItemTF = childsTFs[childPosition];
                NormalJigsawCpt jigsawItem   = childsItemTF.GetComponent <NormalJigsawCpt>();
                if (jigsawItem == null)
                {
                    continue;
                }
                JigsawBean jigsawData = jigsawItem.getJigsawData();
                if (jigsawData == null)
                {
                    continue;
                }
                JigsawObjBuilder.setCollider2D(childsItemTF.gameObject, jigsawData.CenterVector, jigsawData.JigsawWith, jigsawData.JigsawHigh);
            }
            ;
        }

        CompositeCollider2D jigsawContainerCollider = jigsawContainerObj.AddComponent <CompositeCollider2D>();

        if (jigsawContainerCollider != null)
        {
            jigsawContainerCollider.geometryType   = CompositeCollider2D.GeometryType.Polygons;
            jigsawContainerCollider.generationType = CompositeCollider2D.GenerationType.Synchronous;
        }
        return(jigsawContainerCollider);
    }
コード例 #6
0
    /// <summary>
    /// 生成一个随机凹凸的拼图
    /// </summary>
    /// <param name="jigsawStyle"></param>
    /// <param name="jigsawW"></param>
    /// <param name="jigsawH"></param>
    /// <returns></returns>
    public static JigsawBean createJigsaw(JigsawStyleEnum jigsawStyle, float jigsawW, float jigsawH, Texture2D jigsawPic)
    {
        JigsawBean jigsawBean = new JigsawBean();
        //按样式生成不同的拼图碎片
        IBaseJigsawBuilder jigsawBuilder;

        JigsawBulgeEnum[] bulge;

        if (jigsawStyle == JigsawStyleEnum.Def)
        {
            jigsawBuilder = new NomralJigsawBuilder();
            bulge         = new JigsawBulgeEnum[4]
            {
                (JigsawBulgeEnum)DevUtil.getRandomInt(0, 2),
                (JigsawBulgeEnum)DevUtil.getRandomInt(0, 2),
                (JigsawBulgeEnum)DevUtil.getRandomInt(0, 2),
                (JigsawBulgeEnum)DevUtil.getRandomInt(0, 2)
            };
        }
        else
        {
            LogUtil.logError("没有相对于样式的拼图");
            return(null);
        }
        return(jigsawBuilder.buildJigsaw(jigsawW, jigsawH, bulge, jigsawPic));
    }
コード例 #7
0
    /// <summary>
    /// 创建拼图对象
    /// </summary>
    /// <param name="jigsawData"></param>
    /// <returns></returns>
    public static GameObject createJigsawGameObj(JigsawBean jigsawData, Texture2D jigsawPic)
    {
        GameObject jigsawGameObj = JigsawObjBuilder.buildJigsawGameObj(jigsawData, jigsawPic);

        jigsawData.JigsawGameObj = jigsawGameObj;
        return(jigsawGameObj);
    }
コード例 #8
0
    /// <summary>
    /// 初始化数据
    /// </summary>
    private void initData()
    {
        jigsawInfoData = CommonData.SelectPuzzlesInfo.puzzlesInfo;
        if (jigsawInfoData == null)
        {
            LogUtil.log("没有拼图数据");
            return;
        }
        string resFilePath          = jigsawInfoData.Data_file_path + jigsawInfoData.Mark_file_name;
        int    horizontalNumber     = jigsawInfoData.Horizontal_number;
        int    verticalJigsawNumber = jigsawInfoData.Vertical_number;

        if (resFilePath == null)
        {
            LogUtil.log("没有拼图图片路径");
            return;
        }
        if (horizontalNumber == 0 || verticalJigsawNumber == 0)
        {
            LogUtil.log("没有拼图生成数量");
            return;
        }
        Texture2D pic2D;

        if (jigsawInfoData.Data_type.Equals((int)JigsawResourcesEnum.Custom))
        {
            WWW www = ResourcesManager.LoadLocationData(resFilePath);
            pic2D = www.texture;
        }
        else
        {
            pic2D = ResourcesManager.LoadAssetBundlesTexture2DForBytes(resFilePath, jigsawInfoData.Mark_file_name);
        }

        if (pic2D == null)
        {
            LogUtil.log("没有源图片");
            return;
        }
        //生成拼图
        createJigsaw(CommonConfigure.PuzzlesShape, pic2D, horizontalNumber, verticalJigsawNumber);
        //获取图片的高和宽
        if (listJigsawBean != null && listJigsawBean.Count > 0)
        {
            JigsawBean itemJigsawBean = listJigsawBean[0];
            picAllWith = itemJigsawBean.JigsawWith * horizontalNumber;
            picAllHigh = itemJigsawBean.JigsawHigh * verticalJigsawNumber;
        }
        //生成围墙
        createWall(CommonConfigure.BorderShape, CommonConfigure.BorderColor, picAllWith, picAllHigh);
        //生成背景
        createBackground(CommonConfigure.Background, picAllWith, picAllHigh);
        //增加镜头控制
        addCameraControl(picAllWith * CreateGameWallUtil.wallScale / 2f, picAllHigh * CreateGameWallUtil.wallScale / 2f);
        //增加拼图控制
        addJigsawControl(picAllWith * CreateGameWallUtil.wallScale / 2f, picAllHigh * CreateGameWallUtil.wallScale / 2f);
        //启动动画
        startAnim();
    }
コード例 #9
0
 /// <summary>
 /// 设置顶点坐标
 /// </summary>
 /// <param name="jigsaw"></param>
 public void setListVertices(JigsawBean jigsaw, List <Vector3> listVertices)
 {
     if (jigsaw == null)
     {
         return;
     }
     jigsaw.ListVertices = listVertices;
 }
コード例 #10
0
 /// <summary>
 /// 设置拼图碎片对象
 /// </summary>
 /// <param name="jigsaw"></param>
 public void setJigsawGameObj(JigsawBean jigsaw, GameObject gameObj)
 {
     if (jigsaw == null)
     {
         return;
     }
     jigsaw.JigsawGameObj = gameObj;
 }
コード例 #11
0
 /// <summary>
 /// 设置每个边的凹凸情况
 /// </summary>
 /// <param name="jigsawBulges">凹凸集合</param>
 public void setBulgeEdge(JigsawBean jigsaw, JigsawBulgeEnum[] jigsawBulges)
 {
     if (jigsaw == null)
     {
         return;
     }
     jigsaw.ListBulge = jigsawBulges;
 }
コード例 #12
0
 /// <summary>
 /// 设置拼图块数
 /// </summary>
 /// <param name="jigsaw"></param>
 /// <param name="jigsawNumber"></param>
 public void setJigsawNumber(JigsawBean jigsaw, int jigsawNumber)
 {
     if (jigsaw == null)
     {
         return;
     }
     jigsaw.JigsawNumber = jigsawNumber;
 }
コード例 #13
0
 /// <summary>
 /// 设置拼图UV高
 /// </summary>
 /// <param name="jigsaw"></param>
 /// <param name="jigsawHigh"></param>
 public void setJigsawUVHigh(JigsawBean jigsaw, float jigsawUVHigh)
 {
     if (jigsaw == null)
     {
         return;
     }
     jigsaw.JigsawUVHigh = jigsawUVHigh;
 }
コード例 #14
0
 /// <summary>
 /// 设置拼图宽
 /// </summary>
 /// <param name="jigsaw"></param>
 /// <param name="jigsawWith"></param>
 public void setJigsawWith(JigsawBean jigsaw, float jigsawWith)
 {
     if (jigsaw == null)
     {
         return;
     }
     jigsaw.JigsawWith = jigsawWith;
 }
コード例 #15
0
 /// <summary>
 /// 设置当前样式
 /// </summary>
 public void setJigsawStyle(JigsawBean jigsaw, JigsawStyleEnum style)
 {
     if (jigsaw == null)
     {
         return;
     }
     jigsaw.JigsawStyle = style;
 }
コード例 #16
0
 /// <summary>
 /// 设置中心点坐标
 /// </summary>
 /// <param name="jigsaw"></param>
 /// <param name="centerVector"></param>
 public void setCenterVector(JigsawBean jigsaw, Vector3 centerVector)
 {
     if (jigsaw == null)
     {
         return;
     }
     jigsaw.CenterVector = centerVector;
 }
コード例 #17
0
 /// <summary>
 /// 设置UV坐标
 /// </summary>
 /// <param name="jigsaw"></param>
 public void setListUVPosition(JigsawBean jigsaw, List <Vector2> listUVposition)
 {
     if (jigsaw == null)
     {
         return;
     }
     jigsaw.ListUVposition = listUVposition;
 }
コード例 #18
0
    /// <summary>
    /// 设置当前拼图碎片相对图片的坐标
    /// </summary>
    /// <param name="jigsaw"></param>
    public void setMarkLocation(JigsawBean jigsaw, int markX, int markY)
    {
        if (jigsaw == null)
        {
            return;
        }
        Vector2 markVector = new Vector2(markX, markY);

        jigsaw.MarkLocation = markVector;
    }
コード例 #19
0
    /// <summary>
    /// 设置拼图组件
    /// </summary>
    /// <param name="jigsawGameObj"></param>
    private static void setJigsawCpt(GameObject jigsawGameObj, JigsawBean jigsawData)
    {
        JigsawStyleEnum jigsawStyle = jigsawData.JigsawStyle;
        NormalJigsawCpt jigsawCpt   = jigsawGameObj.AddComponent <NormalJigsawCpt>();

        jigsawCpt.setJigsawData(jigsawData);
        jigsawCpt.setEdgeMergeStatus(JigsawStyleNormalEdgeEnum.Left, JigsawMergeStatusEnum.Unincorporated);
        jigsawCpt.setEdgeMergeStatus(JigsawStyleNormalEdgeEnum.Above, JigsawMergeStatusEnum.Unincorporated);
        jigsawCpt.setEdgeMergeStatus(JigsawStyleNormalEdgeEnum.Right, JigsawMergeStatusEnum.Unincorporated);
        jigsawCpt.setEdgeMergeStatus(JigsawStyleNormalEdgeEnum.Below, JigsawMergeStatusEnum.Unincorporated);
    }
コード例 #20
0
    /// <summary>
    /// 创建拼图容器对象
    /// </summary>
    /// <param name="jigsawData"></param>
    /// <returns></returns>
    public static GameObject createJigsawContainerObj(JigsawBean jigsawData)
    {
        GameObject         jigsawGameObj = JigsawContainerGameObjBuilder.buildJigsawContainerObj();
        JigsawContainerCpt containerCpt  = jigsawGameObj.GetComponent <JigsawContainerCpt>();

        if (jigsawData != null)
        {
            containerCpt.addJigsaw(jigsawData);
        }
        return(jigsawGameObj);
    }
コード例 #21
0
    /// <summary>
    /// 设置拼图块所有边的凹凸情况
    /// </summary>
    /// <param name="listJigsaw">所有的拼图块</param>
    /// <param name="jigsawItem">当前拼图块</param>
    protected void setBulgeEdgeForItem(List <JigsawBean> listJigsaw, JigsawBean jigsawItem)
    {
        JigsawBulgeEnum leftBulge  = JigsawBulgeEnum.Smooth;
        JigsawBulgeEnum rightBulge = JigsawBulgeEnum.Smooth;
        JigsawBulgeEnum belowBulge = JigsawBulgeEnum.Smooth;
        JigsawBulgeEnum aboveBulge = JigsawBulgeEnum.Smooth;

        int     listJigsawCount = listJigsaw.Count;
        Vector2 markLocation    = jigsawItem.MarkLocation;

        if (markLocation == null)
        {
            return;
        }

        for (int childposition = 0; childposition < listJigsawCount; childposition++)
        {
            JigsawBean childJigsaw       = listJigsaw[childposition];
            Vector2    childMarkLocation = childJigsaw.MarkLocation;
            if (markLocation == null)
            {
                continue;
            }
            if (childMarkLocation.y.Equals(markLocation.y))
            {
                if ((childMarkLocation.x - markLocation.x) == 1)
                {
                    rightBulge = compareBulge(childJigsaw, JigsawStyleNormalEdgeEnum.Right);
                }
                else if ((childMarkLocation.x - markLocation.x) == -1)
                {
                    leftBulge = compareBulge(childJigsaw, JigsawStyleNormalEdgeEnum.Left);
                }
            }
            if (childMarkLocation.x.Equals(markLocation.x))
            {
                if ((childMarkLocation.y - markLocation.y) == 1)
                {
                    aboveBulge = compareBulge(childJigsaw, JigsawStyleNormalEdgeEnum.Above);
                }
                else if ((childMarkLocation.y - markLocation.y) == -1)
                {
                    belowBulge = compareBulge(childJigsaw, JigsawStyleNormalEdgeEnum.Below);
                }
            }
        }

        setBulgeEdge(jigsawItem, new JigsawBulgeEnum[4] {
            leftBulge, aboveBulge, rightBulge, belowBulge
        });
    }
コード例 #22
0
    /// <summary>
    /// 位置纠正
    /// </summary>
    /// <param name="mergeAnimDuration">纠正时间</param>
    /// <param name="addListJigsaw">需要纠正位置的拼图</param>
    public void jigsawLocationCorrect(float mergeAnimDuration, List <JigsawBean> addListJigsaw)
    {
        int jigsawListCount = addListJigsaw.Count;

        if (jigsawListCount != 0)
        {
            JigsawBean baseJigsawItem = listJigsaw[0];
            Transform  baseTF         = baseJigsawItem.JigsawGameObj.transform;
            //获取基准拼图的标记位
            Vector2 baseMarkLocation = baseJigsawItem.MarkLocation;
            //获取基准拼图的世界坐标
            Vector3 basePosition = baseTF.position;
            //获取基准拼图的本地坐标
            Vector3 baseLocationPosition = baseTF.InverseTransformPoint(basePosition);
            for (int listPosition = 0; listPosition < jigsawListCount; listPosition++)
            {
                //获取纠正拼图数据
                JigsawBean jigsawItem = addListJigsaw[listPosition];
                //获取纠正拼图的标记坐标
                Vector2 itemMarkLocation = jigsawItem.MarkLocation;
                //获取纠正拼图的对象
                Transform jigsawTF = jigsawItem.JigsawGameObj.transform;
                //获取纠正于基准拼图的标记偏移量
                Vector2 offsetMarkLocation = baseMarkLocation - itemMarkLocation;
                //获取纠正于基准拼图的本地位置偏移量
                Vector3 offsetPosition = new Vector2(offsetMarkLocation.x * jigsawItem.JigsawWith, offsetMarkLocation.y * jigsawItem.JigsawHigh);
                //获取纠正拼图的本地位置
                Vector3 jigsawItemLocationPosition = baseLocationPosition - offsetPosition;
                //获取纠正拼图的世界坐标
                Vector3 jigsawItemPosition = baseTF.TransformPoint(jigsawItemLocationPosition);

                //设置位置
                if (mergeAnimDuration <= 0)
                {
                    jigsawTF.position = jigsawItemPosition;
                    jigsawTF.rotation = transform.rotation;
                }
                else
                {
                    jigsawTF.DOMove(jigsawItemPosition, mergeAnimDuration);
                    jigsawTF.DORotate(transform.rotation.eulerAngles, mergeAnimDuration);
                }
            }
        }
    }
コード例 #23
0
    /// <summary>
    /// 添加拼图块
    /// </summary>
    /// <param name="jigsawData"></param>
    public void addJigsaw(JigsawBean jigsawData)
    {
        if (jigsawData == null)
        {
            LogUtil.logError("给拼图容器添加子拼图失败:没有JigsawBean");
            return;
        }
        GameObject jigsawGameObj = jigsawData.JigsawGameObj;

        if (jigsawGameObj == null)
        {
            LogUtil.logError("给拼图容器添加子拼图失败:没有JigsawGameObj");
            return;
        }
        jigsawGameObj.transform.parent = null;
        jigsawGameObj.transform.parent = transform;
        listJigsaw.Add(jigsawData);
    }
コード例 #24
0
    private IEnumerator createJigsaw()
    {
        while (isCreateJigsaw)
        {
            Texture2D  texture2D  = Texture2D.blackTexture;
            JigsawBean jigsawBean = CreateJigsawDataUtils.createJigsaw(JigsawStyleEnum.Def, 1f, 1f, texture2D);

            GameObject jigsawObj     = JigsawObjBuilder.buildJigsawGameObj(jigsawBean, texture2D);
            float      startX        = DevUtil.getRandomFloat(-(int)(DevUtil.GetScreenWith() / 2f), (int)(DevUtil.GetScreenWith() / 2f));
            float      startY        = DevUtil.GetScreenHeight() / 2f;
            float      endX          = DevUtil.getRandomFloat(-(int)(DevUtil.GetScreenWith() / 2f), (int)(DevUtil.GetScreenWith() / 2f));
            float      endY          = -DevUtil.GetScreenHeight() / 2f;
            Vector3    startPosition = new Vector3(startX, startY, 2);
            jigsawObj.transform.position = startPosition;
            jigsawObj.transform.DOMove(new Vector3(endX, endY, 2), 10);
            yield return(new WaitForSeconds(1f));
        }
    }
コード例 #25
0
    /// <summary>
    /// 获取该拼图附近能合并的点坐标
    /// </summary>
    public Dictionary <Vector2, Vector3> getMergeVectorList()
    {
        Dictionary <Vector2, Vector3> mapMergeList = new Dictionary <Vector2, Vector3>();
        int listJigsawCount = listJigsaw.Count;

        for (int jigsawPosition = 0; jigsawPosition < listJigsawCount; jigsawPosition++)
        {
            JigsawBean jigsawData     = listJigsaw[jigsawPosition];
            GameObject jigsawObj      = jigsawData.JigsawGameObj;
            Transform  jigsawTF       = jigsawObj.transform;
            Vector3    jigsawLocation = jigsawTF.InverseTransformPoint(jigsawTF.position);

            Vector2 leftMarkLocation = new Vector2(jigsawData.MarkLocation.x - 1, jigsawData.MarkLocation.y);
            Vector3 leftVector       = jigsawLocation + Vector3.left * jigsawData.JigsawWith;

            Vector2 aboveMarkLocation = new Vector2(jigsawData.MarkLocation.x, jigsawData.MarkLocation.y + 1);
            Vector3 aboveVector       = jigsawLocation + Vector3.up * jigsawData.JigsawHigh;

            Vector2 rightMarkLocation = new Vector2(jigsawData.MarkLocation.x + 1, jigsawData.MarkLocation.y);
            Vector3 rightVector       = jigsawLocation + Vector3.right * jigsawData.JigsawWith;

            Vector2 belowMarkLocation = new Vector2(jigsawData.MarkLocation.x, jigsawData.MarkLocation.y - 1);
            Vector3 belowVector       = jigsawLocation + Vector3.down * jigsawData.JigsawHigh;

            if (!mapMergeList.ContainsKey(leftMarkLocation))
            {
                mapMergeList.Add(leftMarkLocation, jigsawTF.TransformPoint(leftVector));
            }
            if (!mapMergeList.ContainsKey(aboveMarkLocation))
            {
                mapMergeList.Add(aboveMarkLocation, jigsawTF.TransformPoint(aboveVector));
            }
            if (!mapMergeList.ContainsKey(rightMarkLocation))
            {
                mapMergeList.Add(rightMarkLocation, jigsawTF.TransformPoint(rightVector));
            }
            if (!mapMergeList.ContainsKey(belowMarkLocation))
            {
                mapMergeList.Add(belowMarkLocation, jigsawTF.TransformPoint(belowVector));
            }
        }

        return(mapMergeList);
    }
コード例 #26
0
    /// <summary>
    /// 获取所有拼图坐标
    /// </summary>
    /// <returns></returns>
    public Dictionary <Vector2, Vector3> getJigsawPositionVectorList()
    {
        Dictionary <Vector2, Vector3> mapJigsawPositionVectorList = new Dictionary <Vector2, Vector3>();
        int listJigsawCount = listJigsaw.Count;

        for (int jigsawPosition = 0; jigsawPosition < listJigsawCount; jigsawPosition++)
        {
            JigsawBean jigsawData     = listJigsaw[jigsawPosition];
            GameObject jigsawObj      = jigsawData.JigsawGameObj;
            Transform  jigsawTF       = jigsawObj.transform;
            Vector3    jigsawLocation = jigsawTF.position;

            if (!mapJigsawPositionVectorList.ContainsKey(jigsawData.MarkLocation))
            {
                mapJigsawPositionVectorList.Add(jigsawData.MarkLocation, jigsawLocation);
            }
        }

        return(mapJigsawPositionVectorList);
    }
コード例 #27
0
    public override void setListVerticesForItem(JigsawBean jigsawItem)
    {
        base.baseSetListVerticesForItem(jigsawItem);

        float withX = jigsawItem.JigsawWith / 2f;
        float highY = jigsawItem.JigsawHigh / 2f;

        //根据凹凸属性生成坐标点
        List <Vector3> listVertices = new List <Vector3>();

        JigsawBulgeEnum[] listBulge  = jigsawItem.ListBulge;
        JigsawBulgeEnum   leftBulge  = listBulge[0];
        JigsawBulgeEnum   aboveBulge = listBulge[1];
        JigsawBulgeEnum   rightBulge = listBulge[2];
        JigsawBulgeEnum   belowBulge = listBulge[3];

        //添加起始点
        listVertices.Add(jigsawItem.CenterVector);

        //添加左下角点
        listVertices.Add(new Vector3(-withX, -highY));
        //添加左边点
        getTrapezoidVertices(listVertices, leftBulge, Direction2DEnum.Left, withX, highY);

        //添加左上角点
        listVertices.Add(new Vector3(-withX, highY));
        //添加上边点
        getTrapezoidVertices(listVertices, aboveBulge, Direction2DEnum.Above, withX, highY);

        //添加右上角点
        listVertices.Add(new Vector3(withX, highY));
        //添加右边
        getTrapezoidVertices(listVertices, rightBulge, Direction2DEnum.Right, withX, highY);

        //添加右下角点
        listVertices.Add(new Vector3(withX, -highY));
        //添加下边
        getTrapezoidVertices(listVertices, belowBulge, Direction2DEnum.Below, withX, highY);

        setListVertices(jigsawItem, listVertices);
    }
コード例 #28
0
    /// <summary>
    /// 基础-创建数据列表
    /// </summary>
    /// <param name="horizontalJigsawNumber"></param>
    /// <param name="verticalJigsawNumber"></param>
    /// <param name="jigsawPic"></param>
    /// <returns></returns>
    public List <JigsawBean> baseBuildJigsawList(JigsawStyleEnum style, int horizontalJigsawNumber, int verticalJigsawNumber, Texture2D jigsawPic)
    {
        // 根据图片获取item宽高和UV
        JigsawBean tempBean = getWithAndHighByTexture2D(horizontalJigsawNumber, verticalJigsawNumber, jigsawPic);
        // 获取拼图总块数
        int jigsawTotalNumber            = verticalJigsawNumber * horizontalJigsawNumber;
        List <JigsawBean> listJigsawBean = new List <JigsawBean>();

        for (int horizontal = 0; horizontal < horizontalJigsawNumber; horizontal++)
        {
            for (int vertical = 0; vertical < verticalJigsawNumber; vertical++)
            {
                //生成拼图对象
                JigsawBean jigsawItem = new JigsawBean();
                //确认拼图样式
                setJigsawStyle(jigsawItem, style);
                //确认当前拼图碎片相对图片的坐标
                setMarkLocation(jigsawItem, horizontal, vertical);
                //设置拼图长宽
                setJigsawHigh(jigsawItem, tempBean.JigsawHigh);
                setJigsawWith(jigsawItem, tempBean.JigsawWith);
                setJigsawUVHigh(jigsawItem, tempBean.JigsawUVHigh);
                setJigsawUVWith(jigsawItem, tempBean.JigsawUVWith);
                setJigsawNumber(jigsawItem, jigsawTotalNumber);
                listJigsawBean.Add(jigsawItem);
            }
        }
        int listJigsawBeanCount = listJigsawBean.Count;

        for (int jigsawposition = 0; jigsawposition < listJigsawBeanCount; jigsawposition++)
        {
            JigsawBean jigsawItem = listJigsawBean[jigsawposition];
            //确认拼图每个边的凹凸情况
            setBulgeEdgeForItem(listJigsawBean, jigsawItem);
            //确认拼图顶点坐标和UVposition
            setListVerticesForItem(jigsawItem);
            baseSetListUVPositionForItem(jigsawItem);
        }
        return(listJigsawBean);
    }
コード例 #29
0
    /// <summary>
    /// 设置顶点坐标
    /// </summary>
    /// <param name="jigsawItem"></param>
    public override void setListVerticesForItem(JigsawBean jigsawItem)
    {
        List <Vector3> listVertices = new List <Vector3>();

        base.baseSetListVerticesForItem(jigsawItem);

        float withX = jigsawItem.JigsawWith / 2f;
        float highY = jigsawItem.JigsawHigh / 2f;

        //添加起始点
        listVertices.Add(jigsawItem.CenterVector);
        //添加左下角点
        listVertices.Add(new Vector3(-withX, -highY));
        //添加左上角点
        listVertices.Add(new Vector3(-withX, highY));
        //添加右上角点
        listVertices.Add(new Vector3(withX, highY));
        //添加右下角点
        listVertices.Add(new Vector3(withX, -highY));

        setListVertices(jigsawItem, listVertices);
    }
コード例 #30
0
    /// <summary>
    /// 设置UV坐标集
    /// </summary>
    /// <param name="jigsawItem"></param>
    public override void setListUVPosition(JigsawBean jigsawItem)
    {
        List <Vector3> listVertices = jigsawItem.ListVertices;

        if (listVertices == null)
        {
            LogUtil.log("没有顶点坐标");
            return;
        }

        List <Vector2> listUVposition = new List <Vector2>();

        float jigsawWithAndr = jigsawItem.JigsawWith + m_JigsawBulgeR;
        float jigsawHighAndr = jigsawItem.JigsawHigh + m_JigsawBulgeR;

        float picRatio;

        if (jigsawItem.JigsawUVWith > jigsawItem.JigsawUVHigh)
        {
            picRatio = jigsawItem.JigsawUVHigh / jigsawHighAndr;
        }
        else
        {
            picRatio = jigsawItem.JigsawUVWith / jigsawWithAndr;
        }


        float xRatio = 1 / jigsawItem.JigsawUVWith;
        float yRatio = 1 / jigsawItem.JigsawUVHigh;


        foreach (Vector3 item in listVertices)
        {
            float uvXposition = (((item.x + jigsawWithAndr / 2f) * picRatio)) * xRatio;
            float uvYposition = (((item.y + jigsawHighAndr / 2f) * picRatio)) * yRatio;
            listUVposition.Add(new Vector2(uvXposition, uvYposition));
        }
        setListUVPosition(jigsawItem, listUVposition);
    }