93 lines
3.3 KiB
C++
93 lines
3.3 KiB
C++
|
|
|
|
|
|
$SP,"<1>",1$
|
|
|
|
|
|
/*
|
|
This CSprite was converted to a bitmap
|
|
in the <CTRL-R> menu. If you don't convert
|
|
to a bitmap, you will probably
|
|
register collisions as the pieces
|
|
are drawn on top of each other. You
|
|
can work with a nonzero val if
|
|
you choose or convert to a bitmap.
|
|
*/
|
|
|
|
|
|
U0 DrawShapes(CDC *dc,I64 x,I64 y,I64 rop)
|
|
{
|
|
if (ip_lb)
|
|
dc->bkcolor=RED;
|
|
else
|
|
dc->bkcolor=BLACK;
|
|
dc->color=rop+RED;
|
|
GrRect (dc,x-10,y-30-10,20,20);
|
|
GrRect (dc,x-10-30,y-10,20,20);
|
|
CSpritePlot3(dc,x,y,0,$IB,"<1>",1$); //This just shows it works with CSprite
|
|
dc->color=rop+BLACK;
|
|
GrRect (dc,x-10,y+30-10,20,20);
|
|
GrRect (dc,x-10+30,y-10,20,20);
|
|
}
|
|
|
|
|
|
U0 PixelCollision()
|
|
{
|
|
CDC *dc=DCAlias;
|
|
|
|
SettingsPush; //See $LK,"SettingsPush","MN:SettingsPush"$
|
|
WordStat;
|
|
WinMax;
|
|
DocClear;
|
|
while (!ScanChar) {
|
|
dc->color=RED;
|
|
GrRect(dc,Fs->win_pixel_width-200,Fs->win_pixel_height-200,200,200);
|
|
DrawShapes(dc,Fs->win_pixel_width>>1,Fs->win_pixel_height>>1,ROP_EQU);
|
|
|
|
dc->collision_cnt=0;
|
|
DrawShapes(dc,ipx-Fs->win_pixel_left-Fs->win_scroll_x,ipy-Fs->win_pixel_top-Fs->win_scroll_y,ROP_COLLISION);
|
|
|
|
if (ip_lb) {
|
|
dc->color=ROP_EQU+BLACK;
|
|
GrPrintF(dc,0,0*FONT_HEIGHT,"Non-RED background pixels overwritten.");
|
|
GrPrintF(dc,0,2*FONT_HEIGHT,"Collisions:%d",dc->collision_cnt);
|
|
dc->color=ROP_EQU+RED;
|
|
GrPutS(dc,0,3*FONT_HEIGHT,"BKCOLOR=RED");
|
|
} else {
|
|
dc->color=ROP_EQU+BLACK;
|
|
GrPutS(dc,0,0*FONT_HEIGHT,"Non-BLACK background pixels overwritten.");
|
|
GrPutS(dc,0,1*FONT_HEIGHT,"(Unchanged pixels of gr_dc2 are 'BLACK'.)");
|
|
GrPrintF(dc,0,2*FONT_HEIGHT,"Collisions:%d",dc->collision_cnt);
|
|
dc->color=ROP_EQU+BLACK;
|
|
GrPutS(dc,0,3*FONT_HEIGHT,"BKCOLOR=BLACK");
|
|
}
|
|
if (Blink) {
|
|
dc->color=ROP_EQU+BLACK;
|
|
GrPutS(dc,0,5*FONT_HEIGHT,"Hold Left Mouse");
|
|
}
|
|
|
|
DrawShapes(dc,ipx-Fs->win_pixel_left-Fs->win_scroll_x,ipy-Fs->win_pixel_top-Fs->win_scroll_y,ROP_EQU);
|
|
|
|
//This waits for the Window Mgr task
|
|
//to update the screen.
|
|
WinMgrSync;
|
|
|
|
//This will not flicker as long as it occurs just
|
|
//after a acreen update $LK,"WinMgrSync","MN:WinMgrSync"$.
|
|
DCFill(dc);
|
|
|
|
}
|
|
SettingsPop;
|
|
|
|
DCDel(dc);
|
|
}
|
|
|
|
/* If you are dealing with many objects,
|
|
create a bitmap just for checking collisions
|
|
using $LK,"DCNew","MN:DCNew"$(). You probably want to check
|
|
only when they are near each other or it will
|
|
take too long. See $LK,"::/SparrowOS/Demo/GameStarters/Rocks.CPP.Z","FI:::/SparrowOS/Demo/GameStarters/Rocks.CPP.Z"$.
|
|
*/
|
|
|
|
PixelCollision;
|
|
|