public void OnBeginDrag(PointerEventData eventData) { if (!isFaceUp) { return; } if (movingCard != null) { return; } movingCard = this; // Save Drag Start Position for the translation animation dragStartPosition = rectTransform.position; // set the leaving spot for detaching the card leavingSpot = GetComponentInParent <IValidArea>(); if (leavingSpot == null) { Debug.LogError("[Card] Detaching from unknown area"); } // Disable Raycast on all childrens var childCanvases = GetComponentsInChildren <CanvasGroup>(); foreach (var childCanvas in childCanvases) { childCanvas.blocksRaycasts = false; } }
public GameMove(IValidArea leavingSpot, IValidArea landingSpot, GameObject whichCard) { from = leavingSpot; to = landingSpot; Card = whichCard; int pointsToAward; switch (landingSpot) { // From Waste to Tableu case var dummyvar when leavingSpot is Deck && landingSpot is Pile: pointsToAward = 5; MoveType = MoveType.WASTE_TO_TABLEAU; break; // From Waste to a Foundation case var dummyvar when leavingSpot is Deck && landingSpot is Foundation: pointsToAward = 10; MoveType = MoveType.WASTE_TO_FOUNDATION; break; // From Tableau to Foundation case var dummyvar when leavingSpot is Pile && landingSpot is Foundation: pointsToAward = 10; MoveType = MoveType.TABLEAU_TO_FOUNDATION; break; // From Flipping a card case var dummyvar when leavingSpot == landingSpot && landingSpot is Pile: pointsToAward = 5; MoveType = MoveType.FLIP; break; // From Foundation to Tableau case var dummyvar when leavingSpot is Foundation && landingSpot is Pile: pointsToAward = -15; MoveType = MoveType.FOUNDATION_TO_TABLEAU; break; // From fetching a card case var dummyvar when leavingSpot == landingSpot && landingSpot is Deck && whichCard != null: pointsToAward = 0; MoveType = MoveType.FETCH_CARD; break; // From recycling the deck case var dummyvar when leavingSpot == landingSpot && landingSpot is Deck && whichCard == null: pointsToAward = 0; MoveType = MoveType.RECYCLE_WASTE; break; default: pointsToAward = 0; MoveType = MoveType.NONE; break; } PointsAwarded = pointsToAward; }
public void OnPointerClick(PointerEventData eventData) { if (!isFaceUp) { return; } currentClickTime = eventData.clickTime; if (Mathf.Abs(currentClickTime - lastClickTime) < 0.75f) { leavingSpot = GetComponentInParent <IValidArea>(); landingSpot = GameManager.Singleton.Hint(this); if (CanPerformMove()) { CreateMove(); } } lastClickTime = currentClickTime; }