From: John Tsiombikas Date: Fri, 7 Oct 2022 18:00:14 +0000 (+0300) Subject: mouse controls on pc version X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=gbajam22;a=commitdiff_plain;h=79c636931d1f9bf844196e91be171b17bbe9c04f mouse controls on pc version --- diff --git a/src/game.h b/src/game.h index 66928f8..858144b 100644 --- a/src/game.h +++ b/src/game.h @@ -1,6 +1,8 @@ #ifndef GAME_H_ #define GAME_H_ +#include + struct screen { char *name; int (*start)(void); @@ -15,4 +17,8 @@ int init_screens(void); int change_screen(struct screen *scr); struct screen *find_screen(const char *name); +#ifndef BUILD_GBA +int32_t view_dtheta, view_dphi, view_zoom; +#endif + #endif /* GAME_H_ */ diff --git a/src/gamescr.c b/src/gamescr.c index 7c027dc..bad3bec 100644 --- a/src/gamescr.c +++ b/src/gamescr.c @@ -143,7 +143,9 @@ static void draw(void) struct cell *cell; xgl_load_identity(); - /*xgl_translate(0, 0, 0x100000);*/ +#ifndef BUILD_GBA + xgl_translate(0, 0, view_zoom); +#endif xgl_rotate_x(player.phi); xgl_rotate_y(player.theta); xgl_translate(player.x, 0, player.y); diff --git a/src/pc/main.c b/src/pc/main.c index df6a3f7..cf6ffec 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); @@ -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--; diff --git a/src/player.c b/src/player.c index 5a39077..6c97e38 100644 --- a/src/player.c +++ b/src/player.c @@ -1,4 +1,5 @@ #include +#include "game.h" #include "player.h" #include "level.h" #include "gbaregs.h" @@ -15,6 +16,17 @@ void init_player(struct player *p, struct level *lvl) void player_input(struct player *p, uint16_t bnstate) { +#ifndef BUILD_GBA + p->theta = (p->theta + view_dtheta) % X_2PI; + if(p->theta < 0) p->theta += X_2PI; + p->phi += view_dphi; + if(p->phi > X_HPI) p->phi = X_HPI; + if(p->phi < -X_HPI) p->phi = -X_HPI; + + view_dtheta = 0; + view_dphi = 0; +#endif + if(bnstate & KEY_UP) { p->phi += 0x800; if(p->phi > X_HPI) p->phi = X_HPI;