diff options
Diffstat (limited to 'plugins/timer/init.lua')
-rw-r--r-- | plugins/timer/init.lua | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/plugins/timer/init.lua b/plugins/timer/init.lua new file mode 100644 index 00000000000..3a96f019f0d --- /dev/null +++ b/plugins/timer/init.lua @@ -0,0 +1,93 @@ +-- license:BSD-3-Clause +-- copyright-holders:Carl +require('lfs') +local exports = {} +exports.name = "timer" +exports.version = "0.0.1" +exports.description = "Game play timer" +exports.license = "The BSD 3-Clause License" +exports.author = { name = "Carl" } + +local timer = exports + +function timer.startplugin() + local timer_path = "timer" + local timer_started = false + local total_time = 0 + local start_time = 0 + local play_count = 0 + + local function get_filename() + local path + if emu.softname() ~= "" then + path = timer_path .. '/' .. emu.romname() .. "_" .. emu.softname() .. ".time" + else + path = timer_path .. '/' .. emu.romname() .. ".time" + end + return path + end + + local function save() + total_time = total_time + (os.time() - start_time) + os.remove(get_filename()) -- truncate file + file = io.open(get_filename(), "w") + if not file then + lfs.mkdir(timer_path) + file = io.open(get_filename(), "w") + end + if file then + file:write(total_time .. "\n") + file:write(play_count) + file:close() + end + end + + + emu.register_start(function() + local file + if timer_started then + save() + end + timer_started = true + local file = io.open(get_filename(), "r") + if file then + total_time = file:read("n") + play_count = file:read("n") + file:close() + end + start_time = os.time() + play_count = play_count + 1 + end) + + emu.register_stop(function() + timer_started = false + save() + total_time = 0 + play_count = 0 + end) + + local function sectohms(time) + local hrs = math.floor(time / 3600) + local min = math.floor((time % 3600) / 60) + local sec = time % 60 + return string.format("%03d:%02d:%02d", hrs, min, sec) + end + + local function menu_populate() + local time = os.time() - start_time + return {{ "Current time", "", "off" }, + { sectohms(time), "", "off" }, + { "Total time", "", "off" }, + { sectohms(total_time + time), "", "off" }, + { "Play Count", "", "off" }, + { play_count, "", "off" }} + end + + local function menu_callback(index, event) + return true + end + + emu.register_menu(menu_callback, menu_populate, "Timer") +end + +return exports |