SPXS2WOLSSEEGOY5XJOITKPBL6MSD7NSXC4ESFVKP63PEFTEP33AC K75LHADXTVQ5UHTH7XLYYKIE35ZMLYA2ETXWZURGWJQX5UOPDDZAC B4B37ODPNCVQXHIM47T62G6NAF7U5XI6MT5SLK6PMU3RZT7ICO3AC NEI64VC6W27Y2FQZP7LXEQCNSDRWDXESBTIEQSZVKVYF2EQWTFFQC ZC7UBMKI3XSECB6VC2YYSXZYSWFQTPFGPNX2JQTILJQWHOA6FKYAC 3LWDKR5FPZNW2ESSTTLWBBEBJ3B77UH4NEOC26PHOVG4HKOU4VQAC 3VHUIIATPOF7FXB7NTL5MESCV5BCQACII2D7QZ4UIUCBX3CWXMMAC OTIBCAUJ3KDQJLVDN3A536DLZGNRYMGJLORZVR3WLCGXGO6UGO6AC DIAP63OYZA2Q5EJN767BNV7VORLASO5T6MNESDFCNVTODU7Z36WQC LLQC2M2IMEJBJQXZTKC3OAKG5WKHSERXKAKCYHQRUZZD6CVRIHAQC TLT6DHBC3QNRVG2NCOESDUIVMHXWOVVTSZ2NBPNHXHG2GEDB62TAC 4TOADL2SFUZYNP3ZO3AIBN66QAWZDL5XIZZEA3DLYRF6SSEGLF3AC 22K3VJIL4SRPXVAEJSWRS7KM4UPV4SOODPSTSSKPFWKLTYRG365QC K464QQR4FTXFUMHFWAGOD5DJ6YHUBUKRHLXF2ORE74DVT7TVQ35QC 5YGO6JX5WTBNIRW2LKLJF7EE7Z5UNXAMLG24AUV5BK227S4AI4IQC ZE2ILGOVYZKBXUNKGMBGRP2KSDOQBO23RBFEMVVYFAWAIO5FCZCAC FXI74QCLOZ4BS7UVZ3U2PE3LOL7MX3FWGHZCTGH3DYFXGTXVVIRAC 564RK5FW46AHODXU7LMSGA5LQND5SIFQTZMBFEKYEA3KGMED4JBAC AD34IX2ZSGYGU3LGY2IZOZNKD4HRQOYJVG5UWMWLXJZJSM62FFOAC YGCT2D2ORMLTBHANLGHZV3EBGGHD7ZK55UAM7HF2AVSHDXAAKK5QC 2CTN2IEF4ZCVZQORAEBXAUDANF6NYZA24GQ5PXK2WUDWYU5UV25QC UHB4GARJI5AB5UCDCZRFSCJNXGJSLU5DYGUGX5ITYEXI7Q43Z4CAC JOPVPUSAMMU6RFVDQR4NJC4GNNUFB7GPKVH7OS5FKCYS5QZ53VLQC KKMFQDR43ZWVCDRHQLWWX3FCWCFA3ZSXYOBRJNPHUQZR2XPKWULAC 7OBUZHRJSBBOQT6WXLTQ2FWKNMXE22WRF3PDL6YWR2RAEBCLBYBAC KTSXR2MUTVMBEU7BGN5CHXL5UP6PPA6TTHN4CON7T67YWGZB72VAC 6VJTQKW7YJ7E3WRNSTFYULUDHHTYAE4JELX4J55LO75X4FDM3JZAC MX7YD2WCLJSLML3DSDVU3YLTALIVPTM7H7LNGSHEEUPOJGQHWUAAC LHG2QWSOMAYE4RTOFLL5H53GHUFBUOSEM3Y4TL343IENBOAHG6GAC VP5KC4XZBKD536KCBFO47UKH74RNONENDCFJAHUMVUTPVPGJWD4AC 3XQROLSKN5GIROYOSBN2OW2DSG34PKDU4BGYV7DL6F3V5RNSHATQC Z2VZTIXYXUZXF4ZUVG54IOIRSMBGUZJZ2RTBPYOJC7NWBOUFU6YAC AVTNUQYRBW7IX2YQ3KDLVQ23RGW3BAKTAE7P73ASBYNKOHMQMH5AC VPRGENLAJTF52YSY6NNZAPWQOD2TLP7DJU7DAAWGL4WFHOYAZF5QC YT5P6TO64XSMCZGTT4SVNFOWUN5ECNXTWCMFXN3YCDZUNH4H3IFAC YF2ATH2QIIIMWNOH6IDNADNLUW3XUIYAMEUSTVM4EWMK2YWQ2OBAC MB7YQ22TMZPOCITCOX3YCVZLM65742265N3W6QQNBNNYP5LI66IQC A4NPMJKEBHDG4M2Z55H6Q54YTJYDN7BBN3OBRXNZVGHRLFHR2UGAC 4FL2EDGBMB7ORKXCHLSZTSMNDZELNV65M4OYHMFMU6FCSQFM3BMQC ZMRMC3O6RXECMBAPOOKUSYDJ3K6CQVRFHFE2BID4BUBOL3YB6MGAC XGHCLIKBWIW24G7O5QLYH6EUIY3TWTYFTUIYTWE25RFEGBHMZOKQC EHADZNMBVAF6S3LW6DWDVA53KFF5TPGKUXBP4LCWXSLUEIYCA3QAC HRWN5V6J6VMXS7WNSRGI7WMUSZ2OI52JJ4IK352VVSDZI4EF5HHQC DZMHZBYSL73BWS7OX3BGOYCITVIGFKNLUXNQUAGKXMGXDE4ZRL6QC 2R6UORLNH722O3OOQMXEMZNRSRW2JCN5OBVYJZMIA6AIJCKLJ24QC CHEHZV5JUFZD4WMHFAXNKFMVFSAA4Y4MMWLRBFDJBHAZUFRKOD5AC VOU73AK6XOVIOCY6PHUXS5RQZ2TGFEF7RYNOKFE2XSHRCZBAJMYQC VIGITGW5FAYYF4PDK6XAPI4S43X4FMAMBH77VLGMKLNUY7JJHR4QC GFXWHTE6POBIOBUMRAWD5QS22JEO52EF4VTLMB4CDK4RLSCK7HCAC 2Y7YH7UPQWDNYDJN4BYY2MOHA36B2BIRX6DMIAKHJPQC7UP2R6NQC AJB4LFRBMIRBEDWJ3OW7GQIMD2BZBVQ62GH4TE2FISWZKSAHRF4QC GG2553RBUKMCWIAD3EWJV7C2QH2BIS5V2E3BDTFSTYRHAPXGBF7QC ORKN6EOBUFVAD2TXYW5OIKSL55RU24LOFDTTTXHDZUZ57QRDCY7QC 2CK5QI7WA7M4IVSACFGOJYAIDKRUTZVMMPSFWEJTUNMWTN7AX4NAC R6GUSTBY5ZHR7E46DSIDQDNZDJI6QMZQDC7RPQMQWLGWQKXU6HVQC XFODWM5LVER7MERESZNYZBB6SWNRUUYPFYEBOOTVYDWFZFZE7HQQC 3QNOKBFMKBGXBVJIRHR2444JRRMBTABHE4674NR3DT67RRM2X6GAC I3ZXLS6BR2AYYRDCFM57J64A7TQR3M7IJFDWDHB25FVAUOLV3L4AC 3SMSYTKNRPZXV5TFOVAKW7FUPPPDSTG6BWVT3ZAXB23YCH36MXCAC ICUW7F3XQLURK4LSNPH5E3NDEFSRHKATEUHH2UPFJTMHYR3ZJF3QC KC52TVUD2NB4OUFR75SR36CSDWOI3UTCNZ6S24RUIWK4SRLIM7JAC A4BSGS2CX4JK7IELL655EC6HAY6ILCWTGIHWZXHRGQOKU3HSUPLAC BJ5X5O4ACBBJ56LRBBSTCW6IBQP4HAEOOOPNH3SKTA4F66YTOIDAC HMMUQOIY7EMGDJB6KWOWCSKA5OXBQXTT5PT3QXXQOMTA742LSGNAC VMV4LBR4O26OBLEBKG5UD53H5JOIZOTSVVJ5PNZCPG54PHMLYEFAC A7O6MZIUNUHW65ODP7GLYO37RQ26AOUDGP5Z6M2RG77VZWKL27BQC 2L5MEZV344TOZLVY3432RHJFIRVXFD6O3GWLL5O4CV66BGAFTURQC function App.version_check()-- available modes: run, errorError_message = nilError_count = 0-- we'll reuse error mode on load for an initial version checklocal supported_versions = {'11.5', '11.4', '12.0'} -- put the recommended version firstlocal minor_versionMajor_version, minor_version = love.getVersion()Version = Major_version..'.'..minor_versionif array.find(supported_versions, Version) == nil thenCurrent_app = 'error'Error_message = ("This app doesn't support version %s; please use version %s. Press any key to try it with this version anyway."):format(Version, supported_versions[1])print(Error_message)-- continue initializing everything; hopefully we won't have errors during initializationendend
function App.initialize_globals()Supported_versions = {'11.5', '11.4', '12.0'} -- put the recommended version firstcheck_love_version_for_tests()
function App.initialize()love.keyboard.setTextInput(true) -- bring up keyboard on touch screenlove.keyboard.setKeyRepeat(true)love.graphics.setBackgroundColor(1,1,1)if Current_app == 'pong' thenpong.initialize()elseif Current_app == 'source' thensource.initialize()elseif Current_app == 'error' thenelseassert(false, 'unknown app "'..Current_app..'"')endendfunction App.resize(w,h)if Current_app == 'pong' thenif pong.resize then pong.resize(w,h) endelseif Current_app == 'source' thenif source.resize then source.resize(w,h) endfunction App.initialize_globals()Supported_versions = {'11.5', '11.4', '12.0'} -- put the recommended version firstcheck_love_version_for_tests()if Current_app == 'run' thenrun.initialize_globals()elseif Current_app == 'source' thensource.initialize_globals()elseif Current_app == 'error' thenelseif current_app_is_warning() thenelseassert(false, 'unknown app "'..Current_app..'"')endLast_resize_time = Current_time
-- Another weird bit for a class of corner cases. E.g.:-- * I press ctrl+e, switch Current_app. I don't want the new app to receive-- text_input and key_release events.-- If I try to avoid text_input events by switching modes on key_release, I-- hit a new problem:-- * I press ctrl+e, am running an untested version, Current_app goes to-- 'warning', and immediately rolls back out of 'warning' in the-- key_release event.-- Skip_rest_of_key_events is ugly, but feels cleaner than creating yet-- another possible value for Current_app.Skip_rest_of_key_events = nil
function check_love_version_for_tests()if array.find(Supported_versions, Version) == nil then-- warning to include in an error message if any tests failedWarning_before_tests = ("This app hasn't been tested with LÖVE version %s."):format(Version)endend
check_love_version()function check_love_version()if array.find(Supported_versions, Version) == nil thenshow_warning(("This app hasn't been tested with LÖVE version %s; please switch to version %s if you run into issues. Press any key to continue."):format(Version, Supported_versions[1]))-- continue initializing everything; hopefully we won't have errors during initializationendend
function App.resize(w,h)
elseif current_app_is_warning() thenlove.graphics.printf(Current_app.message, 40,40, 600)
if current_app_is_warning() then return endend
function current_app_is_warning()return type(Current_app) == 'table' and Current_app.name == 'warning'endfunction show_warning(message)assert(type(Current_app) == 'string')Current_app = {name = 'warning',message = message,next_app = Current_app,}function clear_warning()assert(type(Current_app) == 'table')Current_app = Current_app.next_append
if current_app_is_warning() then return endif current_app_is_warning() then return endfunction App.filedropped(file)if Current_app == 'pong' thenif pong.file_drop then pong.file_drop(file) endif current_app_is_warning() then return endelseif Current_app == 'source' thenif source.file_drop then source.file_drop(file) endelseif Current_app == 'error' thenelseassert(false, 'unknown app "'..Current_app..'"')-- Current_app =-- | run-- | source-- | {name=warning message='...' next_app = run|source}elseif current_app_is_warning() thenif Current_app == nil thenCurrent_app = 'run'
error(('There were %d test failures:\n\n%s'):format(#Test_errors, table.concat(Test_errors)))
local error_message = ''if Warning_before_tests thenerror_message = Warning_before_tests..'\n\n'enderror_message = error_message .. ('There were %d test failures:\n%s'):format(#Test_errors, table.concat(Test_errors))error(error_message)
local error_message = ''if Warning_before_tests thenerror_message = Warning_before_tests..'\n\n'enderror_message = error_message .. ('There were %d test failures:\n%s'):format(#Test_errors, table.concat(Test_errors))error(error_message)Version, Major_version = App.love_version()
- run with an unsupported version. Error message pops up and waits for a key. The app attempts to continue, and doesn't receive the key.
- run with an untested version. Error message pops up and waits for a key. The app attempts to continue, and doesn't receive the key.- run with a LÖVE v12 release candidate. No errors; it is a supported version. All tests pass.
* run with an unsupported version. Error message pops up and waits for a key. The app attempts to continue, and doesn't receive the key. Press ctrl+e to edit source. Source editor opens up without checking version.
* run with an untested version. Error message pops up. Press a key. Pong comes up, and doesn't receive the key. Press ctrl+e. Error pops up. Press a key. Source editor opens up. Press ctrl+e. Error pops up. Press a key. Pong returns.* create a couple of spuriously failing tests. Run with an untested version. Error message includes message about untested version.
* run with an untested version. Error message pops up. Press a key. Text editor comes up, and doesn't receive the key. Press ctrl+e. Error pops up. Press a key. Source editor opens up. Press ctrl+e. Error pops up. Press a key. Text editor returns.* create a couple of spuriously failing tests. Run with an untested version. Error message includes message about untested version.