This commit is contained in:
Aria 2025-03-21 22:23:30 +11:00
commit 9c94d113d3
Signed by untrusted user who does not match committer: aria
GPG key ID: 19AB7AA462B8AB3B
10260 changed files with 1237388 additions and 0 deletions

View file

@ -0,0 +1,91 @@
require("/scripts/quest/serialize.lua")
require("/scripts/questgen/generator.lua")
require("/scripts/questgen/plannerTests.lua")
function init()
object.setInteractive(true)
setupTests()
end
function chooseQuestGiver()
if storage.questGiver then
return world.loadUniqueEntity(storage.questGiver)
end
local entities = util.filter(world.npcQuery(object.position(), 50), function (npc)
return world.callScriptedEntity(npc, "config.getParameter", "questGenerator.enableParticipation")
end)
if #entities == 0 then return nil end
return entities[math.random(#entities)]
end
function withGenerator(func)
local questGiver = chooseQuestGiver()
if not questGiver then return end
local generator = QuestGenerator.new()
generator.debug = true
generator.questGiver = questGiver
generator.questPools = world.callScriptedEntity(questGiver, "config.getParameter", "questGenerator.pools") or {}
self.co = coroutine.create(function ()
local arc = func(generator)
if arc then
world.spawnStagehand(generator:position(), "questmanager", {
uniqueId = arc.questArc.stagehandUniqueId,
quest = {
arc = storeQuestArcDescriptor(arc.questArc),
participants = arc.participants
},
plugins = arc.managerPlugins
})
end
return arc
end)
end
function generate(questName)
questName = questName or storage.questName
withGenerator(function (generator)
local quest = generator:questPool().quests[questName]
quest.name = questName
return generator:generate(quest)
end)
end
function timing()
local questGiver = chooseQuestGiver()
if not questGiver then return end
local generator = QuestGenerator.new()
generator.debug = true
generator.measureTime = true
local stepCount = 0
while generator.coroutine == nil or coroutine.status(generator.coroutine) ~= "dead" do
generator:generateStep()
stepCount = stepCount + 1
end
sb.logInfo("Total steps: %s", stepCount)
sb.logInfo("Estimated generation time over multiple frames: %ss", stepCount/6)
end
function onInteraction()
if storage.questName then
generate()
return
end
withGenerator(function (generator)
return generator:generate()
end)
end
function update(dt)
if self.co and coroutine.status(self.co) ~= "dead" then
local status, result = coroutine.resume(self.co)
if not status then
sb.logInfo("Generator broke: %s", result)
end
end
end