67 lines
1.5 KiB
Lua
67 lines
1.5 KiB
Lua
completion_tracker={}
|
|
add(modules,completion_tracker)
|
|
|
|
function completion_tracker:init()
|
|
cartdata("pyrex_fortunesfoundation_1")
|
|
end
|
|
|
|
function completion_tracker:reset()
|
|
for i=0,63 do
|
|
dset(i,0)
|
|
end
|
|
end
|
|
|
|
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
|
|
|
|
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
|
|
|
|
-- 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 |