Exemplo n.º 1
0
    /// <summary>
    /// 分散动画
    /// </summary>
    private void dispersedAnim()
    {
        int listCount = mListObj.Count;

        for (int i = 0; i < listCount; i++)
        {
            GameObject itemObj = mListObj[i];
            Transform  itemTF  = itemObj.transform;
            //设置层级
            JigsawContainerCpt containerCpt = itemTF.GetComponent <JigsawContainerCpt>();
            if (containerCpt == null)
            {
                continue;
            }
            containerCpt.setSortingOrder(listCount - i);

            //设置动画
            Tweener tweener = itemTF
                              .DOScale(new Vector3(1, 1, 1), animOffsetTime * i)
                              .SetDelay(mPrependTime)
                              .OnComplete(delegate()
            {
                GameStartAnimationManager.PuzzlesStartPre(itemObj);
            });
        }
        Tweener gameStartTweener = mGameStartControl.transform
                                   .DOScale(new Vector3(1, 1, 1), mPrependTime + listCount * animOffsetTime)
                                   .OnComplete(delegate()
        {
            mGameStartControl.gameStart();
        });
    }
    /// <summary>
    /// 当鼠标按下时触发(其实就是初始化_vec3Offset值,需要注意的是一切的位置坐标都是为了得到这个差值)
    /// </summary>
    private void onMouseDown()
    {
        //获取鼠标相对于摄像头的点击位置
        Vector3 mousePos   = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        Vector2 mousePos2D = new Vector2(mousePos.x, mousePos.y);

        hitRC = Physics2D.Raycast(mousePos2D, Vector2.zero);
        if (hitRC.collider != null && hitRC.transform.GetComponent <JigsawContainerCpt>() != null)
        {
            Collider2D jigsawCollider  = hitRC.collider;
            Transform  jigsawTransform = jigsawCollider.transform;
            //让被选中的物体停止移动
            Rigidbody2D baseRB = jigsawTransform.GetComponent <Rigidbody2D>();
            baseRB.velocity    = Vector3.zero;
            baseRB.constraints = RigidbodyConstraints2D.FreezeAll;
            baseRB.constraints = RigidbodyConstraints2D.None;
            //在鼠标按下时,鼠标和物体在控件坐标在空间上的位置差
            jigsawContainerCpt = jigsawTransform.GetComponent <JigsawContainerCpt>();
            if (jigsawContainerCpt != null)
            {
                isSelect   = true;
                vec3Offset = jigsawTransform.position - new Vector3(mousePos.x, mousePos.y);
                jigsawContainerCpt.setIsSelect(true);
            }
        }
    }
    /// <summary>
    /// 靠拢动画
    /// </summary>
    private void closureAnim()
    {
        int listCount = mListObj.Count;

        for (int i = 0; i < listCount; i++)
        {
            GameObject itemObj = mListObj[i];
            Transform  itemTF  = itemObj.transform;

            //设置层级
            JigsawContainerCpt containerCpt = itemTF.GetComponent <JigsawContainerCpt>();
            if (containerCpt == null)
            {
                continue;
            }
            containerCpt.setSortingOrder(listCount - i);
            //设置动画
            Tweener tweener = itemTF
                              .DOMove(startPosition, closeureTime)
                              .SetDelay(mPrependTime + animOffsetTime * i);
            if (i.Equals(listCount - 1))
            {
                tweener.OnComplete(dispersedAnim);
            }
        }
    }
Exemplo n.º 4
0
    /// <summary>
    /// 创建漏斗
    /// </summary>
    private void buildFunnel()
    {
        int listCount = mListObj.Count;

        for (int i = 0; i < listCount; i++)
        {
            GameObject itemObj = mListObj[i];
            //设置层级
            JigsawContainerCpt containerCpt = itemObj.GetComponent <JigsawContainerCpt>();
            if (containerCpt == null)
            {
                continue;
            }
            containerCpt.setSortingOrder(listCount - i);

            float picW = mGameStartControl.picAllWith;
            float picH = mGameStartControl.picAllHigh;

            float moveX = DevUtil.getRandomFloat(-picW / 2f, picW / 2f);
            float rangY = (picH / 2f) / ((picW / 2f) / ((picW / 2f) - (Mathf.Abs(moveX))));
            float moveY = DevUtil.getRandomFloat((picH / 2f) - rangY, picH / 2f);
            itemObj
            .transform
            .DOMove(new Vector3(moveX, moveY), mBuildFunnelTime)
            .SetDelay(mPrependTime);
        }
        mGameStartControl.transform
        .DOScale(new Vector3(1, 1, 1), mPrependTime + mBuildFunnelTime)
        .OnComplete(delegate()
        {
            moveToMouth();
        });
    }
