コード例 #1
0
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)
コード例 #2
0
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)
コード例 #3
0
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)
コード例 #4
0
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)