コード例 #1
0
ファイル: PiceMover.cs プロジェクト: Peng-Zhiyuan/puzzle
 public static void SetBlockToBoard(Pice pice, int indexX, int indexY)
 {
     PiceMover.SetBlockToFloat(pice);
     pice.ForeachPiceOfBlockWhitShift((onePice, shift) => {
         var onePiceIndexX = indexX + shift.x;
         var onePiceIndexY = indexY + shift.y;
         Puzzle.instance.board.Put(onePice, onePiceIndexX, onePiceIndexY);
     });
 }
コード例 #2
0
ファイル: Puzzle.cs プロジェクト: Peng-Zhiyuan/puzzle
    public void LoadInfo(PuzzleInfo info)
    {
        // 把所有 pice 拿起
        foreach (var pice in PiceManager.list)
        {
            //pice.SetToFloating();
            PiceMover.SetBlockToFloat(pice);
            pice.StopTween();
        }

        // 逐个设置 pice 归属
        foreach (var i in info.piceInfoList)
        {
            var index = i.index;
            var pice  = PiceManager.GetByIndex(index);
            if (i.owner == PiceOwner.Board)
            {
                //pice.SetToBoard(i.boardX, i.boardY);
                PiceMover.SetBlockToBoard(pice, i.boardX, i.boardY);
            }
            else if (i.owner == PiceOwner.Side)
            {
                //pice.SetToSide(i.sideIndex);
                //side.Append(pice);
                PiceMover.SetToSide(pice, -1);
            }
            else if (i.owner == PiceOwner.Floating)
            {
                PiceMover.SetToSide(pice, -1);
                //pice.SetToSide(side.count - 1);
            }
            pice.isFixed      = i.isFixed;
            pice.SortingOrder = i.sortingOrder;
            // linking
            pice.linkingList.Clear();
            foreach (var linkingInfo in i.LinkingInfoList)
            {
                var linking = new Linking();
                linking.directory = linkingInfo.directory;
                var linkingToPinceIndex = linkingInfo.piceIndex;
                var linkingToPice       = PiceManager.GetByIndex(linkingToPinceIndex);
                linking.pice = linkingToPice;
                pice.linkingList.Add(linking);
            }
            // edge type
            pice.LeftType   = i.leftType;
            pice.RightType  = i.rightType;
            pice.BottomType = i.bottomType;
            pice.TopType    = i.topType;
        }
        board.RepositionAllPiceNoAnimation();
        side.RepositionPiceListNoAnimation();

        LayerOrderDispatcher.next = info.nextOrder;
    }
コード例 #3
0
ファイル: PiceMover.cs プロジェクト: Peng-Zhiyuan/puzzle
 public static void SetToSide(Pice pice, int index)
 {
     Assert.IsTrue(pice.linkingList.Count == 0, "only non-linked pice can'bt be set to side.");
     PiceMover.SetBlockToFloat(pice);
     if (index != -1)
     {
         Puzzle.instance.side.Insert(pice, index);
         pice.owner = PiceOwner.Side;
     }
     else
     {
         Puzzle.instance.side.Append(pice);
         pice.owner = PiceOwner.Side;
     }
 }
