Beispiel #1
0
 private void SpawnStackHeaders()
 {
     for (int i = 0; i < 10; i++)
     {
         StackHeader header = Instantiate(stackHeaderPrefab);
         header.Initialize(i);
         Positioner.Instance.PositionStackHeader(header, i);
     }
 }
Beispiel #2
0
 public bool RequestCardMove(Card movedCard, StackHeader stackHeader)
 {
     if (CheckMoveValidity(movedCard, stackHeader))
     {
         MoveCard(movedCard, stackHeader);
         return(true);
     }
     else
     {
         return(false);
     }
 }
Beispiel #3
0
    public void UndoMove()
    {
        if (pastMoves.Count == 0)
        {
            return;
        }
        var         lastMove    = pastMoves.Pop();
        StackHeader stackHeader = new StackHeader();

        stackHeader.Initialize(lastMove.originalStack);
        if (lastMove.cardBelowTurned)
        {
            stacks[lastMove.originalStack].Last().TurnCard();
        }
        MoveCard(lastMove.movedCard, stackHeader, true);
    }
Beispiel #4
0
    public void MoveCard(Card movedCard, StackHeader stackHeader, bool undoing = false)
    {
        var movedCardChildren = CutCardChildren(movedCard, undoing);

        /* move card */
        Positioner.Instance.MoveCard(ref movedCard, stackHeader.Stack, stacks[stackHeader.Stack].Count);
        stacks[stackHeader.Stack].Add(movedCard);

        /* and all of its children */
        while (movedCardChildren.Count > 0)
        {
            var movedChildren = movedCardChildren.Pop();
            Positioner.Instance.MoveCard(ref movedChildren, stackHeader.Stack, stacks[stackHeader.Stack].Count);
            stacks[stackHeader.Stack].Add(movedChildren);
        }
    }
    void Update()
    {
        Vector2      ray            = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        RaycastHit2D hit            = Physics2D.Raycast(ray, Vector2.zero);
        Card         hitCard        = null;
        StackHeader  hitStackHeader = null;

        if (hit)
        {
            hitCard        = hit.transform.gameObject.GetComponent <Card>();
            hitStackHeader = hit.transform.gameObject.GetComponent <StackHeader>();

            if (hitCard)
            {
                if (Input.GetMouseButtonDown(0) && Game.Instance.CheckMoveValidity(hitCard))
                {
                    draggedCard = hitCard;
                    draggedCardOriginalPosition = hitCard.transform.position;
                    hitCard.GetComponent <BoxCollider2D>().enabled = false;

                    draggedCardChildren = Game.Instance.GetCardChildren(draggedCard);
                    foreach (var children in draggedCardChildren)
                    {
                        children.transform.parent = draggedCard.transform;
                        children.GetComponent <BoxCollider2D>().enabled = false;
                    }
                }
            }
        }

        if (draggedCard && Input.GetMouseButtonUp(0))
        {
            bool moveAllowed = false;
            if (hitCard)
            {
                moveAllowed = Game.Instance.RequestCardMove(draggedCard, hitCard);
            }
            else if (hitStackHeader)
            {
                moveAllowed = Game.Instance.RequestCardMove(draggedCard, hitStackHeader);
            }

            if ((!hitCard && !hitStackHeader) || !moveAllowed)
            {
                draggedCard.transform.position = draggedCardOriginalPosition;
            }

            foreach (var children in draggedCardChildren)
            {
                children.transform.parent = null;
                children.GetComponent <BoxCollider2D>().enabled = true;
            }

            draggedCard.GetComponent <BoxCollider2D>().enabled = true;
            draggedCard = null;
        }

        if (draggedCard)
        {
            draggedCard.gameObject.transform.position = new Vector3(ray.x, ray.y, -5.0f);
        }

        if (Input.GetButtonDown("Deal From Deck"))
        {
            Game.Instance.DealFromDeck();
        }
        else if (Input.GetButtonDown("Reset Game (Easy)"))
        {
            Game.Instance.ResetGame(Difficulty.Easy);
        }
        else if (Input.GetButtonDown("Reset Game (Medium)"))
        {
            Game.Instance.ResetGame(Difficulty.Medium);
        }
        else if (Input.GetButtonDown("Reset Game (Hard)"))
        {
            Game.Instance.ResetGame(Difficulty.Hard);
        }
        else if (Input.GetButtonDown("Undo Move"))
        {
            Game.Instance.UndoMove();
        }
    }
Beispiel #6
0
 public void PositionStackHeader(StackHeader stackHeader, int stack)
 {
     stackHeader.transform.position = topRightPosition;
     stackHeader.transform.Translate(cardOffset.x * stack, 0, 1.0f);
 }
Beispiel #7
0
 public bool CheckMoveValidity(Card movedCard, StackHeader stackHeader)
 {
     /* stack in question must be empty */
     return(stacks[stackHeader.Stack].Count == 0);
 }