Para garantir transições instantâneas entre as cenas, mapeio o JSON da história em um dicionário logo no início. Isso troca buscas lineares lentas por lookups O(1), mantendo o jogo fluido mesmo com um roteiro longo.
private func loadStory() {
guard let url = Bundle.main.url(forResource: "story", withExtension: "json"),
let data = try? Data(contentsOf: url) else { return }
do {
let decoded = try JSONDecoder().decode(StoryData.self, from: data)
for page in decoded.screens {
pages[page.id] = page
}
orderedPages = decoded.screens
currentPageID = decoded.screens.first?.id
} catch {
print("Failed to decode story.json: \(error)")
}
}



