--Record demos. local love = love local recorder = {} recorder.isLoaded = false local i = 0 function recorder.Reset() i = 0 for k, _ in ipairs( recorder ) do recorder[k] = nil end end function recorder.Update( ddx, ddy ) local byte = 0 if ddx > 0.5 then byte = byte + 1 end if ddy > 0.5 then byte = byte + 2 end if ddx < -0.5 then byte = byte + 4 end if ddy < -0.5 then byte = byte + 8 end i = i + 1 recorder[i] = string.char( byte + 48 ) end function recorder.Load( ) local s = love.filesystem.read( "demo" ) if not s then return end local j = 1 for c in s:gmatch( "." ) do recorder[j] = string.byte( c ) - 48 j = j + 1 end recorder.isLoaded = true i = 0 return true end function recorder.NextTick( ) local byte = recorder[ i + 1 ] if not byte then return end i = i + 1 local a, b, c, d = math.floor( byte ) % 2, math.floor( byte / 2 ) % 2, math.floor( byte / 4 ) % 2, math.floor( byte / 8 ) % 2 local ddx, ddy = a - c, b - d local n = math.sqrt( ddx * ddx + ddy * ddy ) if n < 0.001 then return 0, 0 end ddx, ddy = ddx / n, ddy / n return ddx, ddy end function recorder.Save( ) return assert( love.filesystem.write( "demo", table.concat( recorder, "", 1, i ) ) ) end return recorder