ctrl.h (1627B)
1 /* ctrl.h - interaccion con el tablero, comun a TUI, GUI y PicoCalc. 2 * 3 * El frontend le pasa teclas abstractas o clicks ya resueltos a una casilla, y 4 * ctrl devuelve acciones listas para mandar a la autoridad. El frontend dibuja 5 * a partir de Game + Ctrl. */ 6 #ifndef CTRL_H 7 #define CTRL_H 8 9 #include "chess.h" 10 #include "input.h" 11 12 enum CtrlMode { CM_BOARD, CM_PROMO, CM_ENTRY }; 13 14 /* zonas clickeables del tablero */ 15 enum { HIT_SQUARE = 1, HIT_PROMO = 2 }; 16 17 typedef struct { 18 const Game *g; 19 uint8_t local; /* bit por color que se juega desde esta pantalla */ 20 bool flipped; /* negras abajo */ 21 int mode; 22 int cursor; /* casilla bajo el cursor */ 23 int sel; /* casilla elegida o -1 */ 24 Move targets[32]; /* jugadas legales desde sel */ 25 int ntargets; 26 Move promo[4]; /* en CM_PROMO: las 4 coronaciones posibles (Q R B N) */ 27 int promo_cur; 28 char entry[16]; /* en CM_ENTRY: jugada que se esta escribiendo */ 29 char msg[96]; 30 bool msg_err; 31 } Ctrl; 32 33 void ctrl_init(Ctrl *c, uint8_t local, bool flipped); 34 void ctrl_sync(Ctrl *c, const Game *g); /* despues de cada accion */ 35 bool ctrl_key(Ctrl *c, int key, Act *out); /* true: hay accion para mandar */ 36 bool ctrl_click(Ctrl *c, int kind, int id, Act *out); 37 bool ctrl_my_turn(const Ctrl *c); 38 bool ctrl_is_target(const Ctrl *c, int sq); 39 int ctrl_last_move(const Ctrl *c, int *from, int *to); /* 1 si hay ultima jugada */ 40 const char *ctrl_prompt(const Ctrl *c); 41 void ctrl_error(Ctrl *c, int err); 42 43 #endif