templeos-info/public/Wb/Demo/Graphics/Pick.HC

109 lines
2.3 KiB
HolyC
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

$SP,"<1>",BI=1$
#define APPLES_NUM 128
I64 x[APPLES_NUM],y[APPLES_NUM],
cur_apple,cur_dist;
Bool trigger;
U0 DrawIt(CTask *,CDC *dc)
{
I64 i,best_dist=I64_MAX,best_apple=0;
dc->flags|=DCF_LOCATE_NEAREST;
dc->cur_x=ms.pos.x;
dc->cur_y=ms.pos.y;
dc->cur_z=0;
for (i=0;i<APPLES_NUM;i++) {
Sprite3(dc,x[i],y[i],0,$IB,"<1>",BI=1$);
if (dc->nearest_dist<=best_dist) {
//Distance to nearest pix, squared
//$LK,"Sqrt",A="MN:Sqrt"$() is expensive so we work with distance squared.
best_dist=dc->nearest_dist;
best_apple=i;
}
}
if (trigger) {
cur_apple=best_apple;
cur_dist=best_dist;
trigger=FALSE;
}
GrPrint(dc,FONT_WIDTH,FONT_HEIGHT,"Dist Squared:%d",cur_dist);
}
U0 Pick()
{
I64 i,msg_code,arg1,arg2,delta_x,delta_y;
for (i=0;i<APPLES_NUM;i++) {
x[i]=RandU16%GR_WIDTH;
y[i]=RandU16%(GR_HEIGHT-FONT_HEIGHT*3)+FONT_HEIGHT*3;
}
SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$
AutoComplete;
DocCursor;
DocClear;
trigger=FALSE;
cur_apple=cur_dist=0;
Fs->draw_it=&DrawIt;
Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER;
try {
while (TRUE) {
if (GetMsg(&arg1,&arg2,1<<MSG_KEY_DOWN|1<<MSG_MS_L_DOWN)==MSG_KEY_DOWN)
goto pi_done;
//Wait for window mgr to call DrawIt()
trigger=TRUE;
do Refresh;
while (trigger);
//Use scrn coordinates, not window (arg1,arg2)
//$LK,"ms.pos.x",A="MN:ms"$ and $LK,"ms.pos.y",A="MN:ms"$ are global vars updated
//updated by the window mgr to hold the
//scrn coordinates of the mouse.
delta_x=x[cur_apple]-ms.pos.x;
delta_y=y[cur_apple]-ms.pos.y;
do {
msg_code=GetMsg(&arg1,&arg2,
1<<MSG_KEY_DOWN|1<<MSG_MS_MOVE|1<<MSG_MS_L_UP);
if (msg_code==MSG_KEY_DOWN)
goto pi_done;
x[cur_apple]=ms.pos.x+delta_x;
y[cur_apple]=ms.pos.y+delta_y;
} while (msg_code!=MSG_MS_L_UP);
}
pi_done:
GetMsg(,,1<<MSG_KEY_UP);
} catch
PutExcept;
SettingsPop;
}
Pick;
q
 
 


 




 
 
 





 

  
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>