in atari_py/ale_interface/src/common/display_screen.cpp [150:202]
Action DisplayScreen::getUserAction() {
if (!manual_control_active) {
return UNDEFINED;
}
Action a = PLAYER_A_NOOP;
poll();
SDL_PumpEvents();
Uint8* keymap = SDL_GetKeyState(NULL);
// Break out of this loop if the 'p' key is pressed
if (keymap[SDLK_p]) {
return PLAYER_A_NOOP;
// Triple Actions
} else if (keymap[SDLK_UP] && keymap[SDLK_RIGHT] && keymap[SDLK_SPACE]) {
a = PLAYER_A_UPRIGHTFIRE;
} else if (keymap[SDLK_UP] && keymap[SDLK_LEFT] && keymap[SDLK_SPACE]) {
a = PLAYER_A_UPLEFTFIRE;
} else if (keymap[SDLK_DOWN] && keymap[SDLK_RIGHT] && keymap[SDLK_SPACE]) {
a = PLAYER_A_DOWNRIGHTFIRE;
} else if (keymap[SDLK_DOWN] && keymap[SDLK_LEFT] && keymap[SDLK_SPACE]) {
a = PLAYER_A_DOWNLEFTFIRE;
// Double Actions
} else if (keymap[SDLK_UP] && keymap[SDLK_LEFT]) {
a = PLAYER_A_UPLEFT;
} else if (keymap[SDLK_UP] && keymap[SDLK_RIGHT]) {
a = PLAYER_A_UPRIGHT;
} else if (keymap[SDLK_DOWN] && keymap[SDLK_LEFT]) {
a = PLAYER_A_DOWNLEFT;
} else if (keymap[SDLK_DOWN] && keymap[SDLK_RIGHT]) {
a = PLAYER_A_DOWNRIGHT;
} else if (keymap[SDLK_UP] && keymap[SDLK_SPACE]) {
a = PLAYER_A_UPFIRE;
} else if (keymap[SDLK_DOWN] && keymap[SDLK_SPACE]) {
a = PLAYER_A_DOWNFIRE;
} else if (keymap[SDLK_LEFT] && keymap[SDLK_SPACE]) {
a = PLAYER_A_LEFTFIRE;
} else if (keymap[SDLK_RIGHT] && keymap[SDLK_SPACE]) {
a = PLAYER_A_RIGHTFIRE;
// Single Actions
} else if (keymap[SDLK_SPACE]) {
a = PLAYER_A_FIRE;
} else if (keymap[SDLK_RETURN]) {
a = PLAYER_A_NOOP;
} else if (keymap[SDLK_LEFT]) {
a = PLAYER_A_LEFT;
} else if (keymap[SDLK_RIGHT]) {
a = PLAYER_A_RIGHT;
} else if (keymap[SDLK_UP]) {
a = PLAYER_A_UP;
} else if (keymap[SDLK_DOWN]) {
a = PLAYER_A_DOWN;
}
return a;
}