Пример #1
0
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();
}
Пример #2
0
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;
}