fortunes_foundation/completion_tracker.lua

67 lines
1.5 KiB
Lua
Raw Permalink Normal View History

completion_tracker={}
add(modules,completion_tracker)
function completion_tracker:init()
cartdata("pyrex_fortunesfoundation_1")
end
2024-02-11 23:51:56 +00:00
function completion_tracker:reset()
for i=0,63 do
2024-02-12 23:03:55 +00:00
if (i!=59) dset(i,0) -- don't clear music pref flag
2024-02-11 23:51:56 +00:00
end
end
2024-02-12 01:58:34 +00:00
function completion_tracker:get_metascore()
local b0=dget"60"
local b1=dget"61"
local b2=dget"62"
local b3=dget"63"
return (b0<<8)+b1+(b2>>8)+(b3>>16)
end
function completion_tracker:incr_metascore()
local ms=self:get_metascore()
ms+=0x0.0001
dset(60,(ms>>8)&0xff)
dset(61,(ms)&0xff)
dset(62,(ms<<8)&0xff)
dset(63,(ms<<16)&0xff)
end
function completion_tracker:get_completion_level()
return dget(0)
end
function completion_tracker:advance_completion_level(clevel)
dset(0,max(dget(0), clevel))
end
2024-02-12 04:18:01 +00:00
function completion_tracker:get_music_preference()
return dget(59)==0
end
function completion_tracker:set_music_preference()
if (dget(59)==0) dset(59,1) return
dset(59,0)
end
2024-02-12 01:28:41 +00:00
-- TODO: Bitfield instead
function completion_tracker:mark_seen(text_id)
local ix,bit=self:_unpack_text_id(text_id)
dset(ix,dget(ix)|bit)
end
function completion_tracker:was_seen(text_id)
local ix,bit=self:_unpack_text_id(text_id)
return dget(ix)&bit !=0
end
function completion_tracker:_unpack_text_id(text_id)
assert(text_id>0)
assert(text_id<120) -- max 120 texts for now
-- using bytes 1 through 15
local ix,bit=1+text_id\8,text_id%8
assert(ix<16)
return ix,1<<bit
end
function completion_tracker:should_show_tutorial()
return self:get_completion_level() < tutorial.completion_stage
end