#include "misc.h"
-/* values for toon animation */
-#define ANIM_START 0
-#define ANIM_CONTINUE 1
-#define ANIM_STOP 2
-
-
static struct ToonScreenInfo screen_info;
screen_info.frame_delay_value = frame_delay_value;
}
-void DrawAnim(Bitmap *toon_bitmap, GC toon_clip_gc,
- int src_x, int src_y, int width, int height,
+void DrawAnim(Bitmap *toon_bitmap, int src_x, int src_y, int width, int height,
int dest_x, int dest_y, int pad_x, int pad_y)
{
int pad_dest_x = dest_x - pad_x;
/* special method to avoid flickering interference with BackToFront() */
BlitBitmap(backbuffer, screen_info.save_buffer, pad_dest_x, pad_dest_y,
pad_width, pad_height, buffer_x, buffer_y);
- SetClipOrigin(toon_bitmap, toon_clip_gc, dest_x - src_x, dest_y - src_y);
BlitBitmapMasked(toon_bitmap, backbuffer, src_x, src_y, width, height,
dest_x, dest_y);
BlitBitmap(backbuffer, window, pad_dest_x, pad_dest_y, pad_width, pad_height,
BlitBitmap(screen_info.save_buffer, backbuffer, buffer_x, buffer_y,
pad_width, pad_height, pad_dest_x, pad_dest_y);
- FlushDisplay();
+ /* prevent immediate redraw of restored toon area in backbuffer */
+ redraw_mask = REDRAW_NONE;
}
boolean AnimateToon(int toon_nr, boolean restart)
static int dest_x, dest_y;
struct ToonInfo *anim = &screen_info.toons[toon_nr];
Bitmap *anim_bitmap = screen_info.toons[toon_nr].bitmap;
- GC anim_clip_gc = anim_bitmap->stored_clip_gc;
int direction = get_toon_direction(anim->direction);
if (restart)
if (!DelayReached(&anim_delay, anim_delay_value))
{
if (screen_info.redraw_needed_function() && !restart)
- DrawAnim(anim_bitmap, anim_clip_gc,
+ DrawAnim(anim_bitmap,
src_x + cut_x, src_y + cut_y,
width, height,
screen_info.startx + dest_x,
else if (pos_y > screen_info.height - anim->height)
height -= (pos_y - (screen_info.height - anim->height));
- DrawAnim(anim_bitmap, anim_clip_gc,
+ DrawAnim(anim_bitmap,
src_x + cut_x, src_y + cut_y,
width, height,
screen_info.startx + dest_x,
case ANIM_STOP:
if (anim_running)
{
- redraw_mask |= (REDRAW_FIELD | REDRAW_FROM_BACKBUFFER);
+ redraw_mask |= REDRAW_FIELD;
screen_info.update_function();
anim_restart = reset_delay = AnimateToon(toon_nr, anim_restart);
}
-
-void InitAnimation()
-{
- HandleAnimation(ANIM_START);
-}
-
-void StopAnimation()
-{
- HandleAnimation(ANIM_STOP);
-}
-
-void DoAnimation()
-{
- HandleAnimation(ANIM_CONTINUE);
-}