Exemplo n.º 5
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;
            }
        }
    }
Exemplo n.º 6
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);
    }
    public override void startAnim()
    {
        float radius = 0;

        if (mGameStartControl.picAllWith > mGameStartControl.picAllHigh)
        {
            radius = mGameStartControl.picAllHigh;
        }
        else
        {
            radius = mGameStartControl.picAllWith;
        }

        int            listCount     = mListObj.Count;
        List <Vector3> listCircleVec = GeometryUtil.getCircleVertices(mStartPosition, radius * 1.9f, listCount, true, CircleStartVectorEnum.Left);
        int            circleCount   = listCircleVec.Count;

        for (int i = 0; i < listCount; i++)
        {
            GameObject itemObj = mListObj[i];
            //设置层级
            JigsawContainerCpt containerCpt = itemObj.transform.GetComponent <JigsawContainerCpt>();
            if (containerCpt == null)
            {
                continue;
            }
            containerCpt.setSortingOrder(listCount - i);

            //  int mListMoveCount=  DevUtil.getRandomInt(1, circleCount);
            Vector3[] listMove = new Vector3[mListMoveCount];
            for (int f = 0; f < mListMoveCount; f++)
            {
                int randomPosition = DevUtil.getRandomInt(0, circleCount - 1);
                listMove[f] = listCircleVec[randomPosition];
            }
            //开始run
            itemObj.transform
            .DOPath(listMove, mRunTime)
            .SetDelay(mPrependTime)
            .OnComplete(delegate() {
                GameStartAnimationManager.PuzzlesStartPre(itemObj);
            });
        }

        Tweener gameStartTweener = mGameStartControl.transform
                                   .DOScale(new Vector3(1, 1, 1), mPrependTime + mRunTime)
                                   .OnComplete(delegate()
        {
            mGameStartControl.gameStart();
        });
    }
    private void decomposeAnim()
    {
        if (mListObj == null)
        {
            return;
        }
        int listCount = mListObj.Count;

        float radius = 0;

        if (mGameStartControl == null)
        {
            return;
        }

        if (mGameStartControl.picAllWith > mGameStartControl.picAllHigh)
        {
            radius = mGameStartControl.picAllHigh;
        }
        else
        {
            radius = mGameStartControl.picAllWith;
        }

        List <Vector3> listCircleVec = GeometryUtil.getCircleVertices(startPosition, radius * 1.9f, listCount, true, CircleStartVectorEnum.Left);

        for (int i = 0; i < listCount; i++)
        {
            GameObject itemObj = mListObj[i];
            Transform  itemTF  = itemObj.transform;

            //设置层级
            JigsawContainerCpt containerCpt = itemTF.GetComponent <JigsawContainerCpt>();
            if (containerCpt == null)
            {
                continue;
            }
            containerCpt.setSortingOrder(listCount - i);

            //设置动画
            Tweener tweener = itemTF
                              .DOMove(listCircleVec[i], moveTime)
                              .SetDelay(mPrependTime);
            if (i.Equals(listCount - 1))
            {
                tweener.OnComplete(rotateAnim);
            }
        }
    }
Exemplo n.º 9
0
    /// <summary>
    /// 自动完成拼图
    /// </summary>
    public static void CompletePuzzles(BaseMonoBehaviour content)
    {
        CommonData.GameStatus = 3;
        CommonData.IsCheating = true;
        JigsawContainerCpt[] cptList = UnityEngine.Object.FindObjectsOfType <JigsawContainerCpt>();
        if (cptList == null || cptList.Length == 0)
        {
            return;
        }
        //设置不可在拖拽
        CommonData.IsDargMove = false;
        JigsawContainerCpt tempCpt = cptList[0];

        content.StartCoroutine(delayComplete(content, cptList, tempCpt, 10f));
    }
