🚧 tp meeple back on invalid move

dev_views_Game
reregnault 1 year ago
parent df25251a09
commit 3e85b7d6d0

@ -19,7 +19,7 @@ class SpriteMeeple : SKNode {
var originalSize: CGSize var originalSize: CGSize
var originalEllipseSize: CGSize var originalEllipseSize: CGSize
var onMove: ((CGPoint, CGPoint) -> ())? var onMove: ((SpriteMeeple, CGPoint, CGPoint) -> ())?
var cellPosition: CGPoint{ var cellPosition: CGPoint{
didSet(cellPosition){ didSet(cellPosition){
@ -65,7 +65,7 @@ class SpriteMeeple : SKNode {
super.init(coder: aDecoder) 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{ override var isUserInteractionEnabled: Bool{
set { } set { }
@ -96,8 +96,8 @@ class SpriteMeeple : SKNode {
imageNode.size = originalSize imageNode.size = originalSize
ellipseNode.path = SKShapeNode(ellipseOf: originalEllipseSize).path ellipseNode.path = SKShapeNode(ellipseOf: originalEllipseSize).path
if let onMove: (CGPoint, CGPoint) -> () = onMove { if let onMove: (SpriteMeeple, CGPoint, CGPoint) -> () = onMove {
onMove(self.oldCellPosition!, self.getCellPosition()) onMove(self, self.oldCellPosition!, self.getCellPosition())
} }
self.zPosition = 0 self.zPosition = 0

@ -64,18 +64,23 @@ class PlayingGameVM: ObservableObject {
} }
// Customs funcs // Customs funcs
func onMeepleMove(_ start: CGPoint, _ end: CGPoint) { func onMeepleMove(_ sender: SpriteMeeple, _ start: CGPoint, _ end: CGPoint) {
let owner = game.rules.getNextPlayer() let owner = game.rules.getNextPlayer()
let player: DouShouQiModel.Player = game.players[owner]! 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)) 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) if (game.rules.isMoveValid(onBoard: game.board, withMove: move)) {
print("Meeple moved = ", start, " -> ", end)
Task { Task {
try! await (player as! HumanPlayer).chooseMove(move) try! await (player as! HumanPlayer).chooseMove(move)
}
self.objectWillChange.send()
} else {
sender.cellPosition = start
} }
self.objectWillChange.send()
} }
public func start() { public func start() {

Loading…
Cancel
Save