from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random class ColorPrefPage(Page): form_model = 'player' form_fields = ['slider_value'] def vars_for_template(self): return dict( participant_id=self.player.participant.id_in_session, ) def is_displayed(self): return self.round_number == 1 class GroupingPage(Page): def is_displayed(self): return self.round_number == 1 def vars_for_template(self): return dict( participant_id=self.player.participant.id_in_session, group=self.player.group.id_in_subsession ) class ColorPrefWait(WaitPage): wait_for_all_groups = True after_all_players_arrive = 'update_grouping' def vars_for_template(self): return dict( participant_id=self.player.participant.id_in_session, ) def is_displayed(self): return self.round_number == 1 class InstructionsPage(Page): def vars_for_template(self): return dict( participant_id=self.player.participant.id_in_session, group=self.player.group.id_in_subsession, round_number=self.round_number ) def is_displayed(self): return self.round_number == 1 class InstructionsStage2Page(Page): def vars_for_template(self): group = self.player.group.id_in_subsession if group == 1: figure1 = 'Image/Stage 3 Fig 1 Yellow.png' figure2 = 'Image/Stage 3 Fig 2 Yellow.png' figure3 = 'Image/Stage 3 Fig 3 Yellow.png' else: figure1 = 'Image/Stage 3 Fig 1 Red.png' figure2 = 'Image/Stage 3 Fig 2 Red.png' figure3 = 'Image/Stage 3 Fig 3 Red.png' return dict( participant_id=self.player.participant.id_in_session, group=group, round_number=self.round_number, figure1=figure1, figure2=figure2, figure3=figure3 ) def is_displayed(self): return self.round_number == 1 class ControlQuestionnaire1Page(Page): form_model = 'player' form_fields = ['question1', 'question2', 'question3', 'question4', 'question5', 'question6'] def vars_for_template(self): return dict( participant_id=self.player.participant.id_in_session, group=self.player.group.id_in_subsession, round_number=self.round_number ) def is_displayed(self): return self.round_number == 1 class ViewCodeBookPage(Page): live_method = 'viewCodebookTapped' def before_next_page(self): pass def vars_for_template(self): group_number = self.player.group.id_in_subsession commonFunctions = self.session.vars['CommonFunctions'] context_images = commonFunctions.getContextImagesPath(group_number, self.round_number) action_images = commonFunctions.getActionImagesPath(group_number, self.round_number) row_images = [] for i in range(0, 4): x = [action_images[i]] for j in range(0, 4): if i==j: x.append('Image/tick.png') else: x.append('Image/cross.png') row_images.append(x) return dict( participant_id=self.player.participant.id_in_session, group=group_number, context_images=context_images, row_images=row_images, view_codebook_count=self.player.view_codebook_count_left, round_number=self.round_number, ) def js_vars(self): return dict( view_codebook_count=self.player.view_codebook_count_left, ) class ChooseActionPage(Page): form_model = 'player' form_fields = ['action_choice'] def before_next_page(self): commonFunctions = self.session.vars['CommonFunctions'] if self.timeout_happened: self.player.action_choice = 0 self.player.check_action_choice = 0 else: if commonFunctions.getActionImagesGroup(self.player.group.id_in_subsession, self.round_number)[self.player.group.context_image_number-1] == self.player.action_choice: self.player.check_action_choice = 1 self.player.game_payoff += 1 else: self.player.check_action_choice = 0 def vars_for_template(self): commonFunctions = self.session.vars['CommonFunctions'] group_number = self.player.group.id_in_subsession context_images_group = commonFunctions.getContextImagesGroup(group_number, self.round_number) context_image = f'Image/{group_number}Env{context_images_group}{self.player.group.context_image_number}.png' action_images = [f'Image/{group_number}Action{i}.png' for i in range(1, 5)] return dict( participant_id=self.player.participant.id_in_session, group=group_number, action_images=action_images, context_image=context_image, round_number=self.round_number, ) class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): pass class Results(Page): def vars_for_template(self): commonFunctions = self.session.vars['CommonFunctions'] group_number = self.player.group.id_in_subsession # get all players in the group and shuffle them, # then get the index of the current player players = self.group.get_players() random.shuffle(players) for idx, player in enumerate(players): if player == self.player: current_player_idx = idx break players_action_choices = [player.action_choice for player in players] players_action_choices_images = [f'Image/{group_number}Action{player_action_choice}.png' for player_action_choice in players_action_choices] tick_cross_images = commonFunctions.getSequenceOfTickCrossImages(players) context_images_group = commonFunctions.getContextImagesGroup(self.player.group.id_in_subsession, self.round_number) context_image = f'Image/{group_number}Env{context_images_group}{self.player.group.context_image_number}.png' group_score = int(self.group.getTotalGroupScore()) group_score_percentage = group_score/60*100 return dict( participant_id=self.player.participant.id_in_session, group=group_number, players_action_choices_images=players_action_choices_images, tick_cross_images=tick_cross_images, context_image=context_image, group_score=group_score, group_score_percentage=group_score_percentage, round_number=self.round_number, current_player_idx=current_player_idx ) page_sequence = [ColorPrefPage, ColorPrefWait, GroupingPage, InstructionsPage, ControlQuestionnaire1Page, InstructionsStage2Page, ViewCodeBookPage, ChooseActionPage, ResultsWaitPage, Results] # page_sequence = [ColorPrefPage, ColorPrefWait, InstructionsStage2Page, ViewCodeBookPage, ChooseActionPage, ResultsWaitPage, Results]