X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fpc%2Fmain.c;h=5f54f359177d5a258cbc2267da230a21a15a561c;hb=d98ff7c2912943650e17a4c6caf94998f0b0640b;hp=df6a3f7cb748c6519574e2f8cbb0aa6b870a4bdb;hpb=b0f9c6ecc15c2d4b5df77a7a963b742a6352ee1a;p=gbajam22 diff --git a/src/pc/main.c b/src/pc/main.c index df6a3f7..5f54f35 100644 --- a/src/pc/main.c +++ b/src/pc/main.c @@ -16,7 +16,8 @@ static void keydown(unsigned char key, int x, int y); static void keyup(unsigned char key, int x, int y); static void skeydown(int key, int x, int y); static void skeyup(int key, int x, int y); -static int translate_special(int skey); +static void mouse(int bn, int st, int x, int y); +static void motion(int x, int y); static unsigned int next_pow2(unsigned int x); static void set_fullscreen(int fs); static void set_vsync(int vsync); @@ -51,7 +52,7 @@ static PROC wgl_swap_interval_ext; int main(int argc, char **argv) { glutInit(&argc, argv); - glutInitWindowSize(800, 600); + glutInitWindowSize(960, 640); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); glutCreateWindow("GBAjam22 PC build"); @@ -62,8 +63,8 @@ int main(int argc, char **argv) glutKeyboardUpFunc(keyup); glutSpecialFunc(skeydown); glutSpecialUpFunc(skeyup); - - glutSetCursor(GLUT_CURSOR_NONE); + glutMouseFunc(mouse); + glutMotionFunc(motion); glEnable(GL_TEXTURE_2D); glEnable(GL_CULL_FACE); @@ -129,9 +130,9 @@ uint16_t get_input(void) #define PACK_RGB32(r, g, b) \ ((((r) & 0xff) << 16) | (((g) & 0xff) << 8) | ((b) & 0xff) | 0xff000000) -#define UNPACK_R16(c) (((c) >> 9) & 0xf8) -#define UNPACK_G16(c) (((c) >> 3) & 0xf8) -#define UNPACK_B16(c) (((c) << 3) & 0xf8) +#define UNPACK_R16(c) (((c) << 3) & 0xf8) +#define UNPACK_G16(c) (((c) >> 2) & 0xf8) +#define UNPACK_B16(c) (((c) >> 7) & 0xf8) void present(int buf) { @@ -269,6 +270,42 @@ static void skeyup(int key, int x, int y) } } +static int mbstate[3]; +static int prev_x, prev_y; + +static void mouse(int bn, int st, int x, int y) +{ + int bidx = bn - GLUT_LEFT_BUTTON; + int press = st == GLUT_DOWN ? 1 : 0; + + if(bidx < 3) { + mbstate[bidx] = press; + } + prev_x = x; + prev_y = y; +} + +static void motion(int x, int y) +{ + int dx, dy; + + dx = x - prev_x; + dy = y - prev_y; + prev_x = x; + prev_y = y; + + if(!(dx | dy)) return; + + if(mbstate[0]) { + view_dtheta -= dx * 0x100; + view_dphi -= dy * 0x100; + } + if(mbstate[2]) { + view_zoom += dy * 0x100; + if(view_zoom < 0) view_zoom = 0; + } +} + static unsigned int next_pow2(unsigned int x) { x--;