Files
commandergenius/project/jni/application/pachi/src/input.h
2010-10-29 12:45:35 +03:00

468 lines
16 KiB
C

/***************************************************************************
* Pachi el marciano *
* ----------------- *
* (c) Santiago Radeff (coding) *
* (c) Nicolas Radeff (graphics) *
* (c) Peter Hajba (music) *
* *
* T-1000@Bigfoot.com *
****************************************************************************
*******************************************************************
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version *
* 2 of the License, or (at your option) any later version. *
* *
*******************************************************************/
void credits_events()
{
SDL_Event event;
while(SDL_PollEvent(&event))
{
check_joystick_events(&event, joypos);
if(event.type==SDL_KEYDOWN)
if(event.key.keysym.sym==SDLK_ESCAPE || event.key.keysym.sym==SDLK_RETURN || event.key.keysym.sym==SDLK_SPACE)
escape_exit=1;
if(joypos[JOY_BUTTON0])
escape_exit=1;
}
}
void pause_events()
{
SDL_Event event;
while(SDL_PollEvent(&event))
{
if(event.type==SDL_KEYDOWN)
if(event.key.keysym.sym==SDLK_h || event.key.keysym.sym==SDLK_F1)
escape_exit=1;
}
}
void hiscore_events()
{
int n;
SDL_Event event;
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_KEYDOWN:
{
if(event.key.keysym.sym == SDLK_UP)
{
playername[namechar]--;
if(playername[namechar]<='A' || playername[namechar]>='Z')
playername[namechar]='A';
}
else
if(event.key.keysym.sym == SDLK_DOWN)
{
playername[namechar]++;
if(playername[namechar]<='A' || playername[namechar]>='Z')
playername[namechar]='Z';
}
else
if(event.key.keysym.sym == SDLK_RIGHT)
{
if(playername[namechar]<='A' || playername[namechar]>='Z')
playername[namechar]='A';
namechar++;
if(namechar > 9)
namechar=9;
}
else
if(event.key.keysym.sym == SDLK_LEFT)
{
playername[namechar]=' ';
namechar--;
if(namechar < 0)
namechar=0;
}
else
if(event.key.keysym.sym>41)
{
playername[namechar] = event.key.keysym.sym;
if(playername[namechar]>=97 && playername[namechar]<=122)
playername[namechar]=event.key.keysym.sym-32;
if(playername[namechar]<='A' || playername[namechar]>='Z')
playername[namechar]='A';
if(namechar < 9)
namechar++;
}
else
{
if(event.key.keysym.sym==SDLK_RETURN || event.key.keysym.sym == SDLK_ESCAPE || event.key.keysym.sym == SDLK_SPACE)
inputloop=0;
if(event.key.keysym.sym==SDLK_BACKSPACE)
{
namechar=0;
for(n=0;n<10;n++)
playername[n] = '.';
}
}
}
}
check_joystick_events(&event, joypos);
if (joypos[JOY_UP])
{
playername[namechar]++;
if(playername[namechar]>=97 && playername[namechar]<=122)
playername[namechar]-=32;
}
if (joypos[JOY_DOWN])
{
playername[namechar]--;
if(playername[namechar]>=97 && playername[namechar]<=122)
playername[namechar]-=32;
}
if (joypos[JOY_BUTTON0])
{
namechar++;
if(namechar > 3)
namechar=0;
}
if (joypos[JOY_BUTTON1])
inputloop=0;
}
}
void menu_events()
{
SDL_Event event;
Uint8 *keys;
Mix_Volume(0,100);
while(SDL_PollEvent(&event)==1)
{
if(event.type==SDL_QUIT)
gameexit=1;
check_joystick_events(&event, joypos);
keys = SDL_GetKeyState(NULL);
if(keys[SDLK_DOWN] || keys[SDLK_KP2] || keys[SDLK_a] || joypos[JOY_DOWN])
{
Mix_PlayChannel(0,option,0);
if(menuvalue == 7)
menuvalue=1;
else
menuvalue++;
}
if(keys[SDLK_UP] || keys[SDLK_KP8] || keys[SDLK_q] || joypos[JOY_UP])
{
Mix_PlayChannel(0,option,0);
if(menuvalue == 1)
menuvalue = 7;
else
menuvalue--;
}
if(keys[SDLK_SPACE] || keys[SDLK_RETURN] || joypos[JOY_BUTTON0])
{
Mix_PlayChannel(0,option,0);
switch(menuvalue)
{
case 1:
startgame = 1;
break;
case 2:
dificulty++;
if(dificulty>3)
dificulty=1;
break;
case 3:
screen_mode();
setback();
joypos[JOY_BUTTON0]=0;
break;
case 4:
do_code();
break;
case 5:
help=1;
break;
case 6:
hiscores=1;
break;
case 7:
gameexit = 1;
break;
default:
break;
}
}
if(keys[SDLK_ESCAPE])
gameexit=1;
}
}
void code_events()
{
int n;
SDL_Event event;
while(SDL_PollEvent(&event)==1)
{
switch(event.type)
{
case SDL_KEYDOWN:
{
if(event.key.keysym.sym == SDLK_UP)
{
code[codechar]--;
if(code[codechar]<='A' || code[codechar]>='Z')
code[codechar]='A';
}
else
if(event.key.keysym.sym == SDLK_DOWN)
{
code[codechar]++;
if(code[codechar]<='A' || code[codechar]>='Z')
code[codechar]='Z';
}
else
if(event.key.keysym.sym == SDLK_RIGHT)
{
if(code[codechar]<='A' || code[codechar]>='Z')
code[codechar]='A';
codechar++;
if(codechar > 3)
codechar=3;
}
else
if(event.key.keysym.sym == SDLK_LEFT)
{
code[codechar]='.';
codechar--;
if(codechar < 0)
codechar=0;
}
else
if(event.key.keysym.sym>41)
{
code[codechar] = event.key.keysym.sym;
if(code[codechar]>=97 && code[codechar]<=122)
code[codechar]=event.key.keysym.sym-32;
if(code[codechar]<='A' || code[codechar]>='Z')
code[codechar]='A';
if(codechar < 3)
codechar++;
}
else
{
if(event.key.keysym.sym== SDLK_RETURN || event.key.keysym.sym == SDLK_ESCAPE || event.key.keysym.sym == SDLK_SPACE)
inputloop=0;
if(event.key.keysym.sym== SDLK_BACKSPACE)
{
SDL_Rect coderect;
coderect.x=303;
coderect.y=235;
coderect.w=194;
coderect.h=44;
SDL_FillRect(screen, &coderect, SDL_MapRGB(screen->format,0,0,0));
codechar=0;
for(int n=0;n<4;n++)
code[n] = '.' ;
}
}
}
}
check_joystick_events(&event, joypos);
if (joypos[JOY_UP])
{
code[codechar]++;
if(code[codechar]>=97 && code[codechar]<=122)
code[codechar]-=32;
}
if (joypos[JOY_DOWN])
{
code[codechar]--;
if(code[codechar]>=97 && code[codechar]<=122)
code[codechar]-=32;
}
if (joypos[JOY_BUTTON0])
{
codechar++;
if(codechar > 3)
codechar=0;
}
if (joypos[JOY_BUTTON1])
inputloop=0;
}
}
void check_joystick_events(SDL_Event *event, Uint8 *joypos)
{
switch (event->type)
{
case SDL_JOYAXISMOTION: /* Handle Joystick Motion */
if( event->jaxis.axis == 0)
{ /* Left-Right movement code goes here */
if ( event->jaxis.value < -3200)
{
joypos[JOY_LEFT]=1;
joypos[JOY_RIGHT]=0;
}
else
{
if ( event->jaxis.value > 3200)
{
joypos[JOY_LEFT]=0;
joypos[JOY_RIGHT]=1;
}
else
{
joypos[JOY_LEFT]=0;
joypos[JOY_RIGHT]=0;
}
}
}
if( event->jaxis.axis == 1)
{ /* Up-Down movement code goes here */
if ( event->jaxis.value < -3200)
{
joypos[JOY_UP]=1;
joypos[JOY_DOWN]=0;
}
else
{
if ( event->jaxis.value > 3200)
{
joypos[JOY_UP]=0;
joypos[JOY_DOWN]=1;
}
else
{
joypos[JOY_UP]=0;
joypos[JOY_DOWN]=0;
}
}
}
break;
case SDL_JOYBUTTONDOWN: /* Handle Joystick Button Presses */
switch (event->jbutton.button)
{
case 0:
joypos[JOY_BUTTON0]=1; break;
case 1:
joypos[JOY_BUTTON1]=1;
break;
}
break;
case SDL_JOYBUTTONUP: /* Handle Joystick Button Releases */
switch (event->jbutton.button)
{
case 0:
joypos[JOY_BUTTON0]=0;
break;
case 1:
joypos[JOY_BUTTON1]=0;
break;
}
break;
}
}
void game_events()
{
int n;
SDL_Event event;
Uint8 *keys;
if(mplayer[dificulty].lives==0)
game_exit = 1;
while(SDL_PollEvent(&event)==1)
{
check_joystick_events(&event, joypos);
keys = SDL_GetKeyState(NULL);
mplayer[dificulty].left = 0;
mplayer[dificulty].right = 0;
if(keys[SDLK_h] || keys[SDLK_F1])
{
escape_exit=0;
SDL_Rect dst;
dst.x=300; dst.y=200; dst.w=192; dst.h=32;
SDL_Rect src;
src.x=dst.x-R_gamearea_x; src.y=dst.y-R_gamearea_y; src.w=dst.w; src.h=dst.h;
print_text(menufont, screen, 32, 32, dst.x, dst.y, "PAUSED");
SDL_UpdateRect(screen, dst.x, dst.y , dst.w, dst.h);
while(escape_exit==0)
{
pause_events();
SDL_Delay(5);
}
SDL_BlitSurface(screenbak, &src, screen, &dst);
SDL_UpdateRect(screen, dst.x, dst.y , dst.w, dst.w);
}
if(keys[SDLK_o] || keys[SDLK_LEFT] || keys[SDLK_KP4] || joypos[JOY_LEFT])
{
mplayer[dificulty].left = 1;
mplayer[dificulty].right = 0;
mplayer[dificulty].facingleft = 1;
}
if(keys[SDLK_p] || keys[SDLK_RIGHT] || keys[SDLK_KP6] || joypos[JOY_RIGHT])
{
mplayer[dificulty].right = 1;
mplayer[dificulty].left = 0;
mplayer[dificulty].facingleft = 0;
}
if(keys[SDLK_q] || keys[SDLK_UP] || keys[SDLK_KP8] || joypos[JOY_UP])
{
if(mplayer[dificulty].duck==1) // en esta rutina tiene que comprobar que si se quiere parar que no tenga nada encima que se lo impida
{
mplayer[dificulty].duck = 0;
mplayer[dificulty].framer = 1;
mplayer[dificulty].y = mplayer[dificulty].old_y - (P_h - P_h/2);
for(int n=0;n<=mplayer[dificulty].w-1;n++)
{
int x=int(mplayer[dificulty].x+n)/R_tileside;
int y=int((mplayer[dificulty].y - (P_h - P_h/2)+R_tileside)/R_tileside);
chk_touched(x,y);
if((mroom.data[x][y] >= 80) && (mroom.data[x][y] < 200))
{
mplayer[dificulty].duck = 1;
mplayer[dificulty].framer = 2;
mplayer[dificulty].y = mplayer[dificulty].old_y;
}
}
}
}
if(keys[SDLK_a] || keys[SDLK_DOWN] || keys[SDLK_KP2] || joypos[JOY_DOWN])
{
if(mplayer[dificulty].duck==0 && mplayer[dificulty].jump == 0 && mplayer[dificulty].infloor == 1)
{
mplayer[dificulty].y = mplayer[dificulty].y + (P_h - P_h/2);
mplayer[dificulty].ducked = 1;
}
if(mplayer[dificulty].jump == 0 && mplayer[dificulty].infloor == 1)
mplayer[dificulty].duck = 1;
}
if(keys[SDLK_SPACE] || keys[SDLK_KP0] || joypos[JOY_BUTTON0])
{
if((mplayer[dificulty].infloor==1)&&(mplayer[dificulty].duck==0)&&(mplayer[dificulty].y+P_h/R_tileside==int(mplayer[dificulty].y+P_h/R_tileside)))
{
mplayer[dificulty].jumpcounter=0;
mplayer[dificulty].startjump=int(mplayer[dificulty].y);
mplayer[dificulty].upflag=1;
mplayer[dificulty].downflag=0;
mplayer[dificulty].jump = 1;
Mix_Volume(0,100);
Mix_PlayChannel(0,jump,0);
}
}
if(keys[SDLK_ESCAPE])
{
game_exit = 1;
}
}
}