Un jeu de cartes à piper les une dans les autres - retour accueil
git clone git://bebou.netlib.re/pipe-game
Log | Files | Refs | README |
commit 3f87bd214ac24cb173ebf701d71bde92d1891061 parent 15d662febf59dc7bdbf463dbcf5b31b145cced5a Auteurice: Arthur Pons <arthur.pons@unistra.fr> Date: Thu, 30 Jan 2025 15:26:08 +0100 Améliorations diverses au drag and drop Mine de rien c'est du travail de faire ça correctement Ca devrait faire le truc décrit dans le dernier commit Diffstat:
M | interface.c | | | 28 | ++++++++++++++-------------- |
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/interface.c b/interface.c @@ -274,7 +274,8 @@ int main(int argc, char **argv) { tb_init(); tb_set_input_mode(TB_INPUT_ESC | TB_INPUT_MOUSE); struct tb_event ev; - coord prevpos; struct pile *prevcurmenu; + coord prevpos; + struct pile *srcmenu; struct pile *destmenu; char cmd[LIST_SIZE]; char cmdennemy[LIST_SIZE]; char res[LIST_SIZE]; char resennemy[LIST_SIZE]; @@ -379,31 +380,30 @@ int main(int argc, char **argv) { for(int i=0;i<NB_PILES;i++) { if( piles[i]->begin.x < ev.x && ev.x < piles[i]->end.x ) { if(ev.mod==TB_MOD_MOTION) { - selection=true; curmenu=piles[i]; - if(curmenu==piles[HAND] && piles[ARGS]->begin.y<ev.y && ev.y<piles[ARGS]->end.y) - curmenu=piles[ARGS]; - if(curmenu!=prevcurmenu) { - if ( curmenu==prevcurmenu->destleft || curmenu==prevcurmenu->destright ) { + selection=true; destmenu=piles[i]; + if(destmenu==piles[HAND] && piles[ARGS]->begin.y<ev.y && ev.y<piles[ARGS]->end.y) + destmenu=piles[ARGS]; + if(destmenu!=srcmenu && (destmenu==srcmenu->destleft || destmenu==srcmenu->destright) ) { if(ev.x<prevpos.x) - curmenu=mvcardlr(prevcurmenu, piles, selection, LEFT); + curmenu=mvcardlr(srcmenu, piles, selection, LEFT); else if (ev.x>prevpos.x) - curmenu=mvcardlr(prevcurmenu, piles, selection, RIGHT); - } + curmenu=mvcardlr(srcmenu, piles, selection, RIGHT); + srcmenu=curmenu; } else if(ev.y>prevpos.y) curmenu=mvcardup(curmenu,piles,DOWN,selection); else if (ev.y<prevpos.y) curmenu=mvcardup(curmenu,piles,UP,selection); + prevpos.x=ev.x, prevpos.y=ev.y; } else { - if(piles[i]->cardcount>0) { curmenu=piles[i]; } - if(curmenu==piles[HAND] && piles[ARGS]->begin.y < ev.y && ev.y < piles[ARGS]->end.y ) { curmenu=piles[ARGS]; } - curmenu->curline = curmenu==piles[ARGS] ? ev.y-1-piles[HAND]->end.y : min(ev.y-1,curmenu->cardcount-1); + destmenu = piles[i]->cardcount>0 ? piles[i] : curmenu; + if(destmenu==piles[HAND] && piles[ARGS]->begin.y < ev.y && ev.y < piles[ARGS]->end.y ) { destmenu=piles[ARGS]; } + destmenu->curline = destmenu==piles[ARGS] ? ev.y-1-piles[HAND]->end.y : min(ev.y-1,destmenu->cardcount-1); selection=false; + curmenu=destmenu; srcmenu=destmenu; } break; } } - prevpos.x=ev.x, prevpos.y=ev.y; - prevcurmenu=curmenu; break; case 65509: /*MouseRelease*/ selection=false;