/** * 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; }
/* * 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; }