148 lines
3.6 KiB
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;
|
|
*/
|