diff --git a/src/modules/butterflies/butterflies_main.c b/src/modules/butterflies/butterflies_main.c index 912acab4d7de1835e88d097ead91b994bc5ba7f2..ea657d5462e2ade2bed94d3da921b0720a7c8005 100644 --- a/src/modules/butterflies/butterflies_main.c +++ b/src/modules/butterflies/butterflies_main.c @@ -20,7 +20,7 @@ void *butterfly_grid_init(struct cats_configuration *conf, struct cats_grid *gri struct grid_data_butterflies *data = malloc_or_die(sizeof(struct grid_data_butterflies)); log_message(LOG_INFO, "allocating data for generations"); data->generations = new_raw_2d_array_from_dimension(grid->dimension, sizeof(float)); - data->food = new_raw_2d_array_from_dimension(grid->dimension, sizeof(int32_t)); + data->info_layer = new_raw_2d_array_from_dimension(grid->dimension, sizeof(int32_t)); log_message(LOG_INFO, "done allocating data for generations"); data->generation_current = 0; //struct conf_data_butterflies *conf_data = CATS_MODULE_DATA; @@ -39,9 +39,9 @@ void *butterfly_grid_cleanup(struct cats_configuration *conf, struct cats_grid * free_grid(&grid_data->generations, grid->dimension.rows); free(grid_data->generations); grid_data->generations = NULL; - free_grid(&grid_data->food, grid->dimension.rows); - free(grid_data->food); - grid_data->food = NULL; + free_grid(&grid_data->info_layer, grid->dimension.rows); + free(grid_data->info_layer); + grid_data->info_layer = NULL; grid_data->generation_current = -1; return NULL; } @@ -86,8 +86,6 @@ void cats_module_init(struct cats_configuration *conf) register_cats_grid_init_function(conf, butterfly_grid_init, butterfly_grid_cleanup); register_load_species_param_config_func(conf, load_butterflies_species_params); add_vital_rates(conf, data); - - log_message(LOG_INFO, "Hello from %s (id: %d)\n", module_name, id); } diff --git a/src/modules/butterflies/butterflies_main.h b/src/modules/butterflies/butterflies_main.h index cdc8ccfbf4948eda3292b9a0de6a962da76eaa1a..3f3d940515a72f1c899e7645d2ccc2fb3d4f2637 100644 --- a/src/modules/butterflies/butterflies_main.h +++ b/src/modules/butterflies/butterflies_main.h @@ -9,11 +9,19 @@ struct grid_data_butterflies { float **generations; int32_t generation_current; float **eggs; - int32_t **food; + int32_t **info_layer; }; +enum butterfly_cell_info { + BF_CELL_CLEAR = 0, + BF_CELL_EXCLUDED = 1 << 0, + BF_CELL_HABITAT_OK = 1 << 1, + BF_CELL_RESOURCE_AVAILABLE = 1 << 2 + +}; + #define BF_DEBUG_ROW 4319 #define BF_DEBUG_COL 10502 diff --git a/src/modules/butterflies/butterfly_actions.c b/src/modules/butterflies/butterfly_actions.c index 3422cdf882194ee90b0ec8ea1a35417310bcd7ac..0978c94aa3d1847d454881576501dd25dc29a679 100644 --- a/src/modules/butterflies/butterfly_actions.c +++ b/src/modules/butterflies/butterfly_actions.c @@ -129,7 +129,6 @@ char *get_butterfly_population_filename(struct cats_configuration *conf, struct return filename; - } @@ -230,37 +229,53 @@ enum action_status action_butterfly_update_generations(struct cats_grid *grid, s } -void reset_food_layer(const struct cats_grid *grid, struct grid_data_butterflies *data) +void reset_info_layer(const struct cats_grid *grid, struct grid_data_butterflies *data) { const cats_dt_coord rows = grid->dimension.rows; const cats_dt_coord cols = grid->dimension.cols; for (cats_dt_coord row = 0; row < rows; row++) { for (cats_dt_coord col = 0; col < cols; col++) { - data->food[row][col] = 0; + data->info_layer[row][col] = 0; } } } -enum action_status action_butterflies_update_overlays(struct cats_grid *grid, struct cats_configuration *conf) +enum action_status action_butterflies_update_overlays(struct cats_grid *grid, struct cats_configuration *conf) { - bool run = false; int module_id = CATS_MODULE_ID; struct grid_data_butterflies *data = grid->grid_modules[module_id].module_data; - if (! run) { - reset_food_layer(grid, data); + if (conf->overlays.have_overlays == false) { + return ACTION_NOT_RUN; } - if (conf->overlays.overlay[OL_EXCLUSION].enabled) { - run = true; - } + const cats_dt_coord rows = grid->dimension.rows; + const cats_dt_coord cols = grid->dimension.cols; + for (cats_dt_coord row = 0; row < rows; row++) { + for (cats_dt_coord col = 0; col < cols; col++) { + data->info_layer[row][col] = BF_CELL_CLEAR; + + if (cell_excluded_by_overlay(conf, row, col)) { + data->info_layer[row][col] |= BF_CELL_EXCLUDED; + } + + if (conf->overlays.overlay[OL_HABITAT_TYPE_CC].enabled && + conf->overlays.habitat_cc->data[row][col] > 0) { + data->info_layer[row][col] |= BF_CELL_HABITAT_OK; + } + + if (conf->overlays.overlay[OL_RESOURCE].enabled && + conf->overlays.resources->data[row][col] > 0) { + data->info_layer[row][col] |= BF_CELL_RESOURCE_AVAILABLE; + } + } + } - if (!run) return ACTION_NOT_RUN; return ACTION_RUN; } @@ -323,7 +338,7 @@ void add_actions(struct cats_configuration *conf) "transition eggs to adults"); register_action_function(conf, action_butterflies_update_overlays, "butterfly_action_overlay_update", - "updating resource layer"); + "updating overlays"); register_action_function(conf, action_butterflies_dispersal, "butterfly_action_dispersal", "egg dispersal"); register_action_function(conf, action_butterflies_kill_adults, "butterfly_kill_adults", "kill adults");