mirror of
https://github.com/bryanthaboi/gen1recomp
synced 2026-09-26 21:35:42 -04:00
45 lines
1.1 KiB
Lua
45 lines
1.1 KiB
Lua
local FixedStep = require("src.core.FixedStep")
|
|
|
|
local LogicClock = {}
|
|
|
|
LogicClock.MODES = { "60", "gb" }
|
|
LogicClock.DEFAULT = "60"
|
|
LogicClock.HZ = { ["60"] = 60, gb = FixedStep.GB_HZ }
|
|
LogicClock.current = LogicClock.DEFAULT
|
|
|
|
function LogicClock.normalize(mode)
|
|
if mode == "gb" or mode == "60" then return mode end
|
|
return LogicClock.DEFAULT
|
|
end
|
|
|
|
function LogicClock.hz(mode)
|
|
return LogicClock.HZ[LogicClock.normalize(mode)]
|
|
end
|
|
|
|
function LogicClock.label(mode)
|
|
if LogicClock.normalize(mode) == "gb" then return "59.73HZ" end
|
|
return "60HZ"
|
|
end
|
|
|
|
function LogicClock.cycle(mode, dir)
|
|
local ring = LogicClock.MODES
|
|
local cur = LogicClock.normalize(mode)
|
|
local at = 1
|
|
for i, m in ipairs(ring) do
|
|
if m == cur then at = i break end
|
|
end
|
|
return ring[(at - 1 + (dir or 1)) % #ring + 1]
|
|
end
|
|
|
|
function LogicClock.apply(mode)
|
|
LogicClock.current = LogicClock.normalize(mode)
|
|
FixedStep.setHz(LogicClock.hz(LogicClock.current))
|
|
return LogicClock.current
|
|
end
|
|
|
|
function LogicClock.applyOptions(opts)
|
|
return LogicClock.apply(opts and opts.logicClock)
|
|
end
|
|
|
|
return LogicClock
|