projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added drawing global animations below and above masked screen border
[rocksndiamonds.git]
/
src
/
tools.c
diff --git
a/src/tools.c
b/src/tools.c
index 4d8222e023cf196310b65e0a25d3fba33b84814c..6a1306e45e903f9238a6526b4a6a86f68bcc1ce2 100644
(file)
--- a/
src/tools.c
+++ b/
src/tools.c
@@
-173,6
+173,9
@@
static int el_act2crm(int, int);
static struct GadgetInfo *tool_gadget[NUM_TOOL_BUTTONS];
static int request_gadget_id = -1;
static struct GadgetInfo *tool_gadget[NUM_TOOL_BUTTONS];
static int request_gadget_id = -1;
+static unsigned int sync_frame_delay = 0;
+static unsigned int sync_frame_delay_value = GAME_FRAME_DELAY;
+
static char *print_if_not_empty(int element)
{
static char *s = NULL;
static char *print_if_not_empty(int element)
{
static char *s = NULL;
@@
-284,50
+287,63
@@
void RedrawPlayfield()
gfx.sx, gfx.sy);
}
gfx.sx, gfx.sy);
}
-void DrawMaskedBorder_Rect(int x, int y, int width, int height)
+static void DrawMaskedBorderExt_Rect(int x, int y, int width, int height,
+ boolean blit_to_screen)
{
Bitmap *bitmap = getGlobalBorderBitmapFromGameStatus();
{
Bitmap *bitmap = getGlobalBorderBitmapFromGameStatus();
- BlitBitmapMasked(bitmap, backbuffer, x, y, width, height, x, y);
+ if (blit_to_screen)
+ BlitToScreenMasked(bitmap, x, y, width, height, x, y);
+ else
+ BlitBitmapMasked(bitmap, backbuffer, x, y, width, height, x, y);
}
}
-
void DrawMaskedBorder_FIELD(
)
+
static void DrawMaskedBorderExt_FIELD(boolean blit_to_screen
)
{
if (global.border_status >= GAME_MODE_TITLE &&
global.border_status <= GAME_MODE_PLAYING &&
border.draw_masked[global.border_status])
{
if (global.border_status >= GAME_MODE_TITLE &&
global.border_status <= GAME_MODE_PLAYING &&
border.draw_masked[global.border_status])
- DrawMaskedBorder_Rect(REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE);
+ DrawMaskedBorderExt_Rect(REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE,
+ blit_to_screen);
}
}
-
void DrawMaskedBorder_DOOR_1(
)
+
static void DrawMaskedBorderExt_DOOR_1(boolean blit_to_screen
)
{
{
+ // only draw border over closed doors when drawing to backbuffer
+ if (!blit_to_screen && (GetDoorState() & DOOR_OPEN_1))
+ return;
+
if (border.draw_masked[GFX_SPECIAL_ARG_DOOR] &&
(global.border_status != GAME_MODE_EDITOR ||
border.draw_masked[GFX_SPECIAL_ARG_EDITOR]))
if (border.draw_masked[GFX_SPECIAL_ARG_DOOR] &&
(global.border_status != GAME_MODE_EDITOR ||
border.draw_masked[GFX_SPECIAL_ARG_EDITOR]))
- DrawMaskedBorder
_Rect(DX, DY, DXSIZE, DYSIZE
);
+ DrawMaskedBorder
Ext_Rect(DX, DY, DXSIZE, DYSIZE, blit_to_screen
);
}
}
-
void DrawMaskedBorder_DOOR_2(
)
+
static void DrawMaskedBorderExt_DOOR_2(boolean blit_to_screen
)
{
{
+ // only draw border over closed doors when drawing to backbuffer
+ if (!blit_to_screen && (GetDoorState() & DOOR_OPEN_2))
+ return;
+
if (border.draw_masked[GFX_SPECIAL_ARG_DOOR] &&
global.border_status != GAME_MODE_EDITOR)
if (border.draw_masked[GFX_SPECIAL_ARG_DOOR] &&
global.border_status != GAME_MODE_EDITOR)
- DrawMaskedBorder
_Rect(VX, VY, VXSIZE, VYSIZE
);
+ DrawMaskedBorder
Ext_Rect(VX, VY, VXSIZE, VYSIZE, blit_to_screen
);
}
}
-
void DrawMaskedBorder_DOOR_3(
)
+
static void DrawMaskedBorderExt_DOOR_3(boolean blit_to_screen
)
{
/* currently not available */
}
{
/* currently not available */
}
-
void DrawMaskedBorder_ALL(
)
+
static void DrawMaskedBorderExt_ALL(boolean blit_to_screen
)
{
{
- DrawMaskedBorder
_FIELD(
);
- DrawMaskedBorder
_DOOR_1(
);
- DrawMaskedBorder
_DOOR_2(
);
- DrawMaskedBorder
_DOOR_3(
);
+ DrawMaskedBorder
Ext_FIELD(blit_to_screen
);
+ DrawMaskedBorder
Ext_DOOR_1(blit_to_screen
);
+ DrawMaskedBorder
Ext_DOOR_2(blit_to_screen
);
+ DrawMaskedBorder
Ext_DOOR_3(blit_to_screen
);
}
}
-
void DrawMaskedBorder(int redraw_mask
)
+
static void DrawMaskedBorderExt(int redraw_mask, boolean blit_to_screen
)
{
/* never draw masked screen borders on borderless screens */
if (game_status == GAME_MODE_LOADING ||
{
/* never draw masked screen borders on borderless screens */
if (game_status == GAME_MODE_LOADING ||
@@
-335,20
+351,35
@@
void DrawMaskedBorder(int redraw_mask)
return;
if (redraw_mask & REDRAW_ALL)
return;
if (redraw_mask & REDRAW_ALL)
- DrawMaskedBorder
_ALL(
);
+ DrawMaskedBorder
Ext_ALL(blit_to_screen
);
else
{
if (redraw_mask & REDRAW_FIELD)
else
{
if (redraw_mask & REDRAW_FIELD)
- DrawMaskedBorder
_FIELD(
);
+ DrawMaskedBorder
Ext_FIELD(blit_to_screen
);
if (redraw_mask & REDRAW_DOOR_1)
if (redraw_mask & REDRAW_DOOR_1)
- DrawMaskedBorder
_DOOR_1(
);
+ DrawMaskedBorder
Ext_DOOR_1(blit_to_screen
);
if (redraw_mask & REDRAW_DOOR_2)
if (redraw_mask & REDRAW_DOOR_2)
- DrawMaskedBorder
_DOOR_2(
);
+ DrawMaskedBorder
Ext_DOOR_2(blit_to_screen
);
if (redraw_mask & REDRAW_DOOR_3)
if (redraw_mask & REDRAW_DOOR_3)
- DrawMaskedBorder
_DOOR_3(
);
+ DrawMaskedBorder
Ext_DOOR_3(blit_to_screen
);
}
}
}
}
+void DrawMaskedBorder_FIELD()
+{
+ DrawMaskedBorderExt_FIELD(FALSE);
+}
+
+void DrawMaskedBorder(int redraw_mask)
+{
+ DrawMaskedBorderExt(redraw_mask, FALSE);
+}
+
+void DrawMaskedBorderToScreen(int redraw_mask)
+{
+ DrawMaskedBorderExt(redraw_mask, TRUE);
+}
+
void BlitScreenToBitmap_RND(Bitmap *target_bitmap)
{
int fx = FX, fy = FY;
void BlitScreenToBitmap_RND(Bitmap *target_bitmap)
{
int fx = FX, fy = FY;
@@
-436,8
+467,12
@@
void BackToFront()
if (redraw_mask == REDRAW_NONE)
return;
if (redraw_mask == REDRAW_NONE)
return;
+#if 1
+ // masked border now drawn immediately when blitting backbuffer to window
+#else
// draw masked border to all viewports, if defined
DrawMaskedBorder(redraw_mask);
// draw masked border to all viewports, if defined
DrawMaskedBorder(redraw_mask);
+#endif
// draw frames per second (only if debug mode is enabled)
if (redraw_mask & REDRAW_FPS)
// draw frames per second (only if debug mode is enabled)
if (redraw_mask & REDRAW_FPS)
@@
-595,6
+630,10
@@
static void FadeExt(int fade_mask, int fade_mode, int fade_type)
void FadeIn(int fade_mask)
{
void FadeIn(int fade_mask)
{
+#if 1
+ DrawMaskedBorder(REDRAW_ALL);
+#endif
+
if (fading.fade_mode & FADE_TYPE_TRANSFORM)
FadeExt(fade_mask, fading.fade_mode, FADE_TYPE_FADE_IN);
else
if (fading.fade_mode & FADE_TYPE_TRANSFORM)
FadeExt(fade_mask, fading.fade_mode, FADE_TYPE_FADE_IN);
else
@@
-608,6
+647,10
@@
void FadeIn(int fade_mask)
void FadeOut(int fade_mask)
{
void FadeOut(int fade_mask)
{
+#if 0
+ DrawMaskedBorder(REDRAW_ALL);
+#endif
+
if (fading.fade_mode & FADE_TYPE_TRANSFORM)
FadeExt(fade_mask, fading.fade_mode, FADE_TYPE_FADE_OUT);
else
if (fading.fade_mode & FADE_TYPE_TRANSFORM)
FadeExt(fade_mask, fading.fade_mode, FADE_TYPE_FADE_OUT);
else
@@
-3396,8
+3439,7
@@
void WaitForEventToContinue()
DoAnimation();
DoAnimation();
- /* don't eat all CPU time */
- Delay(10);
+ WaitUntilDelayReached(&sync_frame_delay, sync_frame_delay_value);
}
}
}
}
@@
-3568,12
+3610,11
@@
static int RequestHandleEvents(unsigned int req_state)
else
{
DoAnimation();
else
{
DoAnimation();
-
- if (!PendingEvent()) /* delay only if no pending events */
- Delay(10);
}
BackToFront();
}
BackToFront();
+
+ WaitUntilDelayReached(&sync_frame_delay, sync_frame_delay_value);
}
return result;
}
return result;
@@
-4437,6
+4478,10
@@
unsigned int MoveDoor(unsigned int door_state)
if (door_state & DOOR_ACTION_2)
door2 = door_state & DOOR_ACTION_2;
if (door_state & DOOR_ACTION_2)
door2 = door_state & DOOR_ACTION_2;
+ // draw masked border over door area
+ DrawMaskedBorder(REDRAW_DOOR_1);
+ DrawMaskedBorder(REDRAW_DOOR_2);
+
return (door1 | door2);
}
return (door1 | door2);
}
@@
-8329,6
+8374,7
@@
void ChangeViewportPropertiesIfNeeded()
// printf("::: init_video_buffer\n");
InitVideoBuffer(WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH, setup.fullscreen);
// printf("::: init_video_buffer\n");
InitVideoBuffer(WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH, setup.fullscreen);
+ InitImageTextures();
}
if (init_gadgets_and_toons)
}
if (init_gadgets_and_toons)