Skip to content

Commit

Permalink
Add update methods to UserData
Browse files Browse the repository at this point in the history
  • Loading branch information
Jiro Nagashima committed Jan 19, 2020
1 parent e6c8ea8 commit fdcdefe
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 24 deletions.
4 changes: 2 additions & 2 deletions SwiftUIShogi/Board Side/PieceStandView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@ struct PieceStandView: View {

ForEach(capturedPiecesWithoutPawns, id: \.self) { piece in
Button(action: {
self.userData.validMoves = self.userData.game.validMoves(from: .capturedPiece, piece: piece)
self.userData.updateForCapturedPiece(with: piece)
}) {
Text(piece.string)
}
}
if !capturedPawnPieces.isEmpty {
Button(action: {
self.userData.validMoves = self.userData.game.validMoves(from: .capturedPiece, piece: self.capturedPawnPieces.first!)
self.userData.updateForCapturedPiece(with: self.capturedPawnPieces.first!)
}) {
Text(capturedPawnPieces.first!.string)
}
Expand Down
23 changes: 1 addition & 22 deletions SwiftUIShogi/Board/BoardView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ struct BoardSquaresView: View {
var body: some View {
SquaresView() { square in
Button(action: {
self.updateUserData(with: square)
self.userData.updateForBoard(with: square)
}) {
SquareView(square: square, piece: self.userData.game.board[square])
.scaleEffect(self.scaleEffect(at: square))
Expand All @@ -25,27 +25,6 @@ struct BoardSquaresView: View {
}
}

private func updateUserData(with square: Square) {
switch (validMove(to: square), piece(at: square)) {
case let (move?, _):
try! userData.game.perform(move)
userData.previousMove = move
userData.validMoves = []
case let (_, piece?):
userData.validMoves = userData.game.validMoves(from: .board(square), piece: piece)
default:
break
}
}

private func validMove(to square: Square) -> Move? {
userData.validMoves.first { $0.destination == .board(square) }
}

private func piece(at square: Square) -> Piece? {
userData.game.board[square]
}

private func scaleEffect(at square: Square) -> CGFloat {
userData.validMoves.contains(where: { $0.source == .board(square) }) ? 1.2 : 1
}
Expand Down
29 changes: 29 additions & 0 deletions SwiftUIShogi/UserData.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,32 @@ final class UserData: ObservableObject {
self.game = game
}
}

extension UserData {
func updateForBoard(with square: Square) {
switch (validMove(to: square), piece(at: square)) {
case let (move?, _):
try! game.perform(move)
previousMove = move
validMoves = []
case let (_, piece?):
validMoves = game.validMoves(from: .board(square), piece: piece)
default:
break
}
}

func updateForCapturedPiece(with piece: Piece) {
validMoves = game.validMoves(from: .capturedPiece, piece: piece)
}
}

private extension UserData {
func validMove(to square: Square) -> Move? {
validMoves.first { $0.destination == .board(square) }
}

func piece(at square: Square) -> Piece? {
game.board[square]
}
}

0 comments on commit fdcdefe

Please sign in to comment.