bool moveCardFromCollectionToDeck(DeckEditorCardObject deco) { // Forbid if the deck is full, the card is locked, // or if this could cause the player to be left with less than 15 cards if ((deckView && Player.deck.cards.Count >= 15) || (!deckView && deco.card.isLocked) || (!deckView && (Player.collection.Count + Player.deck.cards.Count <= 15))) { AudioManager.amInstance.playBuzz(); return(false); } else { if (deckView) { Player.deck.cards.Add(deco.card); } else { cardsToSell.Add(deco.card); } Player.collection.Remove(deco.card); updateHUDAfterMovement(deco, Origin.DECK); return(true); } }
void updateHUDAfterMovement(DeckEditorCardObject movedDeco, Origin newOrigin) { // Sort Player.collection = Card.orderCards(Player.collection); if (deckView) { Player.deck.cards = Card.orderCards(Player.deck.cards); } else { cardsToSell = Card.orderCards(cardsToSell); } // Get origin/index info List <Card> newOriginList = (newOrigin == Origin.COLLECTION) ? Player.collection : (deckView) ? Player.deck.cards : cardsToSell; int nthPosition = newOriginList.IndexOf(movedDeco.card); // Update data for recently moved card with new origin movedDeco.initialize(movedDeco.card, newOrigin); Transform newPanel = (newOrigin == Origin.COLLECTION) ? collectionPanel : deckPanel; movedDeco.transform.SetParent(newPanel); movedDeco.transform.SetSiblingIndex(nthPosition); movedDeco.GetComponent <RectTransform>().localScale = Vector3.one; StartCoroutine(changeColliderSizeAfterOneFrame(movedDeco.gameObject)); updateHUD(); }
bool moveCardFromDeckToCollection(DeckEditorCardObject deco) { Player.collection.Add(deco.card); if (deckView) { Player.deck.cards.Remove(deco.card); } else { cardsToSell.Remove(deco.card); } updateHUDAfterMovement(deco, Origin.COLLECTION); return(true); }
public void moveAllToSell() { List <DeckEditorCardObject> decoList = new List <DeckEditorCardObject>(); foreach (Transform child in collectionPanelRectTr) { DeckEditorCardObject deco = child.GetComponent <DeckEditorCardObject>(); if (deco != null && !deco.card.isLocked) { decoList.Add(deco); } } foreach (DeckEditorCardObject deco in decoList) { moveCardBetweenCollectionAndDeck(deco); } }
IEnumerator moveCardAnimation(DeckEditorCardObject deco, Vector2 oldLocalCardPosition) { if (deco.gameObject.GetComponent <Canvas>() != null) // If it is already moving (has a canvas), skip { yield break; } Transform cardTr = deco.transform; Canvas cardCanvas = deco.gameObject.AddComponent <Canvas>(); cardCanvas.overrideSorting = true; cardCanvas.sortingOrder = 10; float upperScreenLimit = Screen.height * 0.9f; float lowerScreenLimit = (deco.origin == Origin.COLLECTION || deckView) ? Screen.height * 0.2f : Screen.height * 0.4f; float speed = 2000f; float transitionTime = Vector2.Distance(oldLocalCardPosition, deco.nextDestination) / speed; float timer = 0; while (timer < transitionTime) { cardTr.localPosition = Vector3.Lerp(oldLocalCardPosition, deco.nextDestination, timer / transitionTime); float cardScreenPosition = RectTransformUtility.WorldToScreenPoint(cam, cardTr.position).y; if (cardScreenPosition < lowerScreenLimit || cardScreenPosition > upperScreenLimit) // If not inside the viewport { Destroy(cardCanvas); cardTr.localPosition = deco.nextDestination; yield break; } timer += Time.deltaTime; yield return(null); } Destroy(cardCanvas); cardTr.localPosition = deco.nextDestination; }
public void moveCardBetweenCollectionAndDeck(DeckEditorCardObject deco) { // Get data int oldCardIndex; Card card = deco.card; Origin oldOrigin = deco.origin; bool cardMoved; Vector2 oldLocalCardPosition = (oldOrigin == Origin.COLLECTION) ? deckPanel.InverseTransformPoint(deco.transform.position) : collectionPanel.InverseTransformPoint(deco.transform.position); // Move card if (oldOrigin == Origin.COLLECTION) { oldCardIndex = Player.collection.IndexOf(card); cardMoved = moveCardFromCollectionToDeck(deco); } else { oldCardIndex = (deckView) ? Player.deck.cards.IndexOf(card) : cardsToSell.IndexOf(card); cardMoved = moveCardFromDeckToCollection(deco); } if (!cardMoved) { return; } StartCoroutine(moveCardAnimation(deco, oldLocalCardPosition)); if (Player.keyboardModeOn) { selectClosestButton(oldCardIndex, oldOrigin); } }
public void lockCard(DeckEditorCardObject deco) { deco.card.isLocked = !deco.card.isLocked; CardImageManager.ciInstance.updateImage(deco.gameObject, deco.card.cardEffect); orderCollectionAsAGrid(); }
private void Update() { if (Input.touchCount > 0) { Touch touch = Input.GetTouch(0); // If a finger touches the screen, detect if there's a card there if (touch.phase == TouchPhase.Began) { Vector2 worldPoint = cam.ScreenToWorldPoint(touch.position); RaycastHit2D raycastHit2D = Physics2D.Raycast(worldPoint, Vector3.forward); if (gameObject.name == "BattleManager") { // If it finds a gameObject with a CardObject component that is interactable if (raycastHit2D.collider != null && raycastHit2D.collider.GetComponent <CardObject>() != null && raycastHit2D.collider.gameObject.GetComponent <Button>().interactable) { selectedCard = raycastHit2D.collider.gameObject; } } else if (gameObject.name == "DeckEditor") { // If it finds a gameObject with a DeckEditorCardObject component if (raycastHit2D.collider != null && raycastHit2D.collider.GetComponent <DeckEditorCardObject>() != null) { selectedCard = raycastHit2D.collider.gameObject; } } } // Restart or advance timer if (touch.phase == TouchPhase.Began || touch.phase == TouchPhase.Moved) { stationaryTouchTime = 0; } else if (touch.phase == TouchPhase.Stationary) { stationaryTouchTime += Time.deltaTime; } // Check for doubletaps doubleTap = (touch.tapCount > 1); // On finger lift, get slide direction if (touch.phase == TouchPhase.Ended) { slideDirection = getSlideDirection(); } // Stop timer if (touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled) { stationaryTouchTime = 0; } } else // If not touching screen { setAllTouchVariablesToDefault(); } if (selectedCard != null) { // If double tapping or sliding up if (gameObject.name == "BattleManager" && (doubleTap || slideDirection == Vector2.up)) { CardObject cardObj = selectedCard.GetComponent <CardObject>(); StartCoroutine(cardObj.playCardAsync()); setAllTouchVariablesToDefault(); } // If double tapping, or sliding right if in collection, or sliding left if in deck else if (gameObject.name == "DeckEditor" && (doubleTap || (slideDirection == Vector2.right && selectedCard.transform.parent.name == "CollectionPanel") || (slideDirection == Vector2.left && selectedCard.transform.parent.name == "DeckPanel"))) { DeckEditorCardObject deco = selectedCard.GetComponent <DeckEditorCardObject>(); deco.useCard(); setAllTouchVariablesToDefault(); } } }