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) thenresult.w, result.h = nilresult.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 = resultif result:match('^ERROR ') thenLoad_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 animationAnimating = {copy_viewport(Global_viewport),copy_viewport(Viewport),}Viewport.x = -App.screen.width/2Viewport.y = -App.screen.height/2---[[ '--' at start to disable animation, '---' to enable
endlocal globalw, globalh = initialize_global_viewport()snapshot_canvas(globalw, globalh)Animating = {Save_viewport,}Save_viewport = nilZoomed_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 = nilSave_viewport = nilend
print('animation frame: Viewport is now', Viewport.x, Viewport.y, Viewport.zoom)B()endend
print('Viewport at end of survey animation', Viewport.x, Viewport.y, Viewport.zoom)Global_viewport = nilendA()returnendendanimate_next_frame(Animating[1], dt)Animating = nilCanvas = nil
snapshot_canvas = function(new_width, new_height)App.screen.width, App.screen.height = new_width, new_heightlocal w = math.min(16000, App.screen.width)local h = math.min(16000, App.screen.height)print('creating canvas', w, h)endCanvas = love.graphics.newCanvas(w, h)local saved_viewport = ViewportViewport = copy_viewport(Global_viewport)Viewport.zoom = 1.0A()-- Render the canvas at pixel perfect resolution.
local globalw, globalh = initialize_global_viewport()snapshot_canvas(globalw, globalh)Animating = {copy_viewport(Global_viewport),}Zoomed_out = trueend
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].viewportprint('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)endif Save_viewport then-- special Expose-like 'zoom mode' in progresslove.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 coordinatezoom=1.0}
Viewport = {}