[WIP] Ja se pot scrollar per tot el mapa sense problemes. Ara falta que els tiles de les vores carreguen des del primer pixel i no només quan hi ha espai suficient

This commit is contained in:
2026-03-19 00:45:54 +01:00
parent d35ad7d5b5
commit 0d239e7ab0
4 changed files with 112 additions and 39 deletions

View File

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