Exemplo n.º 10
0
    static IEnumerator delayComplete(BaseMonoBehaviour content, JigsawContainerCpt[] cptList, JigsawContainerCpt tempCpt, float mergeTime)
    {
        foreach (JigsawContainerCpt itemCpt in cptList)
        {
            Rigidbody2D itemRB = itemCpt.GetComponent <Rigidbody2D>();
            if (itemCpt != null)
            {
                //设置质量为0 防止动画时错位
                itemRB.velocity = Vector3.zero;
                //顺便冻结缸体
                itemRB.constraints = RigidbodyConstraints2D.FreezeAll;
            }
            CompositeCollider2D itemCollider = itemCpt.GetComponent <CompositeCollider2D>();
            if (itemCollider != null)
            {
                UnityEngine.Object.Destroy(itemCollider);
            }
        }
        yield return(new WaitForEndOfFrame());

        for (int i = 0; i < cptList.Length; i++)
        {
            if (mergeTime > 5)
            {
                tempCpt.transform.position      = tempCpt.startPosition;
                tempCpt.transform.localRotation = tempCpt.startRotation;
            }
            JigsawContainerCpt itemCpt = cptList[i];
            itemCpt.isSelect = false;
            // 添加拼图碎片到容器里
            if (cptList[i] != tempCpt)
            {
                tempCpt.addJigsawList(itemCpt.listJigsaw);
                //位置纠正
                tempCpt.jigsawLocationCorrect(mergeTime, itemCpt.listJigsaw);
                // 最后删除当前容器
                UnityEngine.Object.Destroy(itemCpt.gameObject);
            }
            yield return(new WaitForSeconds(0.1f));
        }
        tempCpt.mergeDeal(mergeTime);
    }
Exemplo n.º 11
0
    /// <summary>
    /// 读取拼图进度
    /// </summary>
    /// <param name="content"></param>
    /// <param name="progressBean"></param>
    public static void setGameProgress(BaseMonoBehaviour content, PuzzlesProgressBean progressBean)
    {
        JigsawContainerCpt[] cptList = UnityEngine.Object.FindObjectsOfType <JigsawContainerCpt>();
        if (cptList == null || cptList.Length == 0)
        {
            return;
        }

        List <PuzzlesProgressItemBean> progress = progressBean.progress;

        foreach (PuzzlesProgressItemBean itemProgress in progress)
        {
            JigsawContainerCpt tempCpt = null;

            //其次需要合并的子对象
            List <JigsawContainerCpt> tempListCpt = new List <JigsawContainerCpt>();
            foreach (JigsawContainerCpt itemCpt in cptList)
            {
                //首先获取父对象
                if (itemCpt.listJigsaw[0].MarkLocation == itemProgress.markPostion)
                {
                    tempCpt = itemCpt;
                }

                foreach (Vector2 listPuzzleItem in itemProgress.listPuzzles)
                {
                    if (listPuzzleItem == itemCpt.listJigsaw[0].MarkLocation)
                    {
                        tempListCpt.Add(itemCpt);
                    }
                }
            }
            JigsawContainerCpt[] tempArraryCpt = DevUtil.listToArray(tempListCpt);
            if (tempCpt != null)
            {
                //设置不可在拖拽
                CommonData.IsDargMove = false;
                content.StartCoroutine(delayComplete(content, tempArraryCpt, tempCpt, 1f));
            }
        }
    }
