X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fanim.c;h=d226d5cddcc82626191dde2c34abb6edcca32f48;hb=ed7934511c4ad252316e32e00af2ce89a40c5609;hp=eccd018556eba250cf91c124ab34ad1190cdfabb;hpb=56d8384fddc8e74f5327b28986f366927c3b2040;p=rocksndiamonds.git diff --git a/src/anim.c b/src/anim.c index eccd0185..d226d5cd 100644 --- a/src/anim.c +++ b/src/anim.c @@ -230,6 +230,8 @@ static int anim_classes_last = ANIM_CLASS_NONE; static boolean drawing_to_fading_buffer = FALSE; +static boolean handle_click = FALSE; + // ============================================================================ // generic animation frame calculation @@ -813,13 +815,24 @@ static void DrawGlobalAnimationsExt(int drawing_target, int drawing_stage) void DrawGlobalAnimations(int drawing_target, int drawing_stage) { + int last_cursor_mode_override = gfx.cursor_mode_override; + if (drawing_stage == DRAW_GLOBAL_ANIM_STAGE_1) + { ResetGlobalAnim_Clickable(); + gfx.cursor_mode_override = CURSOR_UNDEFINED; + } + DrawGlobalAnimationsExt(drawing_target, drawing_stage); if (drawing_stage == DRAW_GLOBAL_ANIM_STAGE_2) + { ResetGlobalAnim_Clicked(); + } + + if (gfx.cursor_mode_override != last_cursor_mode_override) + SetMouseCursor(gfx.cursor_mode); } static boolean SetGlobalAnimPart_Viewport(struct GlobalAnimPartControlInfo *part) @@ -856,6 +869,8 @@ static boolean SetGlobalAnimPart_Viewport(struct GlobalAnimPartControlInfo *part viewport_height = part->graphic_info.height; part->drawing_stage = DRAW_GLOBAL_ANIM_STAGE_2; + + gfx.cursor_mode_override = CURSOR_NONE; } else if (part->control_info.class == get_hash_from_key("door_1")) { @@ -1185,6 +1200,9 @@ static void HandleGlobalAnimEvent(struct GlobalAnimPartControlInfo *part, static int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, int state) { + if (handle_click && !part->clicked) + return state; + struct GlobalAnimControlInfo *ctrl = &global_anim_ctrl[part->mode_nr]; struct GlobalAnimMainControlInfo *anim = &ctrl->anim[part->anim_nr]; struct GraphicInfo *g = &part->graphic_info; @@ -1815,6 +1833,15 @@ static boolean InitGlobalAnim_Clicked(int mx, int my, int clicked_event) } } + if (anything_clicked) + { + handle_click = TRUE; + + HandleGlobalAnim(ANIM_CONTINUE, game_status); + + handle_click = FALSE; + } + return (anything_clicked || any_event_action); }