// ********************************************************************************************** // // // // ********************************************************************************************** // int inputLib::waitScapeTime(int wait_period) { int now_time = 0; waitTime(50); now_time = timer.getTimer(); wait_period = now_time + wait_period; while (now_time < wait_period) { readInput(); if (p1_input[BTN_START] == 1 || p2_input[BTN_START] == 1) { return 1; } else if (p1_input[BTN_QUIT] == 1 || p2_input[BTN_QUIT] == 1) { #if !defined(PLAYSTATION2) && !defined(PSP) && !defined(WII) && !defined(DREAMCAST) std::cout << "LEAVE #2" << std::endl; std::fflush(stdout); gameControl.leave_game(); #endif } now_time = timer.getTimer(); #ifdef PLAYSTATION RotateThreadReadyQueue(_MIXER_THREAD_PRIORITY); #endif SDL_Delay(5); } return 0; }
void inputLib::readInput() { _used_keyboard = false; while (SDL_PollEvent(&event)) { if (_show_btn_debug == false) { _show_btn_debug = true; } if (game_config.input_type == INPUT_TYPE_DOUBLE || game_config.input_type == INPUT_TYPE_KEYBOARD) { if (event.type == SDL_KEYDOWN) { for (int i=0; i<BTN_COUNT; i++) { if (game_config.keys_codes[i] != -1 && game_config.keys_codes[i] == event.key.keysym.sym) { p1_input[i] = 1; _used_keyboard = true; if (i == BTN_JUMP) { p1_input[BTN_JUMP_TIMER] = timer.getTimer(); } } } } else if (event.type == SDL_KEYUP) { for (int i=0; i<BTN_COUNT; i++) { if (game_config.keys_codes[i] != -1 && game_config.keys_codes[i] == event.key.keysym.sym) { p1_input[i] = 0; _used_keyboard = true; if (i == BTN_JUMP) { p1_input[BTN_JUMP_TIMER] = 0; } } } } SDL_PumpEvents(); // check keyboard events #if !defined(PLAYSTATION2) && !defined(PSP) && !defined(WII) && !defined(DREAMCAST) if (event.type == SDL_QUIT) { std::cout << "LEAVE #1" << std::endl; std::fflush(stdout); gameControl.leave_game(); } #endif } if (_used_keyboard == true) { // next commands are all joystick only return; } if (game_config.input_type == INPUT_TYPE_DOUBLE || game_config.input_type == INPUT_TYPE_JOYSTICK) { if (event.type == SDL_JOYBUTTONDOWN) { //std::cout << "#1 INPUT::readInput - joystick button[" << (int)event.jbutton.button << "] pressed." << std::endl; for (int i=0; i<BTN_COUNT; i++) { //std::cout << "#1 INPUT::readInput - button_codes[" << i << "]: " << game_config.button_codes[i] << std::endl; if (game_config.button_codes[i] != -1 && game_config.button_codes[i] == event.jbutton.button) { //std::cout << "#1 INPUT::readInput - FOUND ACTION for i: " << i << std::endl; p1_input[i] = 1; if (i == BTN_JUMP) { p1_input[BTN_JUMP_TIMER] = timer.getTimer(); } //break; } } } else if (event.type == SDL_JOYBUTTONUP) { //std::cout << "#2 INPUT::readInput - joystick button[" << event.jbutton.button << "] released" << std::endl; for (int i=0; i<BTN_COUNT; i++) { if (game_config.button_codes[i] != -1 && game_config.button_codes[i] == event.jbutton.button) { p1_input[i] = 0; if (i == BTN_JUMP) { p1_input[BTN_JUMP_TIMER] = 0; } break; } } } } if ((game_config.input_mode == INPUT_MODE_ANALOG || game_config.input_mode == INPUT_MODE_DOUBLE) && event.type == SDL_JOYAXISMOTION) { if (event.jaxis.axis == 0) { if (event.jaxis.value < -JOYVAL) { p1_input[BTN_RIGHT] = 0; p1_input[BTN_LEFT] = 1; _used_keyboard = false; } else if (event.jaxis.value > JOYVAL) { p1_input[BTN_RIGHT] = 1; p1_input[BTN_LEFT] = 0; _used_keyboard = false; } else if ((event.jaxis.value < JOYVAL || event.jaxis.value > -JOYVAL) && _used_keyboard == false) { p1_input[BTN_RIGHT] = 0; p1_input[BTN_LEFT] = 0; } } if (event.jaxis.axis == 1) { if (event.jaxis.value < -JOYVAL) { p1_input[BTN_DOWN] = 0; p1_input[BTN_UP] = 1; _used_keyboard = false; } else if (event.jaxis.value > JOYVAL) { p1_input[BTN_DOWN] = 1; p1_input[BTN_UP] = 0; _used_keyboard = false; } else if ((event.jaxis.value < JOYVAL || event.jaxis.value > -JOYVAL) && _used_keyboard == false) { p1_input[BTN_DOWN] = 0; p1_input[BTN_UP] = 0; } } } if ((game_config.input_mode == INPUT_MODE_DIGITAL || game_config.input_mode == INPUT_MODE_DOUBLE) && event.type == SDL_JOYHATMOTION) { // CODES: up - 1, right: 2, down: 4, left: 8 if (event.jhat.value == 1 || event.jhat.value == 3 || event.jhat.value == 9) { // up p1_input[BTN_DOWN] = 0; p1_input[BTN_UP] = 1; _used_keyboard = false; } if (event.jhat.value == 2 || event.jhat.value == 3 || event.jhat.value == 6) { // right p1_input[BTN_RIGHT] = 1; p1_input[BTN_LEFT] = 0; _used_keyboard = false; } if (event.jhat.value == 4 || event.jhat.value == 6 || event.jhat.value == 12) { // down p1_input[BTN_DOWN] = 1; p1_input[BTN_UP] = 0; _used_keyboard = false; } if (event.jhat.value == 8 || event.jhat.value == 9 || event.jhat.value == 12) { // left p1_input[BTN_LEFT] = 1; p1_input[BTN_RIGHT] = 0; _used_keyboard = false; } if (event.jhat.value == 0 && _used_keyboard == false) { p1_input[BTN_LEFT] = 0; p1_input[BTN_RIGHT] = 0; p1_input[BTN_DOWN] = 0; p1_input[BTN_UP] = 0; } } } }
int main(int argc, char *argv[]) #endif { #ifdef PSP SetupCallbacks(); scePowerSetClockFrequency(333, 333, 166); #endif for (int i=0; i<FLAG_COUNT; i++) { GAME_FLAGS[i] = false; } UNUSED(argc); string argvString = ""; #ifndef WII argvString = string(argv[0]); #else if (!fatInitDefault()) { printf("fatInitDefault ERROR #1"); std::fflush(stdout); timer.delay(500); exit(-1); } #endif get_filepath(); // fallback in case getcwd returns null if (FILEPATH.size() == 0) { std::cout << "Could not read path, fallback to using argv" << std::endl; FILEPATH = argvString.substr(0, argvString.size()-EXEC_NAME.size()); } std::cout << "main - argvString: '" << argvString << "', FILEPATH: '" << FILEPATH << "'" << std::endl; std::fflush(stdout); #ifdef PLAYSTATION2 std::cout << "PS2.DEBUG #1" << std::endl; std::fflush(stdout); #ifndef PS2LINK SifIopReset(NULL, 0); // clean previous loading of irx by apps like ulaunchElf. Comment this line to get cout on ps2link #endif printf("DEBUG.PS2 #1.1\n"); /* SP193: Being creative (Do something while waiting for the slow IOP to be reset). =D */ int main_id = GetThreadId(); ChangeThreadPriority(main_id, 72); std::cout << "PS2.DEBUG #1.1" << std::endl; std::fflush(stdout); printf("DEBUG.PS2 #1.2\n"); #ifndef PS2LINK while(SifIopSync()) { std::cout << "PS2.SifIopSync()" << std::endl; } #endif /* Initialize and connect to all SIF services on the IOP. */ SifInitRpc(0); SifInitIopHeap(); SifLoadFileInit(); fioInit(); printf("DEBUG.PS2 #1.3\n"); /* Apply the SBV LMB patch to allow modules to be loaded from a buffer in EE RAM. */ sbv_patch_enable_lmb(); // --- DEBUG --- // //FILEPATH = "cdfs:/"; // --- DEBUG --- // std::cout << "PS2.DEBUG #2" << std::endl; std::fflush(stdout); if (FILEPATH.find("mass:") != std::string::npos) { printf("DEBUG.PS2 #1.4\n"); std::cout << "PS2.DEBUG Load USB" << std::endl; std::fflush(stdout); PS2_load_USB(); } if (FILEPATH.find("cdfs") != std::string::npos || FILEPATH.find("cdrom") != std::string::npos) { printf("DEBUG.PS2 #1.5\n"); std::cout << "PS2.DEBUG Load CDROM" << std::endl; std::fflush(stdout); FILEPATH = "cdfs:"; PS2_load_CDROM(); } printf("DEBUG.PS2 #2\n"); std::cout << "PS2.DEBUG #3" << std::endl; std::fflush(stdout); #endif // check command-line paramethers if (argc > 1) { for (int i=1; i<argc; i++) { std::string temp_argv(argv[i]); if (temp_argv == "--fullscreen") { } else if (temp_argv == "--quickload") { GAME_FLAGS[FLAG_QUICKLOAD] = true; } else if (temp_argv == "--invencible") { // player have infinite HP GAME_FLAGS[FLAG_INVENCIBLE] = true; } else if (temp_argv == "--allweapons") { // player have all weapons available even if GAME_FLAGS[FLAG_ALLWEAPONS] = true; } else if (temp_argv == "--infinitejump") { // player can jump again and again GAME_FLAGS[FLAG_INFINITE_JUMP] = true; } } } std::cout << "PS2.DEBUG #7" << std::endl; std::fflush(stdout); //fio.check_conversion(); fio.read_game(game_data); //GAME_FLAGS[FLAG_INFINITE_HP] = true; // DEBUG gameControl.get_drop_item_ids(); soundManager.init_audio_system(); // PS2 version have to load config AFTER SDL_Init due to SDK issues #ifdef LINUX SAVEPATH = std::string(getenv("HOME")) + "/.rockbot/"; mkdir(SAVEPATH.c_str(), 0777); //std::cout << "SAVEPATH: " << SAVEPATH << ", mkdir-res: " << res << ", errno: " << errno << std::endl; #elif WIN32 SAVEPATH = std::string(getenv("APPDATA")) + "/rockbot"; std::cout << "SAVEPATH: " << SAVEPATH << std::endl; _mkdir(SAVEPATH.c_str()); #else SAVEPATH = FILEPATH; #endif #ifndef PLAYSTATION2 fio.load_config(game_config); #endif // INIT GRAPHICS if (graphLib.initGraphics() != true) { printf("ERROR intializing graphic\n"); return -1; } // define SAVEPATH #ifdef PLAYSTATION2 PS2_load_MC(); SAVEPATH = "mc0:Rockbot/"; if (fioMkdir(SAVEPATH.c_str()) < 0) { std::cout << "main - warning: could not create '" << SAVEPATH << "' folder" << std::endl; std::fflush(stdout); /// @TODO - check if directory exists } else { std::cout << "Folder '" << SAVEPATH << "' created" << std::endl; std::fflush(stdout); } #endif have_save = fio.save_exists(); #ifndef DEBUG_OUTPUT // redirect output to null std::string cout_file = "/dev/null"; std::ofstream out(cout_file.c_str()); std::cout.rdbuf(out.rdbuf()); #else // --- REDIRECT STDOUT TO A FILE --- // #if defined(PSP) || defined(WII) || defined(ANDROID) || defined(DINGUX) || defined(PLAYSTATION2) //std::string cout_file = SAVEPATH + "/stdout.txt"; std::string cout_file = FILEPATH + "/stdout.txt"; std::streambuf *coutbuf = std::cout.rdbuf(); std::ofstream out(cout_file.c_str()); std::cout.rdbuf(out.rdbuf()); //redirect std::cout to out.txt! #endif #endif graphLib.preload(); #ifdef PLAYSTATION2 fio.load_config(game_config); PS2_create_save_icons(); #endif draw_lib.preload(); gameControl.currentStage = APEBOT; // INIT GAME if (GAME_FLAGS[FLAG_QUICKLOAD] == false) { if (gameControl.showIntro() == false) { std::cout << "ERROR SHOWING INTRO" << std::endl; return 0; } } else { gameControl.quick_load_game(); //ending end_obj; //end_obj.start(); //return 1; } input.clean(); input.p1_input[BTN_START] = 0; input.waitTime(200); input.clean(); bool run_game = true; while (run_game) { #if !defined(PSP) && !defined(DINGUX) timer.start_ticker(); #endif #ifdef PLAYSTATION2 RotateThreadReadyQueue(_MIXER_THREAD_PRIORITY); #endif gameControl.showGame(); #ifdef DEBUG_SHOW_FPS gameControl.fps_count(); #endif draw_lib.update_screen(); if (input.p1_input[BTN_QUIT] == 1) { //std::cout << "LEAVE #3" << std::endl; std::fflush(stdout); gameControl.leave_game(); } unsigned int now_ticks = timer.get_ticks(); if (now_ticks < (1000 / FRAMES_PER_SECOND)) { timer.delay((1000 / FRAMES_PER_SECOND) - now_ticks); } } /// @TODO: sdl quit sub-systems #ifdef PSP sceKernelExitGame(); return 0; #else SDL_Quit(); #endif return 1; }