コード例 #4
0
ファイル: Puzzle.cs プロジェクト: Peng-Zhiyuan/puzzle
    /// <summary>
    /// 每当开始新拼图时调用
    /// </summary>
    /// <param name="texture"></param>
    /// <param name="cellPixelSize"></param>
    public void StartPuzzle(Sprite content, int cellPixelSize)
    {
        Clean();
        EXPAND         = (int)(cellPixelSize * 0.25f);
        expanedTexture = ExpandTexture(content);
        map            = new Map();
        map.Init(expanedTexture, EXPAND, cellPixelSize);

        board.Init(map.validWidth, map.validHeight, map.xCount, map.yCount);
        side.Init(200);
        //side.Init(map.validHeight, map.yCount);
        var count = map.xCount * map.yCount;

        var indexList = new List <int>();

        for (int i = 0; i < count; i++)
        {
            indexList.Add(i);
        }
        if (SHUFF)
        {
            indexList = ArraryUtil.GetRandomList(indexList);
        }
        foreach (var index in indexList)
        {
            var pice = PiceManager.Create(map, index);
            PiceMover.SetToSide(pice, -1);
        }
        //side.RepositionPiceList();
        side.RepositionPiceListNoAnimation();

        if (!DEBUG)
        {
            core.HideDot();
        }
        // board 的 scrollRect content位置归零
        var p = side.scrollView.content.localPosition;

        p.x = 0;
        side.scrollView.content.localPosition = p;
        // 设置 valid rect sprite 到参考图
        core.validSpriet.sprite = map.validSprite;
        core.validSpriet.gameObject.SetActive(false);
    }
コード例 #5
0
ファイル: Puzzle.cs プロジェクト: Peng-Zhiyuan/puzzle
 public void UpdatePiceOwner(Pice pice)
 {
     if (pice.owner == PiceOwner.Side)
     {
         var inSide = side.Rect.Contains(pice.transform.position);
         if (!inSide)
         {
             // 认为从side中拖出
             //side.Remove(pice);
             PiceMover.SetBlockToFloat(pice);
             side.RepositionPiceList();
             pice.TweenToScale(1);
             side.scrollView.AnimateFixContentPosition();
         }
         else
         {
             var rect = side.GetCellRect(pice.sideIndex);
             if (!rect.Contains(pice.transform.position))
             {
                 // 认为在side中移动了位置
                 //side.Remove(pice);
                 PiceMover.SetBlockToFloat(pice);
                 var insertIndex = side.GetNearestCellIndex(pice);
                 PiceMover.SetToSide(pice, insertIndex);
                 side.RepositionPiceList();
                 side.scrollView.AnimateFixContentPosition();
             }
         }
     }
     else if (pice.owner != PiceOwner.Side)
     {
         var inSide = side.Rect.Contains(pice.transform.position);
         if (inSide)
         {
             // 认为拖入side
             var insertIndex = side.GetNearestCellIndex(pice);
             PiceMover.SetToSide(pice, insertIndex);
             side.RepositionPiceList();
             side.scrollView.AnimateFixContentPosition();
         }
     }
 }
コード例 #6
0
ファイル: Puzzle.cs プロジェクト: Peng-Zhiyuan/puzzle
    public void OnRootPiceDragEnd(Pice pice)
    {
        lastDragPice = pice;
        UpdatePiceOwner(pice);
        // 没有连结的 pice, 当拖放释放点不在 board 上时,自动回到 side 上
        if (pice.linkingList.Count == 0)
        {
            var inboard = board.Rect.Contains(pice.transform.position);
            if (!inboard)
            {
                var insertIndex = side.GetNearestCellIndex(pice);
                PiceMover.SetToSide(pice, insertIndex);
                side.RepositionPiceList();
                side.scrollView.AnimateFixContentPosition();
                return;
            }
        }

        // 应该放置到 board 上时
        //board.PlacePice(pice);
        var index = board.GetNearestCellIndex(pice);

        PiceMover.SetBlockToBoard(pice, index.x, index.y);
        var x = board.GetCenterX(index.x);
        var y = board.GetCenterY(index.y);

        pice.TweenBlockToPosition(x, y);
        //board.RepositionAllPice();

        CheckNewLink();
        CheckNewFix();
        var complete = IsAllPiceFixed();

        if (complete)
        {
            Debug.Log("[Core] Complete");
            CoroutineManager.Create(PlayCompleteTask());
        }
    }
コード例 #7
0
ファイル: Pice.cs プロジェクト: Peng-Zhiyuan/puzzle
 public void SetToFloating()
 {
     PiceMover.SetBlockToFloat(this);        //RemoveFromOwner();
     this.owner = PiceOwner.Floating;
 }