PlayableSpot GeneratePlayableSpot(Coordinate onCoordinate) { PlayableSpot newSpot = ObjectPooler.GetObject <PlayableSpot>(PlayableSpotPF, transform); newSpot.SetCoordinate(onCoordinate); PlayableSpots.Add(newSpot); return(newSpot); }
PlayableSpot GetHoveredSpot() { RaycastHit2D hit = Physics2D.Raycast(GetMouseLocation(), Vector2.zero, float.MaxValue, PlayableSpotLayer); if (hit.collider != null) { PlayableSpot hitSpot = hit.collider.gameObject.GetComponent <PlayableSpot>(); return(hitSpot); } // If we're not mousing over a spot exactly, make an approximate boxcast using the dragged card if (DraggedCard != null) { Collider2D boxCheckSpot = Physics2D.OverlapBox(DraggedCard.transform.position, new Vector2(1f, 1.5f), 0, PlayableSpotLayer); if (boxCheckSpot != null) { PlayableSpot hitSpot = boxCheckSpot.gameObject.GetComponent <PlayableSpot>(); return(hitSpot); } } return(null); }
private void Update() { if (DraggedCard != null) { PlayableSpot hoveredSpot = GetHoveredSpot(); if (Input.GetMouseButton(0)) { DraggedCard.transform.position = GetMouseLocation() + DraggingOffset + Vector3.back; if (previousHoveredSpot != hoveredSpot) { if (previousHoveredSpot != null) { previousHoveredSpot.SetHovered(false); } previousHoveredSpot = hoveredSpot; if (hoveredSpot != null) { hoveredSpot.SetHovered(true); } } } else { if (previousHoveredSpot != null) { previousHoveredSpot.SetHovered(false); previousHoveredSpot = null; } if (hoveredSpot == null) { DraggedCard.AnimateMovement(PickedUpFrom, DegreesOfSpeed.Quickly); DraggedCard = null; PlayFieldManagerInstance.UpdateValidityOfPlayableSpots(null); } else { if (!PlayFieldManagerInstance.TryPlayerPlaysCard(DraggedCard, hoveredSpot.OnCoordinate)) { DraggedCard.AnimateMovement(PickedUpFrom, DegreesOfSpeed.Quickly); PlayFieldManagerInstance.UpdateValidityOfPlayableSpots(null); } DraggedCard = null; } } } else { if (Input.GetMouseButtonDown(0)) { PlayingCard hoveredCard = GetHoveredCard(); if (hoveredCard != null && hoveredCard.IsDraggable) { DraggedCard = hoveredCard; PickedUpFrom = hoveredCard.transform.position; DraggingOffset = DraggedCard.transform.position - GetMouseLocation(); PlayFieldManagerInstance.UpdateValidityOfPlayableSpots(DraggedCard); } } } }