def round_started_handler(sender, experiment=None, **kwargs): if experiment is None: logger.error( "Received round started signal with no experiment: %s", sender) raise ValueError("Received round started signal with no experiment") round_configuration = experiment.current_round round_data = experiment.get_round_data(round_configuration) logger.debug("setting up round %s", round_configuration) # initialize group, group cluster, and participant data values experiment.initialize_data_values( group_cluster_parameters=(get_regrowth_parameter(), get_resource_level_parameter()), group_parameters=(get_regrowth_parameter(), get_group_harvest_parameter(), get_resource_level_parameter()), participant_parameters=(get_storage_parameter(), get_player_status_parameter()), defaults={ get_storage_parameter(): 0, get_player_status_parameter(): True, } ) shared_resource_enabled = is_shared_resource_enabled(round_configuration) if should_reset_resource_level(round_configuration, experiment): initial_resource_level = get_max_resource_level(round_configuration) logger.debug("Resetting resource level for all groups in %s to %d", round_configuration, initial_resource_level) for group in experiment.groups: # set resource level to initial default existing_resource_level = get_resource_level_dv(group, round_data, round_configuration, shared_resource_enabled=shared_resource_enabled) group.log("Resetting resource level (%s) to initial value [%s]" % (existing_resource_level, initial_resource_level)) existing_resource_level.update_int(initial_resource_level) # zero out all participant storages when the resource level is # reset ParticipantRoundDataValue.objects.for_group(group, parameter=get_storage_parameter(), round_data=round_data).update(int_value=0) # set all player statuses to alive when the resource level is reset ParticipantRoundDataValue.objects.for_group(group, parameter=get_player_status_parameter(), round_data=round_data).update(boolean_value=True) elif round_configuration.is_playable_round: # first check for a depleted resource # FIXME: currently disabled again as per Tim's instructions # if is_empty_resource_death_enabled(): # for group in experiment.groups: # existing_resource_level = get_resource_level_dv(group, round_data, round_configuration, # shared_resource_enabled=shared_resource_enabled) # if existing_resource_level.int_value <= 0: # group.log("depleted resource %s, zeroing out all harvest decisions and marking all group members as deceased" % existing_resource_level) # participant_group_relationship_pks = group.participant_group_relationship_set.values_list('pk', flat=True) # _zero_harvest_decisions(participant_group_relationship_pks, round_data) # depleted resource kills all participants in that group # ParticipantRoundDataValue.objects.filter(parameter=get_player_status_parameter(), # participant_group_relationship__pk__in=participant_group_relationship_pks, # round_data=round_data).update(boolean_value=False) # ParticipantRoundDataValue.objects.filter(parameter=get_storage_parameter(), # participant_group_relationship__pk__in=participant_group_relationship_pks, # round_data=round_data).update(int_value=0) # FIXME: redundant when resource is depleted, needs refactor # check for dead participants and set their ready and harvest decision flags deceased_participants = ParticipantRoundDataValue.objects.filter( parameter=get_player_status_parameter(), round_data=round_data, boolean_value=False).values_list('participant_group_relationship', flat=True) _zero_harvest_decisions(deceased_participants, round_data)
def round_started_handler(sender, experiment=None, **kwargs): if experiment is None: logger.error("Received round started signal with no experiment: %s", sender) raise ValueError("Received round started signal with no experiment") round_configuration = experiment.current_round round_data = experiment.get_round_data(round_configuration) logger.debug("setting up round %s", round_configuration) # initialize group, group cluster, and participant data values experiment.initialize_data_values( group_cluster_parameters=(get_regrowth_parameter(), get_resource_level_parameter()), group_parameters=(get_regrowth_parameter(), get_group_harvest_parameter(), get_resource_level_parameter()), participant_parameters=(get_storage_parameter(), get_player_status_parameter()), defaults={ get_storage_parameter(): 0, get_player_status_parameter(): True, }) shared_resource_enabled = is_shared_resource_enabled(round_configuration) if should_reset_resource_level(round_configuration, experiment): initial_resource_level = get_max_resource_level(round_configuration) logger.debug("Resetting resource level for all groups in %s to %d", round_configuration, initial_resource_level) for group in experiment.groups: # set resource level to initial default existing_resource_level = get_resource_level_dv( group, round_data, round_configuration, shared_resource_enabled=shared_resource_enabled) group.log("Resetting resource level (%s) to initial value [%s]" % (existing_resource_level, initial_resource_level)) existing_resource_level.update_int(initial_resource_level) # zero out all participant storages when the resource level is # reset ParticipantRoundDataValue.objects.for_group( group, parameter=get_storage_parameter(), round_data=round_data).update(int_value=0) # set all player statuses to alive when the resource level is reset ParticipantRoundDataValue.objects.for_group( group, parameter=get_player_status_parameter(), round_data=round_data).update(boolean_value=True) elif round_configuration.is_playable_round: # first check for a depleted resource # FIXME: currently disabled again as per Tim's instructions # if is_empty_resource_death_enabled(): # for group in experiment.groups: # existing_resource_level = get_resource_level_dv(group, round_data, round_configuration, # shared_resource_enabled=shared_resource_enabled) # if existing_resource_level.int_value <= 0: # group.log("depleted resource %s, zeroing out all harvest decisions and marking all group members as deceased" % existing_resource_level) # participant_group_relationship_pks = group.participant_group_relationship_set.values_list('pk', flat=True) # _zero_harvest_decisions(participant_group_relationship_pks, round_data) # depleted resource kills all participants in that group # ParticipantRoundDataValue.objects.filter(parameter=get_player_status_parameter(), # participant_group_relationship__pk__in=participant_group_relationship_pks, # round_data=round_data).update(boolean_value=False) # ParticipantRoundDataValue.objects.filter(parameter=get_storage_parameter(), # participant_group_relationship__pk__in=participant_group_relationship_pks, # round_data=round_data).update(int_value=0) # FIXME: redundant when resource is depleted, needs refactor # check for dead participants and set their ready and harvest decision flags deceased_participants = ParticipantRoundDataValue.objects.filter( parameter=get_player_status_parameter(), round_data=round_data, boolean_value=False).values_list('participant_group_relationship', flat=True) _zero_harvest_decisions(deceased_participants, round_data)
def get_shared_regrowth_dv(cluster=None, round_data=None): if round_data is None: round_data = cluster.experiment.current_round_data return cluster.get_data_value(parameter=get_regrowth_parameter(), round_data=round_data)