Exemplo n.º 1
0
/**
 * Sets the si->currentmeasurenum to the given value
 * if exists, making it the leftmost measure visible, not extending selection
 *
 */
static gboolean
goto_currentmeasurenum (gint dest, gint leftmeasurenum)
{
  DenemoProject *gui = Denemo.project;
  if ((dest > 0) && (dest <= (gint) (g_list_length (gui->movement->measurewidths))))
    {
      //gui->movement->leftmeasurenum = dest;
      gui->movement->currentmeasurenum = dest;
      if(leftmeasurenum)
        gui->movement->leftmeasurenum = leftmeasurenum;
      if ((dest < gui->movement->leftmeasurenum) || (dest > gui->movement->rightmeasurenum))
        center_viewport ();
      setcurrents (gui->movement);
      set_rightmeasurenum (gui->movement);
      find_leftmost_allcontexts (gui->movement);
      if(!Denemo.non_interactive)
        update_hscrollbar (gui);
      draw_score_area();
      return TRUE;
    }
  return FALSE;
}
Exemplo n.º 2
0
/*
 * Application entry point
 */
int main(int argc, char *argv[])
{
	ALLEGRO_DISPLAY *display = NULL;
	ALLEGRO_EVENT_QUEUE *event_queue = NULL;
	ALLEGRO_TIMER *timer = NULL;
	ALLEGRO_KEYBOARD_STATE keyboard_state;
	ALLEGRO_MAP *map;
	Avatar *tar;

	bool running = true;
	bool redraw = true;

	int map_x = 0, map_y = 0;
	int screen_width = 640;
	int screen_height = 480;

	//{{{ initialization
	
	// Initialize allegro
	if (!al_init()) {
		fprintf(stderr, "Failed to initialize allegro.\n");
		return 1;
	}

	// Initialize allegro_image addon
	if (!al_init_image_addon()) {
		fprintf(stderr, "Failed to initialize image addon.\n");
		return 1;
	}

	// Initialize the timer
	timer = al_create_timer(1.0 / FPS);
	if (!timer) {
		fprintf(stderr, "Failed to create timer.\n");
		return 1;
	}

	// Install the keyboard
	if (!al_install_keyboard()) {
		fprintf(stderr, "Failed to install keyboard.\n");
		return 1;
	}

	// Create the display
	display = al_create_display(screen_width, screen_height);
	if (!display) {
		fprintf(stderr, "Failed to create display.\n");
		return 1;
	} else {
		al_set_window_title(display, "Hello Tiled!");
	}

	// Create the event queue
	event_queue = al_create_event_queue();
	if (!event_queue) {
		fprintf(stderr, "Failed to create event queue.\n");
		return 1;
	}

	// Register event sources
	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());

	//}}}
	
	// Start the timer
	al_start_timer(timer);

	// Parse the map
	map = al_open_map(MAP_FOLDER, "level1.tmx");

    // Create avatar
    tar = create_avatar(0, 0, "data/avatar.png");

	// Draw the map
	al_clear_to_color(al_map_rgb(0, 0, 0));
	al_draw_map_region(map, map_x, map_y, screen_width, screen_height, 0, 0, 0);
	al_flip_display();
	
#if DEBUG
	// FPS counter
	double old_time = al_get_time(), fps = 0;
	int frames_done = 0;
#endif

	// Main loop
	while (running) {
		ALLEGRO_EVENT event;
		ALLEGRO_TIMEOUT	timeout;

		// Initialize the timeout (not the game's clock)
		al_init_timeout(&timeout, 0.06);

		// Fetch the event (if one exists)
		bool get_event = al_wait_for_event_until(event_queue, &event, &timeout);

		// Handle the event
		if (get_event) {
			switch (event.type) {
				case ALLEGRO_EVENT_TIMER:
					// is an arrow key being held?
					al_get_keyboard_state(&keyboard_state);
					
					int x_move = 0;
					int y_move = 0;
					
					if (al_key_down(&keyboard_state, ALLEGRO_KEY_RIGHT)) {
					    x_move += 2;
					}
					if (al_key_down(&keyboard_state, ALLEGRO_KEY_LEFT)) {
						x_move -= 2;
					}
					if (al_key_down(&keyboard_state, ALLEGRO_KEY_UP)) {
						y_move -= 2;
					}
					if (al_key_down(&keyboard_state, ALLEGRO_KEY_DOWN)) {
						y_move += 2;
					}
					
					walk(tar, x_move, y_move);
					//gravity(tar, 
					
					center_viewport(tar, screen_width, screen_height, map, &map_x, &map_y);

					redraw = true;
					break;
				case ALLEGRO_EVENT_DISPLAY_CLOSE:
					running = false;
					break;
				case ALLEGRO_EVENT_KEY_DOWN:
					// ignore
					break;
				case ALLEGRO_EVENT_KEY_UP:
					// ignore
					break;
				case ALLEGRO_EVENT_KEY_CHAR:
					if (event.keyboard.keycode == ALLEGRO_KEY_SPACE) {
						ALLEGRO_MAP_LAYER *collide_layer = al_get_map_layer(map, "Blocks 1");
						ALLEGRO_MAP_TILE **tiles = get_occupied_tile_ids(tar, collide_layer, map);
						fprintf(stdout, "Avatar on tiles: {%s, %s, %s, %s}\n", 
								al_get_tile_property(tiles[0], "collide", "null"), 
								al_get_tile_property(tiles[1], "collide", "null"), 
								al_get_tile_property(tiles[2], "collide", "null"), 
								al_get_tile_property(tiles[3], "collide", "null"));
						free(tiles);
						tiles = NULL;
					}
					break;
				default:
					fprintf(stderr, "Unsupported event received: %d\n", event.type);
					break;
			}
		}

		if (redraw && al_is_event_queue_empty(event_queue)) {
			// Clear the screen
			al_clear_to_color(al_map_rgb(0, 0, 0));
			
#if DEBUG
		    double game_time = al_get_time();
			if(game_time - old_time >= 1.0) {
				fps = frames_done / (game_time - old_time);

				frames_done = 0;
				old_time = game_time;
				fprintf(stderr, "FPS:%f\n", fps);
			}
			frames_done++;
#endif
			
			al_draw_map_region(map, map_x, map_y, screen_width, screen_height, 0, 0, 0);
			draw_avatar(tar, map, map_x, map_y);

			al_flip_display();
			redraw = false;
		}
	}

	// Clean up and return
	free_avatar(tar);
	al_free_map(map);
	al_destroy_display(display);
	al_destroy_event_queue(event_queue);
	return 0;
}