Files
openmine/gameinput.c

148 lines
3.6 KiB
C

#include <SDL/SDL.h>
#include "gamedefs.h"
#include "structs.h"
#include "main.h"
void
ingame_input (struct game *g)
{
Uint8 *keys;
SDL_Event event;
while(SDL_PollEvent (&event))
{
if (event.type == SDL_MOUSEBUTTONDOWN)
{
/* Mouse button 1 ---> check for mine */
if (event.button.button == 1)
ProcessClick (g, event.button.x,
SCREEN_H - event.button.y, 0);
/* Mouse button 3 ---> toggle flag on selected cube */
if (event.button.button == 3)
ProcessClick (g, event.button.x,
SCREEN_H - event.button.y, 1);
/* Mouse wheel (Don't know if it works on M$ Win ) ---> zoom in */
if (event.button.button == 4)
g->display->zoom += 2;
/* zoom out */
if (event.button.button == 5)
g->display->zoom -= 2;
}
if (event.type == SDL_QUIT)
{
g->status = QUIT;
}
if (event.type == SDL_KEYDOWN)
{
switch (event.key.keysym.sym)
{
case SDLK_ESCAPE:
g->status = QUIT;
break;
case SDLK_n:
g->status = NEWGAME;
break;
case SDLK_LCTRL:
case SDLK_RCTRL:
g->display->mod_status = CTRL;
SDL_ShowCursor (SDL_DISABLE);
SDL_WM_GrabInput (SDL_GRAB_ON);
break;
case SDLK_LSHIFT:
case SDLK_RSHIFT:
g->display->mod_status = SHIFT;
SDL_ShowCursor (SDL_DISABLE);
SDL_WM_GrabInput (SDL_GRAB_ON);
break;
case SDLK_RALT:
case SDLK_LALT:
g->display->mod_status = ALT;
SDL_ShowCursor (SDL_DISABLE);
SDL_WM_GrabInput (SDL_GRAB_ON);
break;
default:
;
}
}
if (event.type == SDL_KEYUP)
{
switch (event.key.keysym.sym)
{
case SDLK_LCTRL:
case SDLK_RCTRL:
g->display->mod_status = NONE;
SDL_ShowCursor (SDL_ENABLE);
SDL_WM_GrabInput (SDL_GRAB_OFF);
break;
case SDLK_LSHIFT:
case SDLK_RSHIFT:
g->display->mod_status = NONE;
SDL_ShowCursor (SDL_ENABLE);
SDL_WM_GrabInput (SDL_GRAB_OFF);
break;
case SDLK_RALT:
case SDLK_LALT:
g->display->mod_status = NONE;
SDL_ShowCursor (SDL_ENABLE);
SDL_WM_GrabInput (SDL_GRAB_OFF);
break;
default:
;
}
}
if (event.type == SDL_MOUSEMOTION)
{
switch (g->display->mod_status)
{
case CTRL:
g->display->tilt_y += (float) event.motion.xrel / 2.0f;
g->display->up += (float) event.motion.yrel / 2.0f;
break;
case SHIFT:
g->display->zoom -= (float) event.motion.yrel / 2.0f;
break;
case ALT:
g->display->side -= (float) event.motion.xrel / 10.0f;
break;
default:
;
}
}
}
keys = SDL_GetKeyState (NULL);
if (keys[SDLK_a] == SDL_PRESSED)
{
g->display->tilt_y += 0.5f;
if (g->display->tilt_y >= 360.0f)
g->display->tilt_y = 0.5f;
}
if (keys[SDLK_d] == SDL_PRESSED)
g->display->tilt_y += -0.5f;
if (keys[SDLK_z] == SDL_PRESSED)
if (g->display->zoom <= 40.0)
g->display->zoom += 0.25f;
if (keys[SDLK_x] == SDL_PRESSED)
if (g->display->zoom >= -20.0)
g->display->zoom += -0.25f;
if (keys[SDLK_w] == SDL_PRESSED)
if (g->display->up >= -45.0)
g->display->up += -0.25f;
if (keys[SDLK_s] == SDL_PRESSED)
if (g->display->up <= 45.0)
g->display->up += 0.25f;
if (keys[SDLK_q] == SDL_PRESSED)
if (g->display->side <= 10.0)
g->display->side += 0.025;
if (keys[SDLK_e] == SDL_PRESSED)
if (g->display->side >= -10.0)
g->display->side -= 0.025;
}
/* if (event.type == SDL_KEYDOWN)
switch (event.key.keysym.sym)
{
case SDLK_y:
case SDLK_ESCAPE:
a = 1;
default:
jugando = 0;
*/