示例#1
0
    private void TakeSnapShot(PuzzlePivot pivot)
    {
        snapShot = TakeSnapShot();

        if (pivot.collectableObject != null)
        {
            collectableHelper.TakeCollectableSnapshot();
            pivot.collectableObject.SetActive(false);
        }
    }
    public static SnapablePoint GetSnapablePointWithPieceId(PuzzlePivot puzzlePivot, string id)
    {
        foreach (var snapablePoint in puzzlePivot.snapablePoints)
        {
            if (snapablePoint.piece != null && snapablePoint.piece.id == id)
            {
                return(snapablePoint);
            }
        }

        return(null);
    }
    public static Vector2 GetRelativePosition(PuzzlePivot puzzlePivot, int currentIndex, int otherIndex)
    {
        int piecesOnY = (int)puzzlePivot.numberOfPieces.y;

        var currentX = Mathf.FloorToInt((float)currentIndex / piecesOnY);
        var currentY = currentIndex % piecesOnY;

        var otherX = Mathf.FloorToInt((float)otherIndex / piecesOnY);
        var otherY = otherIndex % piecesOnY;

        return(new Vector2(otherX - currentX, otherY - currentY));
    }
    public static SnapablePoint GetSnapablePointFromDirection(PuzzlePivot puzzlePivot, SnapablePoint currentSnapablePoint, Direction direction)
    {
        var index     = puzzlePivot.snapablePoints.IndexOf(currentSnapablePoint);
        int piecesOnY = (int)puzzlePivot.numberOfPieces.y;

        if (direction == Direction.Right)
        {
            var newIndex = index + piecesOnY;
            if (newIndex < 0 || newIndex >= puzzlePivot.snapablePoints.Count)
            {
                return(null);
            }
            return(puzzlePivot.snapablePoints[newIndex]);
        }
        if (direction == Direction.Left)
        {
            var newIndex = index - piecesOnY;
            if (newIndex < 0 || newIndex >= puzzlePivot.snapablePoints.Count)
            {
                return(null);
            }
            return(puzzlePivot.snapablePoints[newIndex]);
        }
        if (direction == Direction.Up)
        {
            var newIndex = index + 1;
            if (newIndex % piecesOnY == 0)
            {
                return(null);
            }
            if (newIndex < 0 || newIndex >= puzzlePivot.snapablePoints.Count)
            {
                return(null);
            }
            return(puzzlePivot.snapablePoints[newIndex]);
        }
        if (direction == Direction.Down)
        {
            var newIndex = index - 1;
            if (index % piecesOnY == 0)
            {
                return(null);
            }
            if (newIndex < 0 || newIndex >= puzzlePivot.snapablePoints.Count)
            {
                return(null);
            }
            return(puzzlePivot.snapablePoints[newIndex]);
        }
        return(null);
    }
示例#5
0
    public bool SetupNextPuzzlePivot()
    {
        var nextPuzzlePivot = GetNextPuzzlePivot();

        if (nextPuzzlePivot != null)
        {
            activePuzzlePivot = nextPuzzlePivot;
            HideAllPuzzlePivots();
            activePuzzlePivot.pivot.SetActive(true);
            SetBackgroundColor(puzzlePivots.IndexOf(activePuzzlePivot));
            return(true);
        }
        return(false);
    }
示例#6
0
    private PuzzlePivot GetNextPuzzlePivot()
    {
        PuzzlePivot result = null;

        foreach (var puzzlePivot in puzzlePivots)
        {
            if (puzzlePivot == activePuzzlePivot)
            {
                return(result);
            }
            result = puzzlePivot;
        }
        return(result);
    }
    public static KeyPieceDictionary SetupKeyPieceDictionary(PuzzlePivot pivot, List <Piece> pieces)
    {
        var keyPiece           = pieces[0];
        var keyPieceDictionary = new KeyPieceDictionary(keyPiece);

        var keyPieceSnapablePoint = SnapablePoint.GetSnapablePointWithPieceId(pivot, keyPiece.id);
        var keyPieceId            = pivot.snapablePoints.IndexOf(keyPieceSnapablePoint);

        foreach (var piece in pieces)
        {
            var snapablePoint = SnapablePoint.GetSnapablePointWithPieceId(pivot, piece.id);

            var relativePos = SnapablePoint.GetRelativePosition(pivot, keyPieceId, pivot.snapablePoints.IndexOf(snapablePoint));
            keyPieceDictionary.pieceDictionary.Add(relativePos, piece.FullId);
        }

        return(keyPieceDictionary);
    }
示例#8
0
    private IEnumerator SetupExtraPivot(PuzzlePivot puzzlePivot)
    {
        SetBackgroundColor(puzzlePivots.Count);

        HideAllPuzzlePivots();
        TakeSnapShot(puzzlePivot);

        puzzlePivots.Add(puzzlePivot);
        yield return(puzzlePivot.SpawnPieces(snapShot));

        if (puzzlePivot.collectableObject != null)
        {
            collectableHelper.SetupCollectableLayerForPieces(puzzlePivot);
        }

        puzzlePivot.SetPiecePosition();
        activePuzzlePivot = puzzlePivot;
        activePuzzlePivot.SetDepthOfPieces();
    }
