diff options
author | David McMackins II <contact@mcmackins.org> | 2017-08-11 06:50:22 -0500 |
---|---|---|
committer | David McMackins II <contact@mcmackins.org> | 2017-08-11 06:50:22 -0500 |
commit | 5e29e9c46a235b0079a24e412a90ff67766af6a2 (patch) | |
tree | 092f21ebb62948c07288626715b7cc12a05cb5fd | |
parent | 65d18f5251830a30288a930ff8cf156806ac15b6 (diff) |
Implement move logic
-rw-r--r-- | serverthread.lua | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/serverthread.lua b/serverthread.lua index ac4aa96..9ebc676 100644 --- a/serverthread.lua +++ b/serverthread.lua @@ -185,7 +185,7 @@ function Server:_trymove(quad, distance, sizemod) return nil end - return {x=x, y=y} + return {x=x, y=y, dist=distance, step1=step1} end function Server:_getmove(dx, dy, wantsplit) @@ -205,8 +205,51 @@ function Server:_getmove(dx, dy, wantsplit) return self:_trymove(quad, 1) end +function Server:_king(piece) + self:_updateall({'KING ' .. piece.id}) + piece.king = true +end + +function Server:_singlemove(move, piece) + local o = self:_getoccupying(move.x, move.y) + if o then + piece.size = piece.size + o.size + self:_updateall({'ABSORB ' .. piece.id .. ' ' .. o.id, + 'SIZE ' .. piece.id .. ' ' .. piece.size}) + + if o.team == piece.team and o.king then + self:_king(piece) + end + + self._pieces[o.id] = nil + end + + self:_updateall({'MOVE ' .. piece.id .. ' ' .. move.x .. ' ' .. move.y}) + piece:move(move.x, move.y) + + if ((piece.y == 1 and piece.team == 2) + or (piece.y == 8 and piece.team == 1)) then + self:_king(piece) + end +end + function Server:_move(move, wantsplit) + local piece = self._selected + + self:_updateall({'DESELECTED'}) + self._selected = nil + + if wantsplit then + local prev = piece + piece = Piece(piece.x, piece.y, piece.team) + prev.size = prev.size / 2 + piece.size = prev.size + self:_addpiece(piece) + + self:_singlemove(move.step1, piece) + end + self:_singlemove(move, piece) end function Server:_sendall(msg) @@ -334,7 +377,6 @@ function Server:_process() self:_updateall({'POINT ' .. move.x .. ' ' .. move.y}) else self:_move(move, split) - self:_updateall({'DESELECTED'}) end end end |