🚧 tp meeple back on invalid move

dev_views_Game
reregnault 10 months ago
parent df25251a09
commit 3e85b7d6d0

@ -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

@ -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() {

Loading…
Cancel
Save