def decode_story(data: str, store: VarStore) -> Story: story = Story(store) node_store: Dict[str, Node] = {} story_dict = json.loads(data) for node_hash, node_dict in story_dict['nodes'].items(): node = _decode_basic_node(node_dict, story) node_store[str(node_hash)] = node story.change_beginning(node_store[str(story_dict['beginning'])]) for ending in story_dict['endings']: story.add_ending(node_store[str(ending)]) for node_hash, node_dict in story_dict['nodes'].items(): _decode_outgoing(node_store[str(node_hash)], node_store, node_dict['outgoing']) return story
def create_test_story() -> Story: store = VarStore() story = Story(store) # Create nodes n1 = story.create_node('n1') n2 = story.create_node('n2') n3 = story.create_node('n3') n4 = story.create_node('n4') end1 = story.create_node('end1') dead1 = story.create_node('dead-end') n1.set_text('Currently at n1') n2.set_text('Currently at n2') n3.set_text('Currently at n3') n4.set_text('Currently at n4') end1.set_text('Ending #1') dead1.set_text('Dead-end reached') block3 = VarCommand('test', '=', 5) goto_4_1 = [VarCommand('test', '+', 7), VarCommand('test2', '+', 'abd')] req4 = VarCommand('test', '=', 5) n3.add_change(block3) n4.add_requirement(req4) n1.add_outgoing(n2, 'Goto 2', None) n1.add_outgoing(n3, 'Goto 3', None) n2.add_outgoing(n3, 'Goto 3', None) n3.add_outgoing(n4, 'Goto 4', None) n3.add_outgoing(dead1, 'Goto dead-end', None) n4.add_outgoing(end1, 'Goto ending 1', None) n4.add_outgoing(n1, 'Goto 1', goto_4_1) story.change_beginning(n1) story.add_ending(end1) return story