fix a couple of travel node saving bugs
This commit is contained in:
parent
9635e0ea2f
commit
03f1a96112
29
bmp.lua
29
bmp.lua
|
@ -10,7 +10,7 @@ local bit = require 'bit'
|
||||||
local function getHeader( filename )
|
local function getHeader( filename )
|
||||||
local offset = love.data.unpack( "<I4", assert(love.filesystem.read( "data", filename, 14 )), 11 )
|
local offset = love.data.unpack( "<I4", assert(love.filesystem.read( "data", filename, 14 )), 11 )
|
||||||
local header, size = assert( love.filesystem.read( filename, offset ) )
|
local header, size = assert( love.filesystem.read( filename, offset ) )
|
||||||
print( "BMP HEADER", filename, size, "\n", header )
|
print( "BMP HEADER", filename, size, "\n", string.byte( header, 1, size ) )
|
||||||
return header
|
return header
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -33,8 +33,8 @@ local formats = {
|
||||||
header = getHeader( "data/earth/travel_nodes.bmp" ),
|
header = getHeader( "data/earth/travel_nodes.bmp" ),
|
||||||
encode = function( r ) return math.floor( r * 255 / 16 ) end,
|
encode = function( r ) return math.floor( r * 255 / 16 ) end,
|
||||||
bytesPerPixel = 0.5,
|
bytesPerPixel = 0.5,
|
||||||
w = 512,
|
w = 800,
|
||||||
h = 285,
|
h = 400,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,8 +65,9 @@ end
|
||||||
local function packTwentyFour( bytes )
|
local function packTwentyFour( bytes )
|
||||||
local twentyFour = { bytes[1] }
|
local twentyFour = { bytes[1] }
|
||||||
for j = 2, #bytes do
|
for j = 2, #bytes do
|
||||||
bytes[j] = string.char( bytes[j], bytes[j], bytes[j] )
|
twentyFour[j] = string.char( bytes[j], bytes[j], bytes[j] )
|
||||||
end
|
end
|
||||||
|
return twentyFour
|
||||||
end
|
end
|
||||||
|
|
||||||
function t.save( data, format )
|
function t.save( data, format )
|
||||||
|
@ -75,20 +76,19 @@ function t.save( data, format )
|
||||||
local bytes = { format.header }
|
local bytes = { format.header }
|
||||||
format.byte = 0
|
format.byte = 0
|
||||||
local i = 2
|
local i = 2
|
||||||
for x = 0, w - 1 do
|
for y = h - 1, 0, -1 do
|
||||||
for y = 0, h - 1 do
|
for x = 0, w - 1 do
|
||||||
bytes[i] = format.encode( data:getPixel(x, y) )
|
bytes[i] = format.encode( data:getPixel(x, y) )
|
||||||
i = i + 1
|
i = i + 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if format.bytesPerPixel < 1 then bytes = foldByteArray( bytes )
|
if format.bytesPerPixel < 1 then bytes = foldByteArray( bytes )
|
||||||
else packTwentyFour( bytes ) end
|
else bytes = packTwentyFour( bytes ) end
|
||||||
return table.concat( bytes )
|
return table.concat( bytes )
|
||||||
end
|
end
|
||||||
|
|
||||||
--takes an array of world-space points in [-180, 180] x [-100, 100]
|
--takes an array of world-space points in [-180, 180] x [-100, 100]
|
||||||
--e.g { { x = 0.5, y = 0.5 }, { x = 0.4, y = 0.6 }, }, etc.
|
--e.g { { x = 0.5, y = 0.5 }, { x = 0.4, y = 0.6 }, }, etc.
|
||||||
--and a function which maps points to colours
|
|
||||||
function t.savePoints( points, format )
|
function t.savePoints( points, format )
|
||||||
format = assert( formats[format] )
|
format = assert( formats[format] )
|
||||||
|
|
||||||
|
@ -102,11 +102,14 @@ function t.savePoints( points, format )
|
||||||
if format.bytesPerPixel < 1 then
|
if format.bytesPerPixel < 1 then
|
||||||
for i, point in ipairs( points ) do
|
for i, point in ipairs( points ) do
|
||||||
local wx, wy = point.x, point.y
|
local wx, wy = point.x, point.y
|
||||||
--get bitmap coordinates
|
-- get bitmap coordinates:
|
||||||
local x, y = math.floor(format.w * (wx + 180) / 360), math.floor(format.h * (1.0 - (wy + 100) / 200))
|
-- N.B., y's divided by 190 rather than 200 because of an idiosyncracy in the travel node image
|
||||||
|
local x, y = math.floor(format.w * (wx + 180) / 360), math.floor(format.h * (wy + 100) / 190)
|
||||||
|
|
||||||
--get index into byte array
|
--get index into byte array
|
||||||
local idx = 2 + x * format.h + y
|
local idx = 2 + y * format.w + x
|
||||||
bitmap[idx] = 0x0f --0b00001111
|
print( "SAVING POINT:", wx, wy, x, format.h - y - 1, idx )
|
||||||
|
bitmap[idx] = 1 --white: this header uses an indexed palette
|
||||||
end
|
end
|
||||||
--now map pixels to 4-bit strings, slap on the header, and pass it back up
|
--now map pixels to 4-bit strings, slap on the header, and pass it back up
|
||||||
return table.concat( foldByteArray( bitmap ) )
|
return table.concat( foldByteArray( bitmap ) )
|
||||||
|
@ -133,7 +136,7 @@ function t.savePoints( points, format )
|
||||||
for j = 2, size do
|
for j = 2, size do
|
||||||
if bitmap[j] == 0
|
if bitmap[j] == 0
|
||||||
then bitmap[j] = "\0\0\0"
|
then bitmap[j] = "\0\0\0"
|
||||||
else bitmap[j] = string.char( bitmap[j].attack and 0xff or 0, bitmap[j].place and 0xff or 0, 0 )
|
else bitmap[j] = string.char( 0, bitmap[j].place and 0xff or 0, bitmap[j].attack and 0xff or 0 ) --bgr24
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
22
button.lua
22
button.lua
|
@ -19,35 +19,13 @@ function t.contains( button, x, y )
|
||||||
and y < button.y + button.h and y > button.y
|
and y < button.y + button.h and y > button.y
|
||||||
end
|
end
|
||||||
|
|
||||||
local function debugLoop()
|
|
||||||
local i = 0
|
|
||||||
local j = 0
|
|
||||||
local a = t
|
|
||||||
repeat
|
|
||||||
i = i + 1
|
|
||||||
--print( "BUTTON", i, tostring( a ) )
|
|
||||||
a = a.next
|
|
||||||
until a == t or i > 100
|
|
||||||
a = t
|
|
||||||
repeat
|
|
||||||
j = j + 1
|
|
||||||
--print( "BUTTON", i, tostring( a ) )
|
|
||||||
a = a.prev
|
|
||||||
until a == t or j > 100
|
|
||||||
print( i, j, "BUTTONS" )
|
|
||||||
end
|
|
||||||
|
|
||||||
local k = 1
|
|
||||||
function t.new( b )
|
function t.new( b )
|
||||||
b = setmetatable( b or {}, t )
|
b = setmetatable( b or {}, t )
|
||||||
b.next = t
|
b.next = t
|
||||||
t.prev.next = b
|
t.prev.next = b
|
||||||
b.prev = t.prev
|
b.prev = t.prev
|
||||||
t.prev = b
|
t.prev = b
|
||||||
--nonsense
|
|
||||||
k = k + 1
|
|
||||||
print( "ADD BUTTON", k, tostring( b ) )
|
|
||||||
debugLoop()
|
|
||||||
return b
|
return b
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -87,9 +87,9 @@ function t.selectNearest( lines, wx, wy )
|
||||||
end
|
end
|
||||||
|
|
||||||
function t.save( lines )
|
function t.save( lines )
|
||||||
local str = {}
|
local str = { "b" }
|
||||||
for i, poly in ipairs( lines ) do
|
for i, poly in ipairs( lines ) do
|
||||||
str[i] = table.concat( poly, " " )
|
str[i + 1] = table.concat( poly, " " )
|
||||||
end
|
end
|
||||||
str = table.concat( str, "\nb\n" ):gsub("(%S+) (%S+) ", "%1 %2\n")
|
str = table.concat( str, "\nb\n" ):gsub("(%S+) (%S+) ", "%1 %2\n")
|
||||||
return str
|
return str
|
||||||
|
|
8
main.lua
8
main.lua
|
@ -23,10 +23,10 @@ end
|
||||||
function love.update( dt )
|
function love.update( dt )
|
||||||
local tx, ty = 0, 0
|
local tx, ty = 0, 0
|
||||||
local moveCamera = false
|
local moveCamera = false
|
||||||
if love.keyboard.isScancodeDown( "w" ) then moveCamera = true; ty = ty + 30 * dt end
|
if love.keyboard.isScancodeDown( "w" ) then moveCamera = true; ty = ty + dt * 150 / Camera.zoom end
|
||||||
if love.keyboard.isScancodeDown( "a" ) then moveCamera = true; tx = tx - 30 * dt end
|
if love.keyboard.isScancodeDown( "a" ) then moveCamera = true; tx = tx - dt * 150 / Camera.zoom end
|
||||||
if love.keyboard.isScancodeDown( "s" ) then moveCamera = true; ty = ty - 30 * dt end
|
if love.keyboard.isScancodeDown( "s" ) then moveCamera = true; ty = ty - dt * 150 / Camera.zoom end
|
||||||
if love.keyboard.isScancodeDown( "d" ) then moveCamera = true; tx = tx + 30 * dt end
|
if love.keyboard.isScancodeDown( "d" ) then moveCamera = true; tx = tx + dt * 150 / Camera.zoom end
|
||||||
if love.keyboard.isScancodeDown( "q" ) then Camera.Zoom( dt * 400 ) end
|
if love.keyboard.isScancodeDown( "q" ) then Camera.Zoom( dt * 400 ) end
|
||||||
if love.keyboard.isScancodeDown( "e" ) then Camera.Zoom( -dt* 400 ) end
|
if love.keyboard.isScancodeDown( "e" ) then Camera.Zoom( -dt* 400 ) end
|
||||||
if moveCamera then Camera.Translate( tx, ty ) end
|
if moveCamera then Camera.Translate( tx, ty ) end
|
||||||
|
|
7
map.lua
7
map.lua
|
@ -179,16 +179,15 @@ function map.draw()
|
||||||
end
|
end
|
||||||
|
|
||||||
local function write( filename, string )
|
local function write( filename, string )
|
||||||
print( "Pretending to write", string:len(), "bytes to", filename )
|
print( "Writing", string:len(), "bytes to", filename )
|
||||||
--[[ os.rename( filename, filename..".bak" ) --just in case :^)
|
os.rename( filename, filename..".bak" ) --just in case :^)
|
||||||
local file = assert( io.open( filename, "w+" ) )
|
local file = assert( io.open( filename, "w+" ) )
|
||||||
assert( file:write( string ) )
|
assert( file:write( string ) )
|
||||||
file:close()]]
|
file:close()
|
||||||
end
|
end
|
||||||
|
|
||||||
function map.save()
|
function map.save()
|
||||||
for k, layer in pairs( layers ) do
|
for k, layer in pairs( layers ) do
|
||||||
print( "SAVING:", k, tostring( layer.filename ) )
|
|
||||||
write( map.path..tostring( layer.filename ), assert( layer:save() ) )
|
write( map.path..tostring( layer.filename ), assert( layer:save() ) )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -57,10 +57,6 @@ function t.getPixel( territory, x, y )
|
||||||
return territory.imgd:getPixel( imgx, imgy )
|
return territory.imgd:getPixel( imgx, imgy )
|
||||||
end
|
end
|
||||||
|
|
||||||
function t.toggleVisibility( territory )
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
0
|
0
|
||||||
20 -- once sailable.bmp is brighter than this, the area is traversable by ships
|
20 -- once sailable.bmp is brighter than this, the area is traversable by ships
|
||||||
|
@ -147,7 +143,9 @@ function t.computeBorder( territory, threshold, key )
|
||||||
end
|
end
|
||||||
|
|
||||||
function t.save( territory )
|
function t.save( territory )
|
||||||
return bmp.save( territory.imgd, "512rgb24" )
|
local fmt = (territory.name == "sailable") and "512r4" or "512rgb24"
|
||||||
|
print( "saving bitmap: ", territory.name, fmt )
|
||||||
|
return bmp.save( territory.imgd, fmt )
|
||||||
end
|
end
|
||||||
|
|
||||||
return t
|
return t
|
Loading…
Reference in New Issue