Exemplo n.º 12
0
    /// <summary>
    /// 碰撞处理
    /// </summary>
    /// <param name="collision"></param>
    private void collisionCheck(Collider2D collision)
    {
        if (!isOpenMergeCheck)
        {
            return;
        }
        if (!isSelect)
        {
            return;
        }
        //获取被撞物体和其父对象
        JigsawContainerCpt collisionJCC = collision.gameObject.GetComponent <JigsawContainerCpt>();

        if (collisionJCC == null)
        {
            return;
        }
        if (checkMerge(collisionJCC))
        {
            //设置不可在拖拽
            CommonData.IsDargMove = false;
            isSelect = false;
            //设置质量为0 防止动画时错位
            Rigidbody2D collisionRB = collisionJCC.GetComponent <Rigidbody2D>();
            Rigidbody2D thisRB      = gameObject.GetComponent <Rigidbody2D>();
            if (collisionRB != null && thisRB != null)
            {
                collisionRB.velocity = Vector3.zero;
                thisRB.velocity      = Vector3.zero;
                //顺便冻结缸体
                collisionRB.constraints = RigidbodyConstraints2D.FreezeAll;
                thisRB.constraints      = RigidbodyConstraints2D.FreezeAll;
                // 添加拼图碎片到碰撞容器里
                collisionJCC.addJigsawList(listJigsaw);
                collisionJCC.jigsawLocationCorrect(mergeAnimDuration, listJigsaw);
            }
            collisionJCC.mergeDeal(mergeAnimDuration);
            // 最后删除当前容器
            Destroy(gameObject);
        }
    }
Exemplo n.º 13
0
    private void changeAnim()
    {
        int            listCount         = mListObj.Count;
        List <Vector3> otherListPosition = new List <Vector3>();

        for (int i = 0; i < listCount; i++)
        {
            otherListPosition.Add(mListObj[i].transform.position);
        }
        for (int i = 0; i < listCount; i++)
        {
            GameObject itemObj = mListObj[i];
            Transform  itemTF  = itemObj.transform;

            //设置层级
            JigsawContainerCpt containerCpt = itemTF.GetComponent <JigsawContainerCpt>();
            if (containerCpt == null)
            {
                continue;
            }
            containerCpt.setSortingOrder(listCount - i);

            int     changeRandom   = DevUtil.getRandomInt(0, otherListPosition.Count - 1);
            Vector3 changePosition = otherListPosition[changeRandom];
            itemTF
            .DOMove(changePosition, changeTime)
            .SetDelay(mPrependTime)
            .OnComplete(delegate() {
                GameStartAnimationManager.PuzzlesStartPre(itemObj);
            });
            otherListPosition.Remove(changePosition);
        }

        Tweener gameStartTweener = mGameStartControl.transform
                                   .DOScale(new Vector3(1, 1, 1), changeTime + mPrependTime)
                                   .OnComplete(delegate()
        {
            mGameStartControl.gameStart();
        });
    }
Exemplo n.º 14
0
    /// <summary>
    /// 检测是否能合并
    /// </summary>
    public bool checkMerge(JigsawContainerCpt collisionJCC)
    {
        Dictionary <Vector2, Vector3> collisionMergeVectorList = collisionJCC.getMergeVectorList();
        Dictionary <Vector2, Vector3> jigsawPositionVectorList = this.getJigsawPositionVectorList();
        float thisAngles      = transform.eulerAngles.z;
        float collisionAngles = collisionJCC.transform.eulerAngles.z;
        float offsetAngles    = Mathf.Abs(thisAngles - collisionAngles);

        foreach (KeyValuePair <Vector2, Vector3> jigsawPositionItem in jigsawPositionVectorList)
        {
            foreach (KeyValuePair <Vector2, Vector3> collisionMergeItem in collisionMergeVectorList)
            {
                if (jigsawPositionItem.Key.Equals(collisionMergeItem.Key))
                {
                    float distance = Vector3.Distance(jigsawPositionItem.Value, collisionMergeItem.Value);
                    if (distance < mergeVectorOffset && offsetAngles < mergeAnglesOffset)
                    {
                        return(true);
                    }
                }
            }
        }
        return(false);
    }
