static void event_thread_exit(void *drcontext) { per_thread_t *data; instrace(drcontext); data = drmgr_get_tls_field(drcontext, tls_index); dr_mutex_lock(mutex); num_refs += data->num_refs; dr_mutex_unlock(mutex); #ifdef OUTPUT_TEXT log_stream_close(data->logf); /* closes fd too */ #else log_file_close(data->log); #endif dr_thread_free(drcontext, data->buf_base, MEM_BUF_SIZE); dr_thread_free(drcontext, data, sizeof(per_thread_t)); }
main ( int argc, char **argv ) { int lindex, hindex, index_mod; log_file logf; log_gobbled logg; char *values; int first, pass; mc_temp_sched *sch; mc_temp_state *ts; mc_iter *it; char **ap; double ww; char *v; int i; /* Look at arguments other than log files and ranges. */ if (argc<3) usage(); values = argv[1]; /* Set records sizes required. */ logg.req_size['i'] = sizeof (mc_iter); logg.req_size['o'] = sizeof (mc_ops); logg.req_size['t'] = sizeof (mc_traj); logg.req_size['b'] = sizeof (mc_temp_state); logg.req_size['m'] = sizeof (mc_temp_sched); /* Go twice through all the log files and ranges specified. Compute means the first time, variances the second. */ for (pass = 1; pass<=2; pass++) { first = 1; ap = argv+2; while (*ap) { /* Look at arguments giving log file and range. */ logf.file_name = *ap++; if (*ap!=0 && strchr(":%0123456789",**ap)!=0) { parse_range(*ap,&lindex,&hindex,&index_mod); if (index_mod<0) { fprintf(stderr,"Bad range specification: %s\n",*ap); exit(1); } ap += 1; } else { lindex = 1; hindex = -1; index_mod = 1; } if (hindex<0) hindex = 1000000000; /* Open log file and set up for gobbling. */ log_file_open(&logf,0); log_gobble_init(&logg,!first); /* Gobble up records with negative indexes. */ while (logf.header.index<0) { log_gobble(&logf,&logg); } /* Skip to start of range, gobble up records at start. */ while (!logf.at_end && (logf.header.index<lindex || logf.header.index%index_mod!=0)) { log_file_forward(&logf); } if (logf.at_end) continue; log_gobble(&logf,&logg); /* Go through all the records in the indicated range. */ for (;;) { /* See what's here. */ sch = logg.data['m']; if (sch==0) { fprintf(stderr,"No tempering schedule present\n"); exit(1); } ts = logg.data['b']!=0 && logg.index['b']==logg.last_index ? logg.data['b'] : 0; it = logg.data['i']!=0 && logg.index['i']==logg.last_index ? logg.data['i'] : 0; /* Look at data for this index, if anything is happening. */ if (ts!=0 || it!=0) { if (ts==0) { fprintf(stderr,"No tempering state present (%s %d)\n", logf.file_name, logg.last_index); exit(1); } if (it==0) { fprintf(stderr,"No record describing iteration present (%s %d)\n", logf.file_name, logg.last_index); exit(1); } i = mc_temp_index(sch,ts->inv_temp); /* Look at data for pass 1. */ if (pass==1) { if (n_points[i]==0) { w_mean[i] = it->log_weight; logw_mean[i] = it->log_weight; } else { w_mean[i] = addlogs (w_mean[i], it->log_weight); logw_mean[i] = logw_mean[i] + it->log_weight; } n_points[i] += 1; } /* Look at data for pass 2. */ if (pass==2) { ww = exp(it->log_weight-w_mean[i]); ww_var[i] += (ww-1)*(ww-1); logw_var[i] += (it->log_weight - logw_mean[i]) * (it->log_weight - logw_mean[i]); } } /* Skip to next desired index, or to end of range. */ while (!logf.at_end && logf.header.index<=hindex && logf.header.index%index_mod!=0) { log_file_forward(&logf); } if (logf.at_end || logf.header.index>hindex) { break; } /* Gobble up records for next index. */ log_gobble(&logf,&logg); } log_file_close(&logf); first = 0; } /* Finish up pass 1. */ if (pass==1) { for (i = 0; i<Max_temps; i++) { if (n_points[i]>0) { w_mean[i] -= log((double)n_points[i]); logw_mean[i] /= n_points[i]; } if (sch->sched[i].inv_temp==1) break; } } /* Finish up pass 2. */ if (pass==2) { for (i = 0; i<Max_temps; i++) { if (n_points[i]>1) { ww_var[i] /= (n_points[i]-1); logw_var[i] /= (n_points[i]-1); } if (sch->sched[i].inv_temp==1) break; } } } /* Print values for each temperature. */ for (i = 0; i<Max_temps; i++) { if (n_points[i]>0) { for (v = values; *v; v++) { switch (*v) { case 'I': { printf(" %4d",i); break; } case 'i': { printf(" %.6f",sch->sched[i].inv_temp); break; } case 'T': { printf(" %9.4f",1/sch->sched[i].inv_temp); break; } case 'm': { printf(" %.6e", n_points[i]==0 ? 1 : exp(w_mean[i])); break; } case 'M': { printf(" %.6e", n_points[i]==0 ? 0 : w_mean[i]); break; } case 'F': { printf(" %.6e", n_points[i]==0 ? 0 : -w_mean[i]); break; } case 'v': { printf(" %8.3f", n_points[i]>1 ? ww_var[i] : 0); break; } case 'V': { printf(" %8.3f", n_points[i]>1 ? logw_var[i] : 0); break; } case 'a': { printf(" %9.3f", n_points[i]>1 ? n_points[i]/(1+ww_var[i]) : 0); break; } case 'W': { printf(" %9.3f", n_points[i]>1 ? log (1+ww_var[i]) : 0); break; } default: { fprintf(stderr,"Invalid value specifier: %c\n",*v); exit(1); } } } printf("\n"); } if (sch->sched[i].inv_temp==1) break; } exit(0); }
int main(int argc, char** argv){ printf("hello world\n"); behaviors_init(); log_file_open("log.txt"); if (SDL_Init(SDL_INIT_EVERYTHING) == -1){ printf("%s\n", SDL_GetError()); return 1; } printf("sdl init success\n"); SDL_Renderer *renderer = NULL; SDL_Window *window = NULL; //Setup our window and renderer window = SDL_CreateWindow("Stick Fighter", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (window == NULL){ printf("%s\n", SDL_GetError()); return 2; } renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if (renderer == NULL){ printf("%s\n", SDL_GetError()); return 3; } SDL_Texture *background1 = NULL; SDL_Texture *background2 = NULL; SDL_Texture *image = NULL; //background = sprite_load_image(renderer, "res/background_rcr.png"); background1 = sprite_load_image(renderer, "res/background_rcr.png"); background2 = sprite_load_image(renderer, "res/background_new.png"); SDL_Texture* backgrounds[2]; backgrounds[0] = background1; backgrounds[1] = background2; SDL_Rect bg; //Query the texture to get its width and height to use SDL_QueryTexture(background1, NULL, NULL, &bg.w, &bg.h); float bg_width = bg.w; float bg_height = bg.h; float world_width = bg_width / 10; float world_height = bg_height / 10; printf("bg_width: %f bg_height: %f world_width: %f world_height: %f\n", bg_width, bg_height, world_width, world_height); //printf("bg 1: [%p]\n", backgrounds[0]); //printf("bg 2: [%p]\n", backgrounds[1]); image = sprite_load_image(renderer, "res/output.png"); //printf("after sprite load image\n"); //load the meta info char* filename = "res/animation_meta_info.txt"; DArray meta_info; darray_init(&meta_info); sprite_load_meta_file(filename, &meta_info); darray_print(&meta_info); float interval = 0.0f; float start = 0.0f; int quit = 0; float delay = 1000.0f / FPS; Sprite* player = sprite_create(PLAYER, WALK, 200, 300, delay, image); player->x_speed = 0; player->y_speed = 0; Sprite* enemy = sprite_create(ENEMY, WALK, 0, 300, delay, image); enemy->x_speed = 2; enemy->y_speed = 2; enemy->advance_frame = 1; //set white background SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); pixel_to_world(bg_width, bg_height, world_width, world_height, enemy->x, enemy->y, &enemy->location->coords->x, &enemy->location->coords->y); int dest_x = 0; int dest_y = 0; //TODO: //animations for punch and basic kick //animation for getting hit //animations for walk left and run left //2 more ai behaviors //health bars above units and health stats //dying animation //dying logic //generate enemies off screen and have them walk on to screen //redo tornado kick and spinning back kick so stick figure is same size //figure out how to color stick figure without having to make new sprites on sheet...need to make figures white to set modulation //add rolling punch move //add game state which keeps track of game state //add buy moves screen in between levels //add a generator which generates guys for 100 levels int i = 0; while (!quit){ printf("iteration: %i\n", i); start = SDL_GetTicks(); quit = player_input(player, &meta_info); //printf("quit: %i\n", quit); //log_msg(LOG_DEBUG, "after player input: current frame: %i\n", player->current_frame[HIT]); //pixel location to world location pixel_to_world(bg_width, bg_height, world_width, world_height, player->x, player->y, &player->location->coords->x, &player->location->coords->y); //world location to pixel location world_to_pixel(bg_width, bg_height, world_width, world_height, enemy->location->coords->x, enemy->location->coords->y, &dest_x, &dest_y); //boundry check boundry_check(SCREEN_WIDTH, SCREEN_HEIGHT, enemy, &meta_info, &dest_x, &dest_y); //printf("2nd before moveto = enemy x:%i enemy y:%i dest_x:%i dest_y:%i\n", enemy->x, enemy->y, dest_x, dest_y); //update enemy sprite by sprite's speed moveto_coordinates(enemy, dest_x, dest_y); //are we at the original world location in pixel coordinates? int arrived = within_coordinates(enemy, dest_x, dest_y); printf("arrived: %i\n", arrived); if(arrived == 1) { //wander(enemy); // we reached last behavior's destination so do new AI behavior wander_stall_attack(player, enemy, &meta_info, 3); } sprite_update_bounding_box(player, &meta_info); sprite_update_bounding_box(enemy, &meta_info); //check collision int collision = sprite_check_collision(player, enemy); //printf("collision: %i\n", collision); if(collision) { sprite_handle_collision(player, enemy, &meta_info); } //handle collision //if animation is an attack then check frame range that triggers a hit //check if attack animation triggers a hi or low hit //if sequence of attacks is within delta time then 4th hit triggers a knockdown //if attack would make health below 0 then it triggers a knockdown //handle opposite attack from opposing sprite //if is in attack animation then check frame range for a hit //update animation frame sprite_update(player, &meta_info, renderer); sprite_update(enemy, &meta_info, renderer); //Rendering SDL_RenderClear(renderer); //printf("player->x: %i\n", player->x); //printf("moving right: %i\n", player->moving_right); //printf("moving left: %i\n", player->moving_left); int current_background = 0; sprite_draw_background(renderer, backgrounds, 2, ¤t_background, player->x, player->moving_right, player->moving_left, &player->scroll); sprite_draw_health_bar(renderer, player, &meta_info, 100); sprite_draw_health_bar(renderer, enemy, &meta_info, 100); //draw sprite sprite_render_frame(SCREEN_WIDTH, SCREEN_HEIGHT, player, &meta_info, renderer, 0); sprite_render_frame(bg_width, bg_height, enemy, &meta_info, renderer, 0); //Update the screen SDL_RenderPresent(renderer); interval = SDL_GetTicks() - start; if(interval > 0) { //float fps = 1.0f / (interval / 1000.0f); //printf("%f fps\n", fps); } i++; } //SDL_Delay(4000); //Destroy the various items sprite_destroy(player); sprite_destroy(enemy); darray_destroy(&meta_info); SDL_DestroyTexture(backgrounds[0]); SDL_DestroyTexture(backgrounds[1]); SDL_DestroyTexture(image); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); printf("after destory text rend win\n"); SDL_Quit(); log_file_close(); return 0; }
static void event_thread_exit(void *drcontext) { log_file_close((file_t)(ptr_uint_t)dr_get_tls_field(drcontext)); }
static void event_exit(void) { int i; char msg[512]; int len; int j; uint64 xmod_xfer = 0; uint64 self_xfer = 0; for (i = 0; i < num_mods; i++) { dr_fprintf(logfile, "module %3d: %s\n", i, dr_module_preferred_name(mod_array[i].info) == NULL ? "<unknown>" : dr_module_preferred_name(mod_array[i].info)); dr_fprintf(logfile, "%20llu instruction executed\n", mod_cnt[i]); } if (mod_cnt[UNKNOW_MODULE_IDX] != 0) { dr_fprintf(logfile, "unknown modules:\n%20llu instruction executed\n", mod_cnt[UNKNOW_MODULE_IDX]); } for (i = 0; i < MAX_NUM_MODULES; i++) { for (j = 0; j < num_mods; j++) { if (xfer_cnt[i][j] != 0) { dr_fprintf(logfile, "mod %3d => mod %3d: %8u\n", i, j, xfer_cnt[i][j]); if (i == j) self_xfer += xfer_cnt[i][j]; else xmod_xfer += xfer_cnt[i][j]; } } } len = dr_snprintf(msg, sizeof(msg)/sizeof(msg[0]), "Instrumentation results:\n" "\t%10llu instructions executed\n" "\t%10llu (%2.3f%%) cross module indirect branches\n" "\t%10llu (%2.3f%%) intra-module indirect branches\n", ins_count, xmod_xfer, 100*(float)xmod_xfer/ins_count, self_xfer, 100*(float)self_xfer/ins_count); DR_ASSERT(len > 0); NULL_TERMINATE_BUFFER(msg); #ifdef SHOW_RESULTS DISPLAY_STRING(msg); #endif /* SHOW_RESULTS */ dr_fprintf(logfile, "%s\n", msg); dr_mutex_lock(mod_lock); for (i = 0; i < num_mods; i++) { DR_ASSERT(mod_array[i].info != NULL); dr_free_module_data(mod_array[i].info); } dr_mutex_unlock(mod_lock); dr_mutex_destroy(mod_lock); log_file_close(logfile); drx_exit(); if (!drmgr_unregister_bb_instrumentation_event(event_analyze_bb) || !drmgr_unregister_module_load_event(event_module_load) || !drmgr_unregister_module_unload_event(event_module_unload) || drreg_exit() != DRREG_SUCCESS) DR_ASSERT(false); drmgr_exit(); }