HBXK2CLZD6BIBAQB2MXDY2U2O7TAZLEZXIJUWIVNVT4F5LKWLEIQC
XGJ5JRNW5W4PZASKSOSZFMNKCIZVZRUNTJOU7J2GTFEZ76WWSZHQC
6CVVB4NZKL3YCHB4YYKTHPZY4J7CWPJVJ7VYSI7GNV4ZHBV4CMJQC
NGWIIZ5XGKXY2F7VLUYKKR26HO3AVDGXSKC5MMBSSOM4E7NX3XNAC
R5QXEHUIZLELJGGCZAE7ATNS3CLRJ7JFRENMGH4XXH24C5WABZDQC
QO2BU5MSY6N7D57BSQGE64Y5PFJF3MJ3NVLWY6VZSV5PN7IX6O5QC
72K7733VL7KMJYMTJNBDGNO3KK6LRJRSL53OGWGIS7LTUCEMJCFQC
4NFPDQ4SITGAS22RQWLPE4OEAWNRMIMIZURGSD4EQLE64RMNU6GAC
A6HLSJEOJJGNTITANAOHC7PW7IKJHUNHWRYL7LJKRFUZRLVTHGLAC
46X35644JYDQLMYGUWHSSVA5AR3CHRXWEYGEIMZRZOG3IIPLADSQC
YFQRJ4EYPIIUN26G4XKLAXK4YHJ54IKUDI272U4UT6BP2JEXWK6QC
7TQAF4BYIK75EEYCCK7VEUSZHNCWMWIA3HZGQKIILYESUZ5ZZRVQC
O5GJ6PNNBYHH4X3DU4XOB7IDJ4QEW5KXFETIDUJESBUKJYXBSYYAC
D53MJPOEMKPITCY34SKTLVWPHAKY5A6YXBA4OVSWGOEB4YQNHQRAC
PFPA3MDGTKKFDUIV2RW3BIOU2UVGY4LO5BPKOXCJ6LELIILXJ73AC
VUJJNWJDHQFAQO4QGV7YOXG3K7M66P7SIYNA22R36LIBDKFMKPIQC
L2TYWUSDK63PUPQK7WNTLC4VTLIXC2DGVCTJG7RKVG2ZUHX7QC4QC
KOYVQMLMWR4VVZW43BKS53D6OSDPBIWZG6MWNGA4MZTSWWFYKDCQC
RBMZ3SYOLDBQNQUZRBKMSUZXCOJXHQX57HQMZKAS7ZASRPTQA6NAC
6C3UZDESM2HPFIHAW5YIPUV6VXO4YV5DIEY574HUGP2DGOQNUVOAC
animate_to = function(v)
local global_viewport, globalw, globalh = initialize_global_viewport()
local canvas = snapshot_canvas(global_viewport, globalw, globalh)
v = v or global_viewport
local initial = copy_viewport(Viewport)
local final = v
local step, frame_time = 0, 0
while true do
love.event.pump()
for name, a,b,c,d,e,f in love.event.poll() do
if name == "quit" then
os.exit(0)
end
-- ignore other events
end
-- update
dt = love.timer.step()
frame_time = frame_time + dt
if frame_time > 0.01 then
frame_time = frame_time - 0.01
step = step + 1
if step > Num_animation_frames then
break
end
interpolate_viewport(initial, final, step)
--? print('animation frame: Viewport is now', Viewport.x, Viewport.y, Viewport.zoom)
B()
end
-- draw
love.graphics.origin()
love.graphics.clear(love.graphics.getBackgroundColor())
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,
globalw*Viewport.zoom,
globalh*Viewport.zoom)
App.color{r=1,g=1,b=1}
love.graphics.draw(canvas, q, 0,0)
love.graphics.present()
love.timer.sleep(0.001)
end
end
A()
local zoom, globalw, globalh
globalw = maxx-minx
globalh = globalw*App.screen.height/App.screen.width
globalh = maxy-miny
globalw = globalh*App.screen.width/App.screen.height
local global_viewport = {x=minx, y=miny, zoom=zoom}
return global_viewport, globalw, globalh
end
end
else
zoom = zoomy
if zoomx < zoomy then
zoom = zoomx
local initial_viewport = copy_viewport(Viewport)
animate_to(--[[global viewport]] nil)
animate_to(initial_viewport)
print('Viewport at end of survey animation', Viewport.x, Viewport.y, Viewport.zoom)
animate_to(Save_viewport)
print('Viewport at end of undo zoom out animation', Viewport.x, Viewport.y, Viewport.zoom)
Save_viewport = nil
end
-- precondition: Viewport == global_viewport
animate_to{
x=sx(x)-App.screen.width/Save_viewport.zoom/2,
y=sy(y)-App.screen.height/Save_viewport.zoom/2,
zoom=Save_viewport.zoom,
}
print('Viewport at end of zoom in animation', Viewport.x, Viewport.y, Viewport.zoom)
-- precondition: Save_viewport exists
-- center Viewport on x,y at zoom level Saved_viewport.zoom
snapshot_canvas = function(global_viewport, globalw, globalh)
App.screen.width, App.screen.height = globalw, globalh
Viewport = copy_viewport(global_viewport)
local canvas = love.graphics.newCanvas(w, h)
love.graphics.setCanvas(canvas)
return canvas
end
on.draw()
Viewport.zoom = 1.0
A()
local saved_viewport = Viewport
-- Render the canvas at pixel perfect resolution.
animate_to(--[[global viewport]] nil)
print('Viewport at end of zoom out animation', Viewport.x, Viewport.y, Viewport.zoom)
for _, k in ipairs{'x', 'y', 'zoom'} do
Viewport[k] = (initial[k]*(Num_animation_frames - step) + final[k]*step) / Num_animation_frames
end
end