Exemplo n.º 15
0
    /// <summary>
    /// 游戏完成
    /// </summary>
    public void gameFinsh()
    {
        CommonData.GameStatus   = 2;
        CommonData.IsDargMove   = false;
        CommonData.IsMoveCamera = false;
        //删除游戏进度
        PuzzlesProgressBean progressTemp = new PuzzlesProgressBean();

        progressTemp.puzzleId     = CommonData.SelectPuzzlesInfo.puzzlesInfo.id;
        progressTemp.markFileName = CommonData.SelectPuzzlesInfo.puzzlesInfo.mark_file_name;
        ((PuzzlesProgressDSHandle)DataStorageManage.getPuzzlesProgressDSHandle()).deleteData(progressTemp);

        float startCameraOrthographicSize = cameraControl.startCameraOrthographicSize;
        //结束游戏时间
        GameMainUIControl gameMainUI   = uiMasterControl.getUIByType <GameMainUIControl>(UIEnum.GameMainUI);
        TimeBean          completeTime = null;

        if (gameMainUI != null)
        {
            gameMainUI.endTimer();
            completeTime = gameMainUI.getGameTimer();
        }

        if (!CommonData.IsCheating)
        {
            if (CommonData.SelectPuzzlesInfo.puzzlesInfo.data_type.Equals((int)JigsawResourcesEnum.Custom))
            {
            }
            else
            {
                //增加PP
                int addPuzzlesPoint = CommonData.SelectPuzzlesInfo.puzzlesInfo.level * 2;
                DialogManager.createPuzzlesPointAddDialog(addPuzzlesPoint);
            }
            //保存数据
            GameUtil.FinshSaveCompleteData(CommonData.SelectPuzzlesInfo, completeTime);
        }

        //动画结束后显示排行榜
        transform.DOScale(new Vector3(1, 1), gameFinshAnimTime).OnComplete(delegate()
        {
            if (CommonData.SelectPuzzlesInfo.puzzlesInfo.data_type.Equals((int)JigsawResourcesEnum.Custom))
            {
                SceneUtil.jumpMainScene();
            }
            else
            {
                int leaderType = 0;
                if (CommonData.IsCheating)
                {
                    leaderType = 1;
                }
                else
                {
                    //没有作弊 放烟花
                    //GameObject dialogObj = Instantiate(ResourcesManager.LoadData<GameObject>("Prefab/Particle/Background/GameFinshParticle"));
                    //Canvas gameFinshCanvas = dialogObj.GetComponent<Canvas>();
                    //gameFinshCanvas.renderMode = RenderMode.ScreenSpaceCamera;
                    //gameFinshCanvas.worldCamera = Camera.main;
                }
                DialogManager
                .createLeaderBoradDialog(leaderType, CommonData.SelectPuzzlesInfo)
                .setUserScore(completeTime.totalSeconds)
                .setCallBack(this)
                .setCancelButtonStr(CommonData.getText(21))
                .setSubmitButtonStr(CommonData.getText(23));
            }
            CommonData.IsCheating = false;
        });

        //镜头移动
        cameraControl.transform.DOMove(cameraControl.startCameraPosition, gameFinshAnimTime);
        Tween cameraTW = DOTween
                         .To(() => Camera.main.orthographicSize, x => Camera.main.orthographicSize = x, startCameraOrthographicSize, gameFinshAnimTime);
        //图像归位
        int containerListSize = containerList.Count;

        for (int i = 0; i < containerListSize; i++)
        {
            GameObject container = containerList[i];
            if (container != null)
            {
                JigsawContainerCpt containerCpt = container.GetComponent <JigsawContainerCpt>();
                Rigidbody2D        containerRB  = container.GetComponent <Rigidbody2D>();
                containerRB.Sleep();

                container.transform.DORotate(new Vector3(containerCpt.startRotation.x, containerCpt.startRotation.y), gameFinshAnimTime);
                container.transform.DOMove(containerCpt.startPosition, gameFinshAnimTime);
                break;
            }
        }

        //设置成就
        List <PuzzlesCompleteStateBean> listCompleteState = ((PuzzlesCompleteDSHandle)DataStorageManage.getPuzzlesCompleteDSHandle()).getDefAllData();

        if (listCompleteState != null && listCompleteState.Count != 0)
        {
            int completeNumber = 0;
            foreach (PuzzlesCompleteStateBean itemState in listCompleteState)
            {
                if (itemState.completeTime != null && itemState.completeTime.totalSeconds != 0)
                {
                    completeNumber++;
                }
            }
            IUserAchievementHandle userAchievement = new UserStatsHandleImpl();
            userAchievement.userCompleteNumberChange(completeNumber);
        }
    }