diff options
Diffstat (limited to 'input.c')
-rw-r--r-- | input.c | 42 |
1 files changed, 35 insertions, 7 deletions
@@ -4,10 +4,38 @@ #include"graph.h" #include"input.h" #define SDLBUT(x)SDL_BUTTON(SDL_BUTTON_##x) -InputPoint input_point(V){InputPoint ip;SDL_GetMouseState((S32*)&ip.x,(S32*)&ip.y);ip.y=graph_win_h-ip.y;R ip;} -InputButtons input_button(V){InputButtons ib={0};U32 mb;mb=SDL_GetMouseState(0,0); - Q(SDLBUT(LEFT)&mb, ib.f|=IB_1) - Q(SDLBUT(MIDDLE)&mb, ib.f|=IB_2) - Q(SDLBUT(RIGHT)&mb, ib.f|=IB_3) - Q(SDLBUT(X1)&mb, ib.f|=IB_4) - R ib;} +InputPoint input_point; +InputButtons input_buttons; + +_ U32 map_mouse[][2]={ + {SDLBUT(LEFT), IB_1}, + {SDLBUT(RIGHT), IB_2}, + {SDLBUT(MIDDLE),IB_3}, + {SDLBUT(X1), IB_4}}; + +_ U32 map_keeb[][2]={ + {SDL_SCANCODE_LEFT, IB_L}, + {SDL_SCANCODE_RIGHT, IB_R}, + {SDL_SCANCODE_UP, IB_U}, + {SDL_SCANCODE_DOWN, IB_D}, + {SDL_SCANCODE_SPACE, IB_S}, + {SDL_SCANCODE_Z, IB_Z}, + {SDL_SCANCODE_X, IB_X}, + {SDL_SCANCODE_C, IB_C}}; + +#define ip input_point +#define ib input_buttons +#define mm map_mouse +#define mk map_keeb +V input_update(V){U32 mb,mm_len,mk_len,i,kb_len;IM U8*kb;InputButtons nb={0,0}; + mb=SDL_GetMouseState((S32*)&ip.x,(S32*)&ip.y),ip.y=graph_win_h-ip.y, + kb=SDL_GetKeyboardState((S32*)&kb_len), + mm_len=(SZ mm)/(SZ mm[0]), + mk_len=(SZ mk)/(SZ mk[0]), + i=0;WH(i<mm_len,Q(mm[i][0]&mb, Q(mm[i][1]&(ib.p|ib.h),nb.h|=mm[i][1])OR nb.p|=mm[i][1]);++i) + i=0;WH(i<mk_len,Q(kb[mk[i][0]],Q(mk[i][1]&(ib.p|ib.h),nb.h|=mk[i][1])OR nb.p|=mk[i][1]);++i) + input_buttons=nb;} +#undef mk +#undef mm +#undef ib +#undef ip |