from ._builtin import Page from .models import Constants, Slider from slider_task.pages import SliderTaskPage import random class Instructions1(Page): def is_displayed(self): return self.round_number == 1 def before_next_page(self): self.player.prepare_sliders(num=25, min=0, max=100) class Sliders(SliderTaskPage): Constants = Constants Slider = Slider def is_displayed(self): return self.round_number == 1 class Loading(Page): timeout_seconds = 0.5 def before_next_page(self): if self.round_number == 1: randomized_problems = random.sample(Constants.problems, len(Constants.problems)) self.player.participant.vars['randomized_problems3'] = randomized_problems # Temporary: # if (self.player.id_in_group % 2) != 0: # self.player.reciprocity = "Positive" # Temporary: # if (self.player.id_in_group % 2) == 0: # self.player.reciprocity = "Negative" # Temporary: # self.player.participant.vars['reciprocity'] = self.player.reciprocity # Temporary: # self.player.colors_reversed = random.randint(0, 1) # self.player.participant.vars['colors_reversed'] = self.player.colors_reversed # Temporary: # self.player.roles_reversed = random.randint(0, 1) # self.player.participant.vars['roles_reversed'] = self.player.roles_reversed problem_data = self.player.current_problem() self.player.problem_id = int(problem_data['id']) self.player.problem_type = int(problem_data['type']) self.player.payoff_a = int(problem_data['a']) self.player.payoff_b = int(problem_data['b']) self.player.payoff_c = int(problem_data['c']) self.player.payoff_d = int(problem_data['d']) self.player.payoff_e = int(problem_data['e']) self.player.payoff_f = int(problem_data['f']) self.player.payoff_g = int(problem_data['g']) self.player.payoff_h = int(problem_data['h']) self.player.option = problem_data['option'] self.player.reciprocity = self.participant.vars.get('reciprocity') self.player.colors_reversed = self.participant.vars.get('colors_reversed') self.player.roles_reversed = self.participant.vars.get('roles_reversed') class Instructions2(Page): def is_displayed(self): return self.round_number == 1 class ComprehensionQuestions(Page): form_model = 'player' form_fields = ['q1', 'q2', 'q3'] def is_displayed(self): return self.round_number == 1 def before_next_page(self): self.player.q1_error = False if self.player.q1 != 1: self.player.q1_error = True if self.player.reciprocity == "Positive": self.player.q2_error = False if self.player.q2 != 25: self.player.q2_error = True if self.player.reciprocity == "Negative": self.player.q2_error = False if self.player.q2 != 175: self.player.q2_error = True if self.player.reciprocity == "Positive": self.player.q3_error = False if self.player.q3 != 150: self.player.q3_error = True if self.player.reciprocity == "Negative": self.player.q3_error = False if self.player.q3 != 50: self.player.q3_error = True self.player.cq_error = False if self.player.q1_error or self.player.q2_error or self.player.q3_error: self.player.cq_error = True if self.player.cq_error: self._is_frozen = False self._index_in_pages -= 2 self.participant._index_in_pages -= 2 class Start(Page): def is_displayed(self): return self.round_number == 1 class DecisionSituation1(Page): form_model = 'player' form_fields = ['clicks_a', 'clicks_b', 'clicks_c', 'clicks_d', 'clicks_e', 'clicks_f', 'clicks_g', 'clicks_h', 'submitted_choice', 'submitted_time'] def is_displayed(self): return self.player.problem_type == 1 def submitted_choice_choices(self): if self.player.roles_reversed == 0: choices = [ [1, 'U'], [2, 'D'] ] return choices if self.player.roles_reversed == 1: choices = [ [1, 'L'], [2, 'R'] ] return choices class DecisionSituation2(Page): form_model = 'player' form_fields = ['clicks_a', 'clicks_b', 'clicks_c', 'clicks_d', 'clicks_e', 'clicks_f', 'clicks_g', 'clicks_h', 'submitted_belief', 'submitted_time'] def is_displayed(self): return self.player.problem_type == 2 class End(Page): def is_displayed(self): return self.round_number == Constants.num_rounds page_sequence = [ Instructions1, Sliders, Loading, Instructions2, ComprehensionQuestions, Start, DecisionSituation1, DecisionSituation2, End ]