X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fscreens.c;h=0a610b07b4015835c35788f5db223dbd93110691;hp=dd7f2b4bd2204cc64a7931b1d0fe271ee166e2ac;hb=9d794c9630575acd052a806685986eec189b5794;hpb=bb39d750f3dfc6a931aa21cd3400c80cbb600676 diff --git a/src/screens.c b/src/screens.c index dd7f2b4b..0a610b07 100644 --- a/src/screens.c +++ b/src/screens.c @@ -258,6 +258,7 @@ static void ModifyGameSpeedIfNeeded(void); static void DisableVsyncIfNeeded(void); static void MapScreenMenuGadgets(int); +static void UnmapScreenMenuGadgets(int); static void MapScreenGadgets(int); static void MapScreenTreeGadgets(TreeInfo *); @@ -988,6 +989,7 @@ static struct TitleFadingInfo getTitleFading(struct TitleControlInfo *tci) ti.fade_delay = tmi.fade_delay; ti.post_delay = tmi.post_delay; ti.auto_delay = tmi.auto_delay; + ti.auto_delay_unit = tmi.auto_delay_unit; return ti; } @@ -1704,6 +1706,25 @@ static void gotoTopLevelDir(void) } } +static unsigned int getAutoDelayCounter(struct TitleFadingInfo *fi) +{ + boolean use_frame_counter = (fi->auto_delay_unit == AUTO_DELAY_UNIT_FRAMES); + + return (use_frame_counter ? video.frame_counter : Counter()); +} + +static boolean TitleAutoDelayReached(unsigned int *counter_var, + struct TitleFadingInfo *fi) +{ + return DelayReachedExt(counter_var, fi->auto_delay, getAutoDelayCounter(fi)); +} + +static void ResetTitleAutoDelay(unsigned int *counter_var, + struct TitleFadingInfo *fi) +{ + *counter_var = getAutoDelayCounter(fi); +} + void HandleTitleScreen(int mx, int my, int dx, int dy, int button) { static unsigned int title_delay = 0; @@ -1778,12 +1799,12 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) FadeIn(REDRAW_ALL); - DelayReached(&title_delay, 0); // reset delay counter + ResetTitleAutoDelay(&title_delay, &fading); return; } - if (fading.auto_delay > 0 && DelayReached(&title_delay, fading.auto_delay)) + if (fading.auto_delay > 0 && TitleAutoDelayReached(&title_delay, &fading)) button = MB_MENU_CHOICE; if (button == MB_MENU_LEAVE) @@ -1841,7 +1862,7 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) FadeIn(REDRAW_ALL); - DelayReached(&title_delay, 0); // reset delay counter + ResetTitleAutoDelay(&title_delay, &fading); } else { @@ -8280,64 +8301,10 @@ void HandleGameActions(void) // ---------- new screen button stuff -------------------------------------- -static void getScreenMenuButtonPos(int *x, int *y, int gadget_id) -{ - switch (gadget_id) - { - case SCREEN_CTRL_ID_PREV_LEVEL: - *x = mSX + GDI_ACTIVE_POS(menu.main.button.prev_level.x); - *y = mSY + GDI_ACTIVE_POS(menu.main.button.prev_level.y); - break; - - case SCREEN_CTRL_ID_NEXT_LEVEL: - *x = mSX + GDI_ACTIVE_POS(menu.main.button.next_level.x); - *y = mSY + GDI_ACTIVE_POS(menu.main.button.next_level.y); - break; - - case SCREEN_CTRL_ID_FIRST_LEVEL: - *x = mSX + GDI_ACTIVE_POS(menu.main.button.first_level.x); - *y = mSY + GDI_ACTIVE_POS(menu.main.button.first_level.y); - break; - - case SCREEN_CTRL_ID_LAST_LEVEL: - *x = mSX + GDI_ACTIVE_POS(menu.main.button.last_level.x); - *y = mSY + GDI_ACTIVE_POS(menu.main.button.last_level.y); - break; - - case SCREEN_CTRL_ID_LEVEL_NUMBER: - *x = mSX + GDI_ACTIVE_POS(menu.main.button.level_number.x); - *y = mSY + GDI_ACTIVE_POS(menu.main.button.level_number.y); - break; - - case SCREEN_CTRL_ID_PREV_PLAYER: - *x = mSX + TILEX * 10; - *y = mSY + TILEY * MENU_SCREEN_START_YPOS; - break; - - case SCREEN_CTRL_ID_NEXT_PLAYER: - *x = mSX + TILEX * 12; - *y = mSY + TILEY * MENU_SCREEN_START_YPOS; - break; - - case SCREEN_CTRL_ID_INSERT_SOLUTION: - *x = mSX + GDI_ACTIVE_POS(menu.main.button.insert_solution.x); - *y = mSY + GDI_ACTIVE_POS(menu.main.button.insert_solution.y); - break; - - case SCREEN_CTRL_ID_PLAY_SOLUTION: - *x = mSX + GDI_ACTIVE_POS(menu.main.button.play_solution.x); - *y = mSY + GDI_ACTIVE_POS(menu.main.button.play_solution.y); - break; - - default: - Error(ERR_EXIT, "unknown gadget ID %d", gadget_id); - } -} - static struct { int gfx_unpressed, gfx_pressed; - void (*get_gadget_position)(int *, int *, int); + struct MenuPosInfo *pos; int gadget_id; int screen_mask; unsigned int event_mask; @@ -8346,7 +8313,7 @@ static struct { { IMG_MENU_BUTTON_PREV_LEVEL, IMG_MENU_BUTTON_PREV_LEVEL_ACTIVE, - getScreenMenuButtonPos, + &menu.main.button.prev_level, SCREEN_CTRL_ID_PREV_LEVEL, SCREEN_MASK_MAIN, GD_EVENT_PRESSED | GD_EVENT_REPEATED, @@ -8354,7 +8321,7 @@ static struct }, { IMG_MENU_BUTTON_NEXT_LEVEL, IMG_MENU_BUTTON_NEXT_LEVEL_ACTIVE, - getScreenMenuButtonPos, + &menu.main.button.next_level, SCREEN_CTRL_ID_NEXT_LEVEL, SCREEN_MASK_MAIN, GD_EVENT_PRESSED | GD_EVENT_REPEATED, @@ -8362,7 +8329,7 @@ static struct }, { IMG_MENU_BUTTON_FIRST_LEVEL, IMG_MENU_BUTTON_FIRST_LEVEL_ACTIVE, - getScreenMenuButtonPos, + &menu.main.button.first_level, SCREEN_CTRL_ID_FIRST_LEVEL, SCREEN_MASK_MAIN, GD_EVENT_RELEASED, @@ -8370,7 +8337,7 @@ static struct }, { IMG_MENU_BUTTON_LAST_LEVEL, IMG_MENU_BUTTON_LAST_LEVEL_ACTIVE, - getScreenMenuButtonPos, + &menu.main.button.last_level, SCREEN_CTRL_ID_LAST_LEVEL, SCREEN_MASK_MAIN, GD_EVENT_RELEASED, @@ -8378,7 +8345,7 @@ static struct }, { IMG_MENU_BUTTON_LEVEL_NUMBER, IMG_MENU_BUTTON_LEVEL_NUMBER_ACTIVE, - getScreenMenuButtonPos, + &menu.main.button.level_number, SCREEN_CTRL_ID_LEVEL_NUMBER, SCREEN_MASK_MAIN, GD_EVENT_RELEASED, @@ -8386,7 +8353,7 @@ static struct }, { IMG_MENU_BUTTON_LEFT, IMG_MENU_BUTTON_LEFT_ACTIVE, - getScreenMenuButtonPos, + &menu.setup.button.prev_player, SCREEN_CTRL_ID_PREV_PLAYER, SCREEN_MASK_INPUT, GD_EVENT_PRESSED | GD_EVENT_REPEATED, @@ -8394,7 +8361,7 @@ static struct }, { IMG_MENU_BUTTON_RIGHT, IMG_MENU_BUTTON_RIGHT_ACTIVE, - getScreenMenuButtonPos, + &menu.setup.button.next_player, SCREEN_CTRL_ID_NEXT_PLAYER, SCREEN_MASK_INPUT, GD_EVENT_PRESSED | GD_EVENT_REPEATED, @@ -8402,7 +8369,7 @@ static struct }, { IMG_MENU_BUTTON_INSERT_SOLUTION, IMG_MENU_BUTTON_INSERT_SOLUTION_ACTIVE, - getScreenMenuButtonPos, + &menu.main.button.insert_solution, SCREEN_CTRL_ID_INSERT_SOLUTION, SCREEN_MASK_MAIN_HAS_SOLUTION, GD_EVENT_RELEASED, @@ -8410,7 +8377,7 @@ static struct }, { IMG_MENU_BUTTON_PLAY_SOLUTION, IMG_MENU_BUTTON_PLAY_SOLUTION_ACTIVE, - getScreenMenuButtonPos, + &menu.main.button.play_solution, SCREEN_CTRL_ID_PLAY_SOLUTION, SCREEN_MASK_MAIN_HAS_SOLUTION, GD_EVENT_RELEASED, @@ -8488,6 +8455,7 @@ static void CreateScreenMenubuttons(void) for (i = 0; i < NUM_SCREEN_MENUBUTTONS; i++) { + struct MenuPosInfo *pos = menubutton_info[i].pos; Bitmap *gd_bitmap_unpressed, *gd_bitmap_pressed; int gfx_unpressed, gfx_pressed; int x, y, width, height; @@ -8496,7 +8464,8 @@ static void CreateScreenMenubuttons(void) event_mask = menubutton_info[i].event_mask; - menubutton_info[i].get_gadget_position(&x, &y, id); + x = mSX + GDI_ACTIVE_POS(pos->x); + y = mSY + GDI_ACTIVE_POS(pos->y); width = graphic_info[menubutton_info[i].gfx_pressed].width; height = graphic_info[menubutton_info[i].gfx_pressed].height; @@ -8747,7 +8716,7 @@ void FreeScreenGadgets(void) FreeGadget(screen_gadget[i]); } -void MapScreenMenuGadgets(int screen_mask) +static void MapScreenMenuGadgets(int screen_mask) { int i; @@ -8775,7 +8744,7 @@ static void UnmapScreenMenuGadgets(int screen_mask) } } -void UpdateScreenMenuGadgets(int screen_mask, boolean map_gadgets) +static void UpdateScreenMenuGadgets(int screen_mask, boolean map_gadgets) { if (map_gadgets) MapScreenMenuGadgets(screen_mask); @@ -8783,7 +8752,7 @@ void UpdateScreenMenuGadgets(int screen_mask, boolean map_gadgets) UnmapScreenMenuGadgets(screen_mask); } -void MapScreenGadgets(int num_entries) +static void MapScreenGadgets(int num_entries) { int i; @@ -8797,7 +8766,7 @@ void MapScreenGadgets(int num_entries) MapGadget(screen_gadget[scrollbar_info[i].gadget_id]); } -void MapScreenTreeGadgets(TreeInfo *ti) +static void MapScreenTreeGadgets(TreeInfo *ti) { MapScreenGadgets(numTreeInfoInGroup(ti)); }