示例#9
0
    private List <Piece> GetImportantPieces(PuzzlePivot pivot)
    {
        var result = new List <Piece>();
        var collectablePosition = new Vector2(pivot.collectableObject.transform.position.x - pivot.collectableObject.transform.localScale.x / 2f,
                                              pivot.collectableObject.transform.position.y - pivot.collectableObject.transform.localScale.y / 2f);
        var collectableScale = new Vector2(pivot.collectableObject.transform.localScale.x, pivot.collectableObject.transform.localScale.y);
        var collectableRect  = new Rect(collectablePosition, collectableScale);

        foreach (var snapablePoint in pivot.snapablePoints)
        {
            var piecePosition = new Vector2(snapablePoint.piece.transform.position.x - snapablePoint.piece.transform.localScale.x / 2f,
                                            snapablePoint.piece.transform.position.y - snapablePoint.piece.transform.localScale.y / 2f);
            var pieceScale = new Vector2(snapablePoint.piece.transform.localScale.x, snapablePoint.piece.transform.localScale.y);
            var pieceRect  = new Rect(piecePosition, pieceScale);

            if (pieceRect.Overlaps(collectableRect))
            {
                result.Add(snapablePoint.piece);
            }
        }
        return(result);
    }
示例#10
0
    public void SetupCollectableLayerForPieces(PuzzlePivot pivot)
    {
        int piecesOnX = (int)pivot.numberOfPieces.x;
        int piecesOnY = (int)pivot.numberOfPieces.y;

        var scale = new Vector2(1f / piecesOnX, 1f / piecesOnY);

        var shuffledPieces = pivot.pieces.OrderBy(x => UnityEngine.Random.Range(0, pivot.pieces.Count)).ToList( );
        int i = 0;

        foreach (var piece in shuffledPieces)
        {
            var x = Mathf.FloorToInt((float)i / piecesOnY);
            var y = i % piecesOnY;
            piece.CollectableLayerRenderer.gameObject.SetActive(true);
            piece.CollectableLayerRenderer.material.SetTextureScale("_MainTex", scale);
            piece.CollectableLayerRenderer.material.SetTextureOffset("_MainTex", new Vector2(x * scale.x, y * scale.y));
            piece.CollectableLayerRenderer.material.SetTexture("_MainTex", snapShotCollectableLayer);
            i++;
        }

        i = 0;
        foreach (var snapablePoint in pivot.snapablePoints)
        {
            shuffledPieces[i].transform.localPosition = new Vector3(snapablePoint.position.x, snapablePoint.position.y, shuffledPieces[i].transform.localPosition.z);
            snapablePoint.piece = shuffledPieces[i];
            i++;
        }

        var importantPieces = GetImportantPieces(pivot);

        collectableKeyPieceDictionary = KeyPieceDictionary.SetupKeyPieceDictionary(pivot, importantPieces);

        foreach (var snapablePoint in pivot.snapablePoints)
        {
            snapablePoint.piece = null;
        }
    }
示例#11
0
    private PuzzlePivot SpawnExtraPivot(GameObject pivot, PuzzlePivotType type, Vector2 numberOfPieces)
    {
        PuzzlePivot puzzlePivot = null;

        if (type == PuzzlePivotType.jigsaw)
        {
            puzzlePivot = new JigsawPuzzlePivot(pivot, sizeOfPicture, numberOfPieces, gameBoard, this);
        }
        if (type == PuzzlePivotType.sliding)
        {
            puzzlePivot = new SlidingPuzzlePivot(pivot, sizeOfPicture, numberOfPieces, gameBoard, this);
        }
        if (type == PuzzlePivotType.rotating)
        {
            puzzlePivot = new RotatingPuzzlePivot(pivot, sizeOfPicture, numberOfPieces, gameBoard, this);
        }
        if (type == PuzzlePivotType.time)
        {
            puzzlePivot = new TimePuzzlePivot(pivot, sizeOfPicture, numberOfPieces, gameBoard, this);
        }

        return(puzzlePivot);
    }
示例#12
0
    public void CheckForCollectable(PuzzlePivot puzzlePivot, bool hasCollectedCollectable)
    {
        if (!LevelView.IsCollectableLayerOn || hasCollectedCollectable || puzzlePivot.collectableObject == null)
        {
            return;
        }
        if (puzzlePivot.collectableObject.activeSelf)
        {
            return;
        }
        if (collectableKeyPieceDictionary.IsPiecesPlacedCorrectly(puzzlePivot))
        {
            var collectableSnapablePoint = SnapablePoint.GetSnapablePointWithPieceId(puzzlePivot, collectableKeyPieceDictionary.keyPiece.id);
            var offset = collectableKeyPieceDictionary.originalPosition - collectableSnapablePoint.piece.transform.localPosition;
            offset.z = 0;
            puzzlePivot.collectableObject.transform.localPosition -= offset;
            puzzlePivot.collectableObject.SetActive(true);

            foreach (var piece in puzzlePivot.pieces)
            {
                piece.CollectableLayerRenderer.gameObject.SetActive(false);
            }
        }
    }
 public TimePuzzlePivot(GameObject parent, Vector2 sizeOfPicture, Vector2 numberOfPieces, GameBoard gameboard, SubPuzzle subPuzzle) : base(parent, sizeOfPicture, numberOfPieces, gameboard, subPuzzle)
 {
     topPuzzlePivot           = new JigsawPuzzlePivot(pivot, sizeOfPicture, numberOfPieces, gameboard, subPuzzle);
     topPuzzlePivot.subPuzzle = subPuzzle;
 }
 public CombinedPuzzlePivot(GameObject parent, Vector2 sizeOfPicture, Vector2 numberOfPieces, GameBoard gameboard, SubPuzzle subPuzzle) : base(parent, sizeOfPicture, numberOfPieces, gameboard, subPuzzle)
 {
     internalPuzzlePivot = new JigsawPuzzlePivot(parent, sizeOfPicture, numberOfPieces, gameboard, subPuzzle);
     internalPuzzlePivot.numberOfPieces = new Vector2(2, 2);
     internalPuzzlePivot.subPuzzle      = subPuzzle;
 }