diff options
| -rw-r--r-- | client/drawing.lua | 2 | ||||
| -rw-r--r-- | client/main.lua | 10 | ||||
| -rw-r--r-- | common/chunk.lua | 33 | ||||
| -rw-r--r-- | server/server.lua | 4 | 
4 files changed, 38 insertions, 11 deletions
diff --git a/client/drawing.lua b/client/drawing.lua index c8be5fd..962fdb7 100644 --- a/client/drawing.lua +++ b/client/drawing.lua @@ -55,7 +55,7 @@ local function draw_chunk(camera,the_chunk)  		local maxq = minq+(trh.q-tlh.q)+1  		for q = minq,maxq do  			local h = coords.Hex.make(q,r) -			local t = the_chunk:tile_at_offset(h) +			local t = the_chunk:at(h)  			if t then  				draw_hex(h:to_pos())  			end diff --git a/client/main.lua b/client/main.lua index b2e2b3f..819753f 100644 --- a/client/main.lua +++ b/client/main.lua @@ -11,6 +11,7 @@ local drawing = require"drawing"  local coords = require"common.coords"  local Pos = coords.Pos  local camera = require"camera".Camera.make() +local Chunk = require"common.chunk".Chunk  -- local pprint=require"common.pprint"  -- pprint.setup{show_all=true} @@ -20,7 +21,7 @@ math.randomseed(os.time())  local host,peer -local chunk = require"common.chunk".Chunk.make() +local chunk  local function draw_player(pl,islocal)  	local hplsz = PLAYER_SIZE/2 @@ -78,6 +79,7 @@ function love.update(dt)  	repeat  		local ev = host:service()  		if ev and ev.type == "receive" then +			print(ev.data)  			local j = json.decode(ev.data)  			local op = j.t  			if op == "join" then @@ -94,6 +96,8 @@ function love.update(dt)  			elseif op == "you" then  				local pl = j.pl  				local_player = {pos=coords.Pos.make(pl.x,pl.y),color=pl.color,id=pl.id} +			elseif op == "chunk" then +				chunk = Chunk.from_packet_data(j)  			end  		end  	until not ev @@ -107,7 +111,9 @@ function love.draw()  	end  	camera:apply_trans() -	drawing.draw_chunk(camera,chunk) +	if chunk then +		drawing.draw_chunk(camera,chunk) +	end  	if local_player then  		draw_player(local_player,true) diff --git a/common/chunk.lua b/common/chunk.lua index 432e37b..e210387 100644 --- a/common/chunk.lua +++ b/common/chunk.lua @@ -1,17 +1,26 @@ +local json = require"common.dkjson" +  local CHUNK_SIZE = 128  -- for now tiles shall be booleans +local function index_ok(offq,offr) +	return 0<=offq and 0<=offr and offq<CHUNK_SIZE and offr<CHUNK_SIZE +end +  local function index(offq,offr)  	-- indexes start at 0  	-- and go up to (CHUNK_SIZE^2)-1 -	assert(0<=offq and 0<=offr and offq<CHUNK_SIZE and offr<CHUNK_SIZE, "chunk hex offset out of bounds") -	return CHUNK_SIZE*offq + offr +	assert(index_ok(offq,offr), "chunk hex offset out of bounds") +	return CHUNK_SIZE*offq + offr + 1  end  local Chunk = {}  Chunk.__index = Chunk -function Chunk.make() +function Chunk.make(tiles) +	return setmetatable({tiles=tiles},Chunk) +end +function Chunk.gen()  	-- todo actual worldgen  	local tiles = {}  	for i=0,CHUNK_SIZE-1 do @@ -20,12 +29,20 @@ function Chunk.make()  		end  	end -	return setmetatable({tiles=tiles},Chunk) +	return Chunk.make(tiles) +end +function Chunk.at(self,hoffs) +	if not index_ok(hoffs.q,hoffs.r) then return nil end +	return self.tiles[index(hoffs.q,hoffs.r)] +end + +function Chunk.data_packet(self) +	return json.encode{t="chunk",tiles=self.tiles}  end -function Chunk.tile_at_offset(self,hoffs) -	if not(0<=hoffs.q and 0<=hoffs.r and hoffs.q<CHUNK_SIZE and hoffs.r<CHUNK_SIZE) then return nil end -	local idx = CHUNK_SIZE*hoffs.q + hoffs.r -	return self.tiles[idx] +function Chunk.from_packet_data(packet) +	-- assuming packet has already been json.decoded +	-- since otherwise how would we know it's a chunk packet +	return Chunk.make(packet.tiles)  end  return { diff --git a/server/server.lua b/server/server.lua index 12d70e5..42ed41d 100644 --- a/server/server.lua +++ b/server/server.lua @@ -1,5 +1,6 @@  local enet = require"enet"  local json = require"common.dkjson" +local Chunk = require"common.chunk".Chunk  local unpack = unpack or table.unpack  math.randomseed(os.time()) @@ -56,6 +57,8 @@ local function player_move_packet(player,x,y)  	return json.encode{t="move",id=player.id,x=x,y=y}  end +local the_chunk = Chunk.gen() +  while true do  	local ev = host:service(100)  	if ev then @@ -64,6 +67,7 @@ while true do  			table.insert(playerlist,player)  			print("connect",player.peer,player.id)  			player.peer:send(player_you_packet(player)) +			player.peer:send(the_chunk:data_packet())  			for i,otherplayer in ipairs(playerlist) do  				if otherplayer ~= player then  | 
