XGJ5JRNW5W4PZASKSOSZFMNKCIZVZRUNTJOU7J2GTFEZ76WWSZHQC
DSZ7DCJ3FJQPYZLH6M77LK5PWAJFRCS43DOUZSKVPVKHWO6AMCZQC
OAXZV7INPBKNOELJUOGIV576J6ONBQJDMS4ACHRZU3HWDIBPENSAC
KBXYM7TV2JYKBC2PTTJ7JED647GLGUHNIF3CZKXHHQNF7W74I3NAC
ZJVTNQENVPZC2IP2JL3CLZ3REBPTBZD3HEL6LMG6QSV4QLNLILVAC
F3YDOIDPLXNLK3EB7ZYKUT3DMUS22Q5XMNW6FUK634U6MG7NEDNQC
4I2OYRVUHCZKTEV7BM3F6VEZVD6E6KSBLRVBPKEQLNLX37BEWVVQC
D53MJPOEMKPITCY34SKTLVWPHAKY5A6YXBA4OVSWGOEB4YQNHQRAC
M7SCV2NITKRNNVCQSSY6MNPY3ODFKWGA2WRGDFDLTN3SXM6CAAWAC
3FDW2TSNQU4E4JAXO26XR54QY26OOU3S4NJAYMLCB5NQTSLUC3TAC
Z6OWVOJ4DHANOCLWQMFCV5GI2MTTMUVBO7KXPM2DDY7475FJZ5PAC
R5QXEHUIZLELJGGCZAE7ATNS3CLRJ7JFRENMGH4XXH24C5WABZDQC
JBMY3NW7Z4SQWVWDFRKXSNC4HLEVCZJVFOFPW5VTY2CKWQNVKKGQC
ZHQVKRGVC55Y5H64KCPSUHR5A2U5CQ4FLHWOR4WO3JH6TD4R4C7AC
YASTFHTECB4SLOHBRREMWGEVDSNUC2USP7P4PJLXZPKC3J5G3CKQC
YFQRJ4EYPIIUN26G4XKLAXK4YHJ54IKUDI272U4UT6BP2JEXWK6QC
6C3UZDESM2HPFIHAW5YIPUV6VXO4YV5DIEY574HUGP2DGOQNUVOAC
VCMXADALFRE2Y6S2DBMD6J6AKFDE6RD2JXLITW2R47ZKFLQFJ3ZQC
WF2V3FZTWX6LELGSZ76RTX3MKNUKNRATEEM2ZQ6FK7D46NF6WBHQC
L2TYWUSDK63PUPQK7WNTLC4VTLIXC2DGVCTJG7RKVG2ZUHX7QC4QC
7TQAF4BYIK75EEYCCK7VEUSZHNCWMWIA3HZGQKIILYESUZ5ZZRVQC
O5GJ6PNNBYHH4X3DU4XOB7IDJ4QEW5KXFETIDUJESBUKJYXBSYYAC
24TI6Z37DFRITXCLED3MTXAMRBPA6TMPH642AGCIMJSO3BMNHWAQC
KU5CA4SRG3STAVKMS5OOHKF3STNKOO2Z5KRXNCFFLS6E7TXZCMFAC
PFPA3MDGTKKFDUIV2RW3BIOU2UVGY4LO5BPKOXCJ6LELIILXJ73AC
VUJJNWJDHQFAQO4QGV7YOXG3K7M66P7SIYNA22R36LIBDKFMKPIQC
6KWWBTHIBL5OC34J2QFGMVZHPMIGFHVICSABW2UP34OJO67J7EGQC
KOYVQMLMWR4VVZW43BKS53D6OSDPBIWZG6MWNGA4MZTSWWFYKDCQC
DF4UY7I2N2RXV6HWG3KD35TRVCOQ3ZZYTMRDBJGNNPELT7OWDDLQC
LF3FPBGA62PJ27DSHOQEHZBENSC7AR6KAL3MTHY2GKK52ROLH7XAC
OTIBCAUJ3KDQJLVDN3A536DLZGNRYMGJLORZVR3WLCGXGO6UGO6AC
DSDKFEUKSAWZGMJ4PISC64WVYVSEHWAOJ5WE7K7PJAY5G3UGV36QC
KSMOA4U6PUIUQNFGOQCST6DCLWJ5NYRSIIFG76263ZQXSWHUB3SAC
DGB4UVTUHD7BCOXZ57MD2SLAPYMXQ2NU4VIAJOMDZAFWH66OVPMQC
R5HNWYMH47LWVHS5VVXNR6TCBDXDURVXZ6RCUNFTTTMIXF275ULQC
CVINRGMGFEQKTIUOEBSLHBLJUJM5BRR5S4UBYGOGXY6DF3LGY3IAC
UGWH4VEHN5G6REWZU6BCXZ57AFU7PGK4MULMMHMJCMEMVVEDH2KAC
75ZOU2WSTLPMHTNOLMAY26VSUECGR7SJJFGZSUNWGSJYWOCAH5GAC
JIBCE66ZTWM5WEHEHNKKTRWBJQSQWBDDWPMOJIJR5Q676OSHYCNAC
SUPHTPXYKS4JBDPASHAYA5OBVJ45QT7ZV2HYNTF7OJYOKKS6DW5QC
VWI3I2GPQERME744EFJALHESTL5RZHZLEHEJPHENYRBJTSHWN27AC
ZXQ2MMPAOIA4TN3TWMFPXZUL7NUE3EWXLV2JHBQXEINE7WCKFSIQC
RTPSAV4IFCMYNNYF5YQB45HMSMXMD4ODLIVR2ZE7JUQSIJH66N6AC
ENUAMRVLNYIRMK344W52ONNAFM4URM7PEERPW47ZXTIO2SOIOVEQC
FWZXTL7BUJAGF5I3X4G74KWRT2BFBH3TMYQNCODGNTQ2S74GJRXAC
BF7TW3EKRIDYC6J2Q2J4YOBAVQF55Y3H6KGZIHNXMH4N72MR6GXQC
OEJIDMZ2F2WEV7N7PSLMJL3RG55ZHI552AQJUTCG27XRT4VZTRUAC
ZHEJFKSLMORNRVOM7ZY7P4WAXIKGTQ5JVRJRWICXNXKF6HJWEFCQC
P7G3PKCOZKP6FIY3UL423QE3VU6B7JMDBIZUB7WSZG7GFIQR6RXQC
X7HYGAL2QVKG7M5EMZ2VSH37UYWGE3EPUXYQBJOVL6IGJFZ2I5AAC
Q2C4QGRCXKMCWMEQJT2OJMC5A3OIYKWPQBU4U3QWICEJHFXO6LPQC
HJRHOHQKT6GDT6P7BXIMA5JF3E4BXI2OAZH6DJRNEI4RG2EE6RJAC
result.x = math.random(Viewport.x, Viewport.x+iscale(App.screen.width))
result.y = math.random(Viewport.y, Viewport.y+iscale(App.screen.height))
if _ == 10 or not overlaps_any_definition(result) then
result.w, result.h = nil
result.x = round(result.x/100)*100
--? print('$'..color_escape(--[[bold]]1, --[[blue]]4))
--? print(msg)
--? print(reset_terminal())
--? print('=>'..color_escape(0, --[[green]]2))
--? print(result)
--? print(reset_terminal())
--? print('=>'..color_escape(0, --[[red]]1))
--? print(result)
--? print(reset_terminal())
Run_time_error = result
if result:match('^ERROR ') then
Load_time_error = result:sub(#('ERROR '))
end
-- look for a message from outside, and return nil if there's nothing
print('Viewport before survey animation', Viewport.x, Viewport.y, Viewport.zoom)
local cw, ch = initialize_global_viewport()
snapshot_canvas(cw, ch)
print('Viewport at start of survey animation', Viewport.x, Viewport.y, Viewport.zoom)
print('start animating towards', Global_viewport.x, Global_viewport.y, Global_viewport.zoom)
end
-- initialize animation
Animating = {
copy_viewport(Global_viewport),
copy_viewport(Viewport),
}
Viewport.x = -App.screen.width/2
Viewport.y = -App.screen.height/2
---[[ '--' at start to disable animation, '---' to enable
end
local globalw, globalh = initialize_global_viewport()
snapshot_canvas(globalw, globalh)
Animating = {
Save_viewport,
}
Save_viewport = nil
Zoomed_out = nil
local globalw, globalh = initialize_global_viewport()
snapshot_canvas(globalw, globalh)
Animating = {
{
x=sx(x)-App.screen.width/Save_viewport.zoom/2,
y=sy(y)-App.screen.height/Save_viewport.zoom/2,
w=App.screen.width/Save_viewport.zoom,
h=App.screen.height/Save_viewport.zoom,
zoom=Save_viewport.zoom,
},
}
Zoomed_out = nil
Save_viewport = nil
end
print('animation frame: Viewport is now', Viewport.x, Viewport.y, Viewport.zoom)
B()
end
end
print('Viewport at end of survey animation', Viewport.x, Viewport.y, Viewport.zoom)
Global_viewport = nil
end
A()
return
end
end
animate_next_frame(Animating[1], dt)
Animating = nil
Canvas = nil
snapshot_canvas = function(new_width, new_height)
App.screen.width, App.screen.height = new_width, new_height
local w = math.min(16000, App.screen.width)
local h = math.min(16000, App.screen.height)
print('creating canvas', w, h)
end
Canvas = love.graphics.newCanvas(w, h)
local saved_viewport = Viewport
Viewport = copy_viewport(Global_viewport)
Viewport.zoom = 1.0
A()
-- Render the canvas at pixel perfect resolution.
local globalw, globalh = initialize_global_viewport()
snapshot_canvas(globalw, globalh)
Animating = {
copy_viewport(Global_viewport),
}
Zoomed_out = true
end
local settings = settings()
print('writing settings for', App_name)
print('window', settings.x, settings.y, settings.width, settings.height)
local viewport = settings.app[App_name].viewport
print('viewport', viewport.x, viewport.y, viewport.zoom)
love.filesystem.write('config', json.encode(settings))
love.filesystem.write('config', json.encode(settings()))
local q = love.graphics.newQuad(
(Viewport.x-Global_viewport.x)*Viewport.zoom,
(Viewport.y-Global_viewport.y)*Viewport.zoom,
App.screen.width,
App.screen.height,
Global_bounds.w*Viewport.zoom,
Global_bounds.h*Viewport.zoom)
end
if Save_viewport then
-- special Expose-like 'zoom mode' in progress
love.graphics.setColor(0,0,0,0.2)
love.graphics.rectangle('fill', vx(Save_viewport.x), vy(Save_viewport.y),
scale(App.screen.width/Save_viewport.zoom), scale(App.screen.height/Save_viewport.zoom))
-- Viewport width,height should match screen/window width,height at all times.
Viewport = {}
Viewport = {
x=-50, y=-50, -- surface coordinate
zoom=1.0
}
Viewport = {}