public void OnEndDrag(PointerEventData eventData) { if (m_piece.IsStatic || !m_piece.Interactable) { return; } Vector3 position = transform.position; PieceCoordinates coord = Layout.PosToCoord(position); SlotController slot = Layout.GetSlotAt(coord); PieceController other = GameController.Instance.Pieces.Find(p => p.Coordinates == coord); if (!slot || other) { transform.position = m_originalPosition; SFX.Instance.PlayOneShot(SFXData.Type.Pop); } else { position = Layout.CoordToPos(coord); m_piece.Coordinates.Set(coord); transform.position = position; m_piece.StateChanged(); SFX.Instance.PlayOneShot(SFXData.Type.Positive); } }
private bool CanPlacePieceInConnection(EConnectionPoints connection, Dictionary <PieceCoordinates, MapNode> coordinateMap) { PieceCoordinates nextCoordinates; switch (connection) { default: nextCoordinates = new PieceCoordinates(0, 0); break; case EConnectionPoints.Up: nextCoordinates = new PieceCoordinates(Coordinates.X, Coordinates.Z + 1); break; case EConnectionPoints.Down: nextCoordinates = new PieceCoordinates(Coordinates.X, Coordinates.Z - 1); break; case EConnectionPoints.Left: nextCoordinates = new PieceCoordinates(Coordinates.X - 1, Coordinates.Z); break; case EConnectionPoints.Right: nextCoordinates = new PieceCoordinates(Coordinates.X + 1, Coordinates.Z); break; } return(!coordinateMap.ContainsKey(nextCoordinates)); }
/** * Get the board slot at coordinate */ public abstract SlotController GetSlotAt(PieceCoordinates coord);
/** * Convert coordinates to position */ public abstract Vector3 CoordToPos(PieceCoordinates coord);
public void Set(PieceCoordinates coord) { this.x = coord.x; this.y = coord.y; this.z = coord.z; }