From 3e85b7d6d019fb08498cde7ba8241478fee31056 Mon Sep 17 00:00:00 2001 From: reregnault Date: Fri, 21 Jun 2024 18:06:19 +0200 Subject: [PATCH] :construction: tp meeple back on invalid move --- .../Components/Scene/SpriteMeeple.swift | 8 ++++---- .../ViewModel/Game/PlayingGameVM.swift | 17 +++++++++++------ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/DouShouQi_App/DouShouQi_App/Components/Scene/SpriteMeeple.swift b/DouShouQi_App/DouShouQi_App/Components/Scene/SpriteMeeple.swift index 1fa51e6..359bc48 100644 --- a/DouShouQi_App/DouShouQi_App/Components/Scene/SpriteMeeple.swift +++ b/DouShouQi_App/DouShouQi_App/Components/Scene/SpriteMeeple.swift @@ -19,7 +19,7 @@ class SpriteMeeple : SKNode { var originalSize: CGSize var originalEllipseSize: CGSize - var onMove: ((CGPoint, CGPoint) -> ())? + var onMove: ((SpriteMeeple, CGPoint, CGPoint) -> ())? var cellPosition: CGPoint{ didSet(cellPosition){ @@ -65,7 +65,7 @@ class SpriteMeeple : SKNode { super.init(coder: aDecoder) } - public func setOnMove(onMove: @escaping (CGPoint, CGPoint) -> ()) { self.onMove = onMove } + public func setOnMove(onMove: @escaping (SpriteMeeple, CGPoint, CGPoint) -> ()) { self.onMove = onMove } override var isUserInteractionEnabled: Bool{ set { } @@ -96,8 +96,8 @@ class SpriteMeeple : SKNode { imageNode.size = originalSize ellipseNode.path = SKShapeNode(ellipseOf: originalEllipseSize).path - if let onMove: (CGPoint, CGPoint) -> () = onMove { - onMove(self.oldCellPosition!, self.getCellPosition()) + if let onMove: (SpriteMeeple, CGPoint, CGPoint) -> () = onMove { + onMove(self, self.oldCellPosition!, self.getCellPosition()) } self.zPosition = 0 diff --git a/DouShouQi_App/DouShouQi_App/ViewModel/Game/PlayingGameVM.swift b/DouShouQi_App/DouShouQi_App/ViewModel/Game/PlayingGameVM.swift index 2bca671..3cc6dcb 100644 --- a/DouShouQi_App/DouShouQi_App/ViewModel/Game/PlayingGameVM.swift +++ b/DouShouQi_App/DouShouQi_App/ViewModel/Game/PlayingGameVM.swift @@ -64,18 +64,23 @@ class PlayingGameVM: ObservableObject { } // Customs funcs - func onMeepleMove(_ start: CGPoint, _ end: CGPoint) { + func onMeepleMove(_ sender: SpriteMeeple, _ start: CGPoint, _ end: CGPoint) { let owner = game.rules.getNextPlayer() let player: DouShouQiModel.Player = game.players[owner]! let move = Move(of: owner, fromRow: Int(start.y), andFromColumn: Int(start.x), toRow: Int(end.y), andToColumn: Int(end.x)) - print("Meeple moved = ", start, " -> ", end) - - Task { - try! await (player as! HumanPlayer).chooseMove(move) + if (game.rules.isMoveValid(onBoard: game.board, withMove: move)) { + print("Meeple moved = ", start, " -> ", end) + + Task { + try! await (player as! HumanPlayer).chooseMove(move) + } + self.objectWillChange.send() + } else { + sender.cellPosition = start } - self.objectWillChange.send() + } public func start() {