diff --git a/data/game.lua b/data/game.lua index b6d8bd5..a75cbaa 100644 --- a/data/game.lua +++ b/data/game.lua @@ -16,40 +16,89 @@ function game_init(menu) game_update=update_game end -function render_view ( hab, x ,y ) +-- function mapa_draw(hab) + -- for ty=0,5 do + -- for tx=0,11 do + -- local tile=mapa[1+hab][1+tx+ty*12] + -- if tile~=256 and (tile<126 or mapa.step>4) then + -- -- draw.surf((tile&15)*8,64+(tile>>4)*8,8,8,tx*8,ty*8) + -- local txr = arcade_config.tiles_per_row-1 + -- local txr2 = arcade_config.tiles_per_row_base2 + -- local toff= arcade_config.tiles_offset + -- local tw = arcade_config.tiles_width + -- local th = arcade_config.tiles_height + -- draw.surf((tile&txr)*tw,toff+(tile>>txr2)*th,tw,th,tx*tw,ty*th) + -- end + -- end + -- end +-- end + + +function render_view ( x, y ) local curr_ssurf = surf.source() local curr_tsurf = surf.target() - local room_x = hab % mapa_rooms_per_piso - local room_y = math.floor(hab / mapa_rooms_per_piso) - local first_x = -1 - local first_y = -1 - local first_x = 0 - local first_y = 0 - if room_x == 0 then first_x = 0 end - if room_y == 0 then first_y = 0 end - + local nroom, room_x, room_y, tile_offset_x, tile_offset_y = viewp:tile() + print("COORDS= "..x..", "..y) + print("ROOM= "..nroom) + print("RCOORDS= "..room_x..", "..room_y) + print("TILE_OFF= "..tile_offset_x..", "..tile_offset_y) + + max_tiles_col = (arcade_config.resolucion.width/arcade_config.tiles_width)+1; -- Los que caben en una pantalla y 1 parcial + max_tiles_row = (arcade_config.resolucion.height/arcade_config.tiles_height)+1; -- Los que caben en una pantalla y 1 parcial + + curr_room = nroom + curr_room_x = room_x + curr_room_y = room_y + surf.target(map_buffer) surf.cls(16) - surf.source(tiles) - - for ry=0,2 do - for rx=0,2 do - local buffer_x = rx*mapa_room_cols*tw - local buffer_y = ry*mapa_room_rows*th - local room = (room_y+ry+first_y)*mapa_rooms_per_piso+(room_x+rx+first_x) - draw_hab(room, buffer_x, buffer_y) - end - end + surf.source(tiles) - surf.source(map_buffer) + tile_y = room_y + for ty=0,max_tiles_row-1 do + tile_x = room_x + + if tile_y>mapa_room_rows-1 then + nroom = nroom + 10 + tile_y = 0 + end + + curr_room = nroom + + for tx=0,max_tiles_col-1 do + if tile_x>mapa_room_cols-1 then + curr_room = curr_room+1 + tile_x = 0 + end + if curr_room >= 80 then + break + end + local tile=mapa[1+curr_room][1+tile_x+tile_y*mapa_room_cols] + -- print("R"..curr_room.." ("..tile_x..", "..tile_y..") > "..tile) + -- print(" TILE= "..tile) + if tile~=256 and (tile<126 or mapa.step>4) then + -- draw.surf((tile&15)*8,64+(tile>>4)*8,8,8,tx*8,ty*8) + local txr = arcade_config.tiles_per_row-1 + local txr2 = arcade_config.tiles_per_row_base2 + local toff= arcade_config.tiles_offset + local tw = arcade_config.tiles_width + local th = arcade_config.tiles_height + draw.surf((tile&txr)*tw,toff+(tile>>txr2)*th,tw,th,tx*tw,ty*th) + end + + tile_x = tile_x+1 + end + + tile_y = tile_y+1 + end + + surf.source(map_buffer) surf.target(0) - local vrx, vry = viewp:roomXY(hab) - print(hab.." "..vrx.." "..vry) - draw.surf(viewp.x-vrx,viewp.y-vry,viewp.width,viewp.height,0,0,viewp.width,viewp.height) - - surf.source(curr_ssurf) + draw.surf(tile_offset_x,tile_offset_y,viewp.width,viewp.height,0,0,viewp.width,viewp.height) + + surf.source(curr_ssurf) surf.source(curr_tsurf) end @@ -91,17 +140,16 @@ function update_game() --- mapa_update(abad.hab,cameras[current_camera].hab) local vp_x, vp_y = viewp:position() if key.down(keyRight) then - vp_x = vp_x+1 + if vp_x+1<=(arcade_config.tiles_width*mapa_room_cols*(mapa_rooms_per_piso))-(arcade_config.resolucion.width) then vp_x = vp_x+1 end elseif key.down(keyLeft) then if vp_x>0 then vp_x = vp_x-1 end elseif key.down(keyUp) then if vp_y>0 then vp_y = vp_y -1 end elseif key.down(keyDown) then - vp_y = vp_y+1 + if vp_y+1<=(arcade_config.tiles_height*mapa_room_rows*mapa_pisos)-(arcade_config.resolucion.height) then vp_y = vp_y+1 end end viewp:position(vp_x, vp_y) - local room = viewp:room() - render_view(room) + render_view(vp_x, vp_y) fps_print() viewp:print() end diff --git a/data/main.lua b/data/main.lua index 56c23a3..676e11e 100644 --- a/data/main.lua +++ b/data/main.lua @@ -14,9 +14,11 @@ function mini.init() logo=surf.new(arcade_config.logo_sf.width,arcade_config.logo_sf.height) back=surf.new(arcade_config.surface.width,arcade_config.surface.height) -- buffer per a 3x3 habitacions - local map_buffer_width = 3*mapa_room_cols*arcade_config.tiles_width - local map_buffer_height = 3*mapa_room_rows*arcade_config.tiles_height - map_buffer=surf.new(map_buffer_width, map_buffer_height) + -- local map_buffer_width = 3*mapa_room_cols*arcade_config.tiles_width + -- local map_buffer_height = 3*mapa_room_rows*arcade_config.tiles_height + local map_buffer_width = arcade_config.surface.width+2*arcade_config.tiles_width + local map_buffer_height = arcade_config.surface.height+2*arcade_config.tiles_height + map_buffer=surf.new(map_buffer_width,map_buffer_height) fade.init() textsf=surf.new(arcade_config.org_resolucion.width,arcade_config.org_resolucion.height) diff --git a/data/map.lua b/data/map.lua index e1a6c76..9e2c6a6 100644 --- a/data/map.lua +++ b/data/map.lua @@ -1,7 +1,7 @@ mapa_room_cols = 12; -- en quantitat de tiles mapa_room_rows = 6; -- en quantitat de tiles mapa_rooms_per_piso = 10 -mapa_pisos = 7 +mapa_pisos = 8 -- 0 1 2 3 4 5 6 7 8 9 -- 10 11 12 13 14 15 16 17 18 19 diff --git a/data/viewport.lua b/data/viewport.lua index e81b5bc..875ea14 100644 --- a/data/viewport.lua +++ b/data/viewport.lua @@ -2,7 +2,7 @@ require "map" local arcade_config = require("arcade_config") -local viewport={} +viewport={} function viewport.new() return { x=0, y=0, @@ -11,10 +11,33 @@ function viewport.new() position=viewport.position, print=viewport.print, room=viewport.coord2room, - roomXY= viewport.room2coord } + roomXY= viewport.room2coord, + tile= viewport.coord2tile } end +function viewport:coord2tile () + local tw = arcade_config.tiles_width + local th = arcade_config.tiles_height + local cols = mapa_room_cols + local rows = mapa_room_rows + local rooms_per_floor = mapa_rooms_per_piso + + local calc_col = math.floor(self.x / tw) % cols + local calc_row = math.floor(self.y / th) % rows + local calc_room = math.floor(self.y / (th * rows))*rooms_per_floor+math.floor(self.x / (tw * cols)) +-- print("X= "..self.x.." / W="..tw.." / C= "..cols.." > "..calc_col) +-- print("Y= "..self.y.." / H="..th.." / R= "..rows.." > "..calc_row) +-- print("CR= "..calc_row.." / RF= "..rooms_per_floor.." / CC= "..calc_col) + -- local tile_offset_x = self.x - (calc_col * tw * cols) + -- local tile_offset_y = self.y - (calc_row * th * rows) + local tile_offset_x = self.x - (calc_col * tw) - ((calc_room%rooms_per_floor)*cols*tw) + local tile_offset_y = self.y - (calc_row * th) - ( math.floor(calc_room/10)*rows*th) +-- print(self.x.." C"..calc_col.." W"..tw.." R"..calc_room.." c"..cols.." > "..tile_offset_x) + -- room, x, y, offset x, offset y + return calc_room, calc_col, calc_row, tile_offset_x, tile_offset_y +end + function viewport:coord2room () local tw = arcade_config.tiles_width local th = arcade_config.tiles_height @@ -29,15 +52,15 @@ function viewport:coord2room () return calc_room end -function viewport:room2coord ( _room ) +function viewport:room2coord ( room ) local tw = arcade_config.tiles_width local th = arcade_config.tiles_height local cols = mapa_room_cols local rows = mapa_room_rows local rooms_per_floor = mapa_rooms_per_piso - local x = (_room % rooms_per_floor) * cols * tw - local y = math.floor(_room/rooms_per_floor) * rows * th + local x = (room % rooms_per_floor) * cols * tw + local y = math.floor(room/rooms_per_floor) * rows * th local room_center_x_offset = (cols * tw) >> 1 local room_center_y_offset = (rows * th) >> 1