projects
/
rocksndiamonds.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
7028714
)
added functions for masked drawing of sized elements
author
Holger Schemel
<info@artsoft.org>
Tue, 7 Mar 2017 20:16:53 +0000
(21:16 +0100)
committer
Holger Schemel
<info@artsoft.org>
Fri, 23 Mar 2018 22:21:10 +0000
(23:21 +0100)
src/tools.c
patch
|
blob
|
history
src/tools.h
patch
|
blob
|
history
diff --git
a/src/tools.c
b/src/tools.c
index a51f2f690e8909ac8d327b7dda93d2b480b06869..bfaad2acdd577f844c51428332857eed3b0a9b30 100644
(file)
--- a/
src/tools.c
+++ b/
src/tools.c
@@
-1635,6
+1635,14
@@
void DrawSizedGraphic(int x, int y, int graphic, int frame, int tilesize)
MarkTileDirty(x / tilesize, y / tilesize);
}
MarkTileDirty(x / tilesize, y / tilesize);
}
+void DrawSizedGraphicThruMask(int x, int y, int graphic, int frame,
+ int tilesize)
+{
+ DrawSizedGraphicThruMaskExt(drawto, SX + x * tilesize, SY + y * tilesize,
+ graphic, frame, tilesize);
+ MarkTileDirty(x / tilesize, y / tilesize);
+}
+
void DrawSizedGraphicExt(DrawBuffer *d, int x, int y, int graphic, int frame,
int tilesize)
{
void DrawSizedGraphicExt(DrawBuffer *d, int x, int y, int graphic, int frame,
int tilesize)
{
@@
-1645,6
+1653,16
@@
void DrawSizedGraphicExt(DrawBuffer *d, int x, int y, int graphic, int frame,
BlitBitmap(src_bitmap, d, src_x, src_y, tilesize, tilesize, x, y);
}
BlitBitmap(src_bitmap, d, src_x, src_y, tilesize, tilesize, x, y);
}
+void DrawSizedGraphicThruMaskExt(DrawBuffer *d, int x, int y, int graphic,
+ int frame, int tilesize)
+{
+ Bitmap *src_bitmap;
+ int src_x, src_y;
+
+ getSizedGraphicSource(graphic, frame, tilesize, &src_bitmap, &src_x, &src_y);
+ BlitBitmapMasked(src_bitmap, d, src_x, src_y, tilesize, tilesize, x, y);
+}
+
void DrawMiniGraphic(int x, int y, int graphic)
{
DrawMiniGraphicExt(drawto, SX + x * MINI_TILEX,SY + y * MINI_TILEY, graphic);
void DrawMiniGraphic(int x, int y, int graphic)
{
DrawMiniGraphicExt(drawto, SX + x * MINI_TILEX,SY + y * MINI_TILEY, graphic);
@@
-2456,8
+2474,8
@@
void DrawLevelField(int x, int y)
}
}
}
}
-
void DrawSizedWall
_MM(int dst_x, int dst_y, int element, int tilesize,
-
int (*el2img_function)(int)
)
+
static void DrawSizedWallExt
_MM(int dst_x, int dst_y, int element, int tilesize,
+
int (*el2img_function)(int), boolean masked
)
{
int element_base = map_mm_wall_element(element);
int element_bits = (IS_DF_WALL(element) ?
{
int element_base = map_mm_wall_element(element);
int element_bits = (IS_DF_WALL(element) ?
@@
-2477,29
+2495,58
@@
void DrawSizedWall_MM(int dst_x, int dst_y, int element, int tilesize,
int dst_draw_y = dst_y + (i / 2) * tilesize_draw;
if (element_bits & (1 << i))
int dst_draw_y = dst_y + (i / 2) * tilesize_draw;
if (element_bits & (1 << i))
- BlitBitmap(src_bitmap, drawto, src_x, src_y, tilesize_draw, tilesize_draw,
- dst_draw_x, dst_draw_y);
+ {
+ if (masked)
+ BlitBitmapMasked(src_bitmap, drawto, src_x, src_y,
+ tilesize_draw, tilesize_draw, dst_draw_x, dst_draw_y);
+ else
+ BlitBitmap(src_bitmap, drawto, src_x, src_y,
+ tilesize_draw, tilesize_draw, dst_draw_x, dst_draw_y);
+ }
else
else
- ClearRectangle(drawto, dst_draw_x, dst_draw_y,
- tilesize_draw, tilesize_draw);
+ {
+ if (!masked)
+ ClearRectangle(drawto, dst_draw_x, dst_draw_y,
+ tilesize_draw, tilesize_draw);
+ }
}
}
}
}
-void DrawSizedElement(int x, int y, int element, int tilesize)
+void DrawSizedWall_MM(int dst_x, int dst_y, int element, int tilesize,
+ int (*el2img_function)(int))
+{
+ DrawSizedWallExt_MM(dst_x, dst_y, element, tilesize, el2img_function, FALSE);
+}
+
+void DrawSizedElementExt(int x, int y, int element, int tilesize,
+ boolean masked)
{
if (IS_MM_WALL(element))
{
{
if (IS_MM_WALL(element))
{
- DrawSizedWall_MM(SX + x * tilesize, SY + y * tilesize,
-
element, tilesize, el2edimg
);
+ DrawSizedWall
Ext
_MM(SX + x * tilesize, SY + y * tilesize,
+
element, tilesize, el2edimg, masked
);
}
else
{
int graphic = el2edimg(element);
}
else
{
int graphic = el2edimg(element);
- DrawSizedGraphic(x, y, graphic, 0, tilesize);
+ if (masked)
+ DrawSizedGraphicThruMask(x, y, graphic, 0, tilesize);
+ else
+ DrawSizedGraphic(x, y, graphic, 0, tilesize);
}
}
}
}
+void DrawSizedElement(int x, int y, int element, int tilesize)
+{
+ DrawSizedElementExt(x, y, element, tilesize, FALSE);
+}
+
+void DrawSizedElementThruMask(int x, int y, int element, int tilesize)
+{
+ DrawSizedElementExt(x, y, element, tilesize, TRUE);
+}
+
void DrawMiniElement(int x, int y, int element)
{
int graphic;
void DrawMiniElement(int x, int y, int element)
{
int graphic;
diff --git
a/src/tools.h
b/src/tools.h
index 6deb4057b5e5924b2ab65b0167d1479c24601bbf..4f26f72ef8f8e8aa22b4656a531d267539022d03 100644
(file)
--- a/
src/tools.h
+++ b/
src/tools.h
@@
-157,6
+157,8
@@
void DrawFixedGraphicThruMaskExt(DrawBuffer *, int, int, int, int);
void DrawSizedGraphic(int, int, int, int, int);
void DrawSizedGraphicExt(DrawBuffer *, int, int, int, int, int);
void DrawSizedGraphic(int, int, int, int, int);
void DrawSizedGraphicExt(DrawBuffer *, int, int, int, int, int);
+void DrawSizedGraphicThruMask(int, int, int, int, int);
+void DrawSizedGraphicThruMaskExt(DrawBuffer *, int, int, int, int, int);
void DrawMiniGraphic(int, int, int);
void DrawMiniGraphicExt(DrawBuffer *, int, int, int);
void DrawMiniGraphic(int, int, int);
void DrawMiniGraphicExt(DrawBuffer *, int, int, int);
@@
-177,6
+179,7
@@
void DrawScreenField(int, int);
void DrawLevelField(int, int);
void DrawSizedElement(int, int, int, int);
void DrawLevelField(int, int);
void DrawSizedElement(int, int, int, int);
+void DrawSizedElementThruMask(int, int, int, int);
void DrawSizedElementOrWall(int, int, int, int, int);
void DrawMiniElement(int, int, int);
void DrawSizedElementOrWall(int, int, int, int, int);
void DrawMiniElement(int, int, int);