void TemplateTrack::drawTemplate(QPainter* painter, QRectF& clip_rect, double scale, bool on_screen, float opacity) const { Q_UNUSED(clip_rect); Q_UNUSED(scale); painter->save(); painter->setOpacity(opacity); drawTracks(painter, on_screen); drawWaypoints(painter); painter->restore(); }
int execAlleg() { // init variables from lua lua_getglobal(L, "Screen"); SCREEN_W = getfield(L, "width"); SCREEN_H = getfield(L, "height"); lua_pop(L, 1); printf("screen height= %d width= %d\n", SCREEN_H, SCREEN_W); lua_getglobal(L, "Car"); CAR_WIDTH = getfield(L, "width"); lua_pop(L, 1); printf("car width= %d\n", CAR_WIDTH); lua_getglobal(L, "Track"); TRACKS_NUM = getfield(L, "number"); TRACKS_BEGIN = getfield(L, "begin"); TRACKS_FINISH = getfield(L, "finish"); lua_pop(L, 1); // register C function to Lua lua_pushcfunction(L, getCar); lua_setglobal(L, "sendCar"); // end of lua intialization ALLEGRO_DISPLAY *display = NULL; ALLEGRO_EVENT_QUEUE *event_queue = NULL; ALLEGRO_TIMER *timer = NULL; ALLEGRO_BITMAP *world; bool doexit = false; bool redraw = true; bool KEY_LEFT = false, KEY_RIGHT = false; if(!al_init()) { fprintf(stderr, "failed to initialize allegro!\n"); return -1; } if(!al_install_keyboard()) { fprintf(stderr, "failed to initialize the keyboard!\n"); return -1; } if(!al_install_mouse()) { fprintf(stderr, "failed to initialize the mouse!\n"); return -1; } timer = al_create_timer(1.0 / FPS); if(!timer) { fprintf(stderr, "failed to create timer!\n"); return -1; } display = al_create_display(SCREEN_W, SCREEN_H); if(!display) { fprintf(stderr, "failed to create display!\n"); al_destroy_timer(timer); return -1; } if (!al_init_primitives_addon()) { fprintf(stderr, "failed to init primitives addon!\n"); al_destroy_timer(timer); return -1; } event_queue = al_create_event_queue(); if(!event_queue) { fprintf(stderr, "failed to create event_queue!\n"); al_destroy_display(display); al_destroy_timer(timer); return -1; } world = al_create_bitmap(SCREEN_W, SCREEN_H); if(!world) { fprintf(stderr, "failed to create world bitmap!\n"); al_destroy_display(display); al_destroy_timer(timer); return -1; } cars_num = (unsigned*)malloc(BAR_W*sizeof(unsigned)); cars_col = (float*)malloc(BAR_W*sizeof(float)); int n; for (n = 0; n < BAR_W; n++) { cars_num[n] = 0; cars_col[n] = 1; } al_set_target_bitmap(world); al_clear_to_color(al_map_rgb(0, 0, 0)); al_set_target_bitmap(al_get_backbuffer(display)); al_register_event_source(event_queue, al_get_display_event_source(display)); al_register_event_source(event_queue, al_get_timer_event_source(timer)); al_register_event_source(event_queue, al_get_keyboard_event_source()); al_register_event_source(event_queue, al_get_mouse_event_source()); al_start_timer(timer); while(!doexit) { ALLEGRO_EVENT ev; al_wait_for_event(event_queue, &ev); if(ev.type == ALLEGRO_EVENT_TIMER && al_is_event_queue_empty(event_queue) && !PAUSE) { al_set_target_bitmap(world); al_clear_to_color(al_map_rgb(0,0,0)); // your code here drawTracks(); lua_getglobal(L, "simulate"); lua_call(L,0,0); drawBar(); // end of your code } else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) { break; } else if(ev.type == ALLEGRO_EVENT_KEY_DOWN) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_LEFT: KEY_LEFT = true; break; case ALLEGRO_KEY_RIGHT: KEY_RIGHT = true; break; case ALLEGRO_KEY_P: PAUSE = (PAUSE) ? false : true; break; } } else if(ev.type == ALLEGRO_EVENT_KEY_UP) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_LEFT: KEY_LEFT = false; break; case ALLEGRO_KEY_RIGHT: KEY_RIGHT = false; break; } } else if(ev.type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN) { world_x = ((SCREEN_W - TRACKS_BEGIN - TRACKS_FINISH)*ev.mouse.x)/SCREEN_W; } /* if (ev.type == ALLEGRO_EVENT_MOUSE_AXES || ev.type == ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY) { al_flush_event_queue(event_queue); } */ if (KEY_LEFT) { if (world_x + 20 <= 0) world_x += 20; } if (KEY_RIGHT) { if (world_x - 20 >= SCREEN_W - TRACKS_BEGIN - TRACKS_FINISH) world_x -= 20; } if (redraw) { al_set_target_bitmap(al_get_backbuffer(display)); al_draw_bitmap(world, 0, 0, 0); al_flip_display(); } } al_destroy_timer(timer); al_destroy_display(display); al_destroy_event_queue(event_queue); al_shutdown_primitives_addon(); return 0; }