summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid McMackins II <contact@mcmackins.org>2017-08-11 06:50:22 -0500
committerDavid McMackins II <contact@mcmackins.org>2017-08-11 06:50:22 -0500
commit5e29e9c46a235b0079a24e412a90ff67766af6a2 (patch)
tree092f21ebb62948c07288626715b7cc12a05cb5fd
parent65d18f5251830a30288a930ff8cf156806ac15b6 (diff)
Implement move logic
-rw-r--r--serverthread.lua46
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