private void SpawnStackHeaders() { for (int i = 0; i < 10; i++) { StackHeader header = Instantiate(stackHeaderPrefab); header.Initialize(i); Positioner.Instance.PositionStackHeader(header, i); } }
public bool RequestCardMove(Card movedCard, StackHeader stackHeader) { if (CheckMoveValidity(movedCard, stackHeader)) { MoveCard(movedCard, stackHeader); return(true); } else { return(false); } }
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); }
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(); } }
public void PositionStackHeader(StackHeader stackHeader, int stack) { stackHeader.transform.position = topRightPosition; stackHeader.transform.Translate(cardOffset.x * stack, 0, 1.0f); }
public bool CheckMoveValidity(Card movedCard, StackHeader stackHeader) { /* stack in question must be empty */ return(stacks[stackHeader.Stack].Count == 0); }