Initial how_progression baseline
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
-- Dormant framework: no missions, events, callbacks or commands are registered
|
||||
-- until a future migration explicitly calls register on an instance.
|
||||
local ids = require 'shared.mission_ids'
|
||||
|
||||
local Registry = {}
|
||||
Registry.__index = Registry
|
||||
|
||||
function Registry.new()
|
||||
return setmetatable({ missions = {} }, Registry)
|
||||
end
|
||||
|
||||
function Registry:register(mission)
|
||||
assert(type(mission) == 'table' and type(mission.id) == 'string', 'mission.id is required')
|
||||
assert(ids.definitions[mission.id], 'unknown mission ID: ' .. mission.id)
|
||||
assert(not self.missions[mission.id], 'duplicate mission ID: ' .. mission.id)
|
||||
self.missions[mission.id] = mission
|
||||
return mission
|
||||
end
|
||||
|
||||
function Registry:get(missionId)
|
||||
return self.missions[missionId]
|
||||
end
|
||||
|
||||
function Registry:resolveProgPhase(contact, notation)
|
||||
local phase = ids.parseProgPhase(contact, notation)
|
||||
if not phase then return nil end
|
||||
|
||||
local mission = self.missions[phase.missionId]
|
||||
if not mission or not mission.phases or not mission.phases[phase.phaseName] then
|
||||
return nil
|
||||
end
|
||||
|
||||
return mission, mission.phases[phase.phaseName], phase
|
||||
end
|
||||
|
||||
function Registry:list()
|
||||
local result = {}
|
||||
for id, mission in pairs(self.missions) do
|
||||
result[#result + 1] = { id = id, mission = mission }
|
||||
end
|
||||
table.sort(result, function(a, b) return a.id < b.id end)
|
||||
return result
|
||||
end
|
||||
|
||||
return Registry
|
||||
Reference in New Issue
Block a user