def make_choice(self, option_uid): choice, options, defaults = self.get_nearest_choice() if self.knowledge_base[option_uid].state_from != choice.uid: return False if not any(option.uid == option_uid for option in options): return False if not defaults[0].default: return False if not transformators.change_choice(knowledge_base=self.knowledge_base, new_option_uid=option_uid, default=False): return False self.machine.sync_pointer() if self.quests_stack: self.current_info.sync_choices(self.knowledge_base, self.hero, *self.get_nearest_choice()) self.hero.actions.request_replane() return True
def test_linked_choices__without_path(self): # in some cases, not all linked choices can have default path start = facts.Start(uid="start", type="test", nesting=0) choice_1 = facts.Choice(uid="choice_1") choice_2 = facts.Choice(uid="choice_2") finish_1 = facts.Finish(uid="finish_1", results={}, nesting=0, start="start") finish_2 = facts.Finish(uid="finish_2", results={}, nesting=0, start="start") option_1 = facts.Option(state_from=choice_1.uid, state_to=finish_1.uid, type="opt_1", markers=()) option_2 = facts.Option(state_from=choice_1.uid, state_to=choice_2.uid, type="opt_2", markers=()) option_2_1 = facts.Option(state_from=choice_2.uid, state_to=finish_1.uid, type="opt_2_1", markers=()) option_2_2 = facts.Option(state_from=choice_2.uid, state_to=finish_2.uid, type="opt_2_2", markers=()) facts_list = [ start, choice_1, choice_2, finish_1, finish_2, option_1, option_2, option_2_1, option_2_2, facts.OptionsLink(options=(option_1.uid, option_2_1.uid)), facts.OptionsLink(options=(option_2.uid, option_2_2.uid)), ] self.kb += facts_list choices = [ facts.ChoicePath(choice=choice_1.uid, option=option_2.uid, default=True) ] # defaul path specified only for one choice self.kb += choices transformators.change_choice(self.kb, option_1.uid, default=False) self.check_in_knowledge_base(self.kb, facts_list) self.check_not_in_knowledge_base(self.kb, choices) self.assertEqual(len(list(self.kb.filter(facts.ChoicePath))), 2) self.assertEqual(len(set([path.choice for path in self.kb.filter(facts.ChoicePath)])), 2) self.assertEqual( set([path.option for path in self.kb.filter(facts.ChoicePath)]), set([option_1.uid, option_2_1.uid]) )
def test_linked_choices(self): start = facts.Start(uid='start', type='test', nesting=0) choice_1 = facts.Choice(uid='choice_1') choice_2 = facts.Choice(uid='choice_2') finish_1 = facts.Finish(uid='finish_1', results={}, nesting=0, start='start') finish_2 = facts.Finish(uid='finish_2', results={}, nesting=0, start='start') option_1 = facts.Option(state_from=choice_1.uid, state_to=finish_1.uid, type='opt_1', markers=()) option_2 = facts.Option(state_from=choice_1.uid, state_to=choice_2.uid, type='opt_2', markers=()) option_2_1 = facts.Option(state_from=choice_2.uid, state_to=finish_1.uid, type='opt_2_1', markers=()) option_2_2 = facts.Option(state_from=choice_2.uid, state_to=finish_2.uid, type='opt_2_2', markers=()) facts_list = [ start, choice_1, choice_2, finish_1, finish_2, option_1, option_2, option_2_1, option_2_2, facts.OptionsLink(options=(option_1.uid, option_2_1.uid)), facts.OptionsLink(options=(option_2.uid, option_2_2.uid)) ] self.kb += facts_list choices = [facts.ChoicePath(choice=choice_1.uid, option=option_2.uid, default=True), facts.ChoicePath(choice=choice_2.uid, option=option_2_2.uid, default=True)] self.kb += choices transformators.change_choice(self.kb, option_1.uid, default=False) self.check_in_knowledge_base(self.kb, facts_list) self.check_not_in_knowledge_base(self.kb, choices) self.assertEqual(len(list(self.kb.filter(facts.ChoicePath))), 2) self.assertEqual(len(set([path.choice for path in self.kb.filter(facts.ChoicePath)])), 2) self.assertEqual(set([path.option for path in self.kb.filter(facts.ChoicePath)]), set([option_1.uid, option_2_1.uid]))
def test_single_choice(self): start = facts.Start(uid="start", type="test", nesting=0) choice_1 = facts.Choice(uid="choice_1") choice_2 = facts.Choice(uid="choice_2") finish_1 = facts.Finish(uid="finish_1", results={}, nesting=0, start="start") finish_2 = facts.Finish(uid="finish_2", results={}, nesting=0, start="start") option_1 = facts.Option(state_from=choice_1.uid, state_to=finish_1.uid, type="opt_1", markers=()) option_2 = facts.Option(state_from=choice_1.uid, state_to=choice_2.uid, type="opt_2", markers=()) option_2_1 = facts.Option(state_from=choice_2.uid, state_to=finish_1.uid, type="opt_2_1", markers=()) option_2_2 = facts.Option(state_from=choice_2.uid, state_to=finish_2.uid, type="opt_2_2", markers=()) facts_list = [ start, choice_1, choice_2, finish_1, finish_2, option_1, option_2, option_2_1, option_2_2, facts.ChoicePath(choice=choice_2.uid, option=option_2_2.uid, default=True), ] self.kb += facts_list choices = [facts.ChoicePath(choice=choice_1.uid, option=option_2.uid, default=True)] self.kb += choices transformators.change_choice(self.kb, option_1.uid, default=False) self.check_in_knowledge_base(self.kb, facts_list) self.check_not_in_knowledge_base(self.kb, choices) self.assertEqual(len(list(self.kb.filter(facts.ChoicePath))), 2) self.assertEqual(len(set([path.choice for path in self.kb.filter(facts.ChoicePath)])), 2) self.assertEqual( set([path.option for path in self.kb.filter(facts.ChoicePath)]), set([option_1.uid, option_2_2.uid]) )
def test_linked_choices(self): start = facts.Start(uid='start', type='test', nesting=0) choice_1 = facts.Choice(uid='choice_1') choice_2 = facts.Choice(uid='choice_2') finish_1 = facts.Finish(uid='finish_1', results={}, nesting=0, start='start') finish_2 = facts.Finish(uid='finish_2', results={}, nesting=0, start='start') option_1 = facts.Option(state_from=choice_1.uid, state_to=finish_1.uid, type='opt_1', markers=()) option_2 = facts.Option(state_from=choice_1.uid, state_to=choice_2.uid, type='opt_2', markers=()) option_2_1 = facts.Option(state_from=choice_2.uid, state_to=finish_1.uid, type='opt_2_1', markers=()) option_2_2 = facts.Option(state_from=choice_2.uid, state_to=finish_2.uid, type='opt_2_2', markers=()) facts_list = [ start, choice_1, choice_2, finish_1, finish_2, option_1, option_2, option_2_1, option_2_2, facts.OptionsLink(options=(option_1.uid, option_2_1.uid)), facts.OptionsLink(options=(option_2.uid, option_2_2.uid)) ] self.kb += facts_list choices = [ facts.ChoicePath(choice=choice_1.uid, option=option_2.uid, default=True), facts.ChoicePath(choice=choice_2.uid, option=option_2_2.uid, default=True) ] self.kb += choices transformators.change_choice(self.kb, option_1.uid, default=False) self.check_in_knowledge_base(self.kb, facts_list) self.check_not_in_knowledge_base(self.kb, choices) self.assertEqual(len(list(self.kb.filter(facts.ChoicePath))), 2) self.assertEqual( len(set([path.choice for path in self.kb.filter(facts.ChoicePath)])), 2) self.assertEqual( set([path.option for path in self.kb.filter(facts.ChoicePath)]), set([option_1.uid, option_2_1.uid]))