bool KX_GameActuator::Update() { // bool result = false; /*unused*/ bool bNegativeEvent = IsNegativeEvent(); RemoveAllEvents(); if (bNegativeEvent) return false; // do nothing on negative events switch (m_mode) { case KX_GAME_LOAD: case KX_GAME_START: { if (m_ketsjiengine) { STR_String exitstring = "start other game"; m_ketsjiengine->RequestExit(KX_EXIT_REQUEST_START_OTHER_GAME); m_ketsjiengine->SetNameNextGame(m_filename); m_scene->AddDebugProperty((this)->GetParent(), exitstring); } break; } case KX_GAME_RESTART: { if (m_ketsjiengine) { STR_String exitstring = "restarting game"; m_ketsjiengine->RequestExit(KX_EXIT_REQUEST_RESTART_GAME); m_ketsjiengine->SetNameNextGame(m_filename); m_scene->AddDebugProperty((this)->GetParent(), exitstring); } break; } case KX_GAME_QUIT: { if (m_ketsjiengine) { STR_String exitstring = "quiting game"; m_ketsjiengine->RequestExit(KX_EXIT_REQUEST_QUIT_GAME); m_scene->AddDebugProperty((this)->GetParent(), exitstring); } break; } case KX_GAME_SAVECFG: { #ifdef WITH_PYTHON if (m_ketsjiengine) { char mashal_path[512]; char *marshal_buffer = NULL; unsigned int marshal_length; FILE *fp = NULL; pathGamePythonConfig(mashal_path); marshal_length = saveGamePythonConfig(&marshal_buffer); if (marshal_length && marshal_buffer) { fp = fopen(mashal_path, "wb"); if (fp) { if (fwrite(marshal_buffer, 1, marshal_length, fp) != marshal_length) { printf("Warning: could not write marshal data\n"); } fclose(fp); } else { printf("Warning: could not open marshal file\n"); } } else { printf("Warning: could not create marshal buffer\n"); } if (marshal_buffer) delete [] marshal_buffer; } break; #endif // WITH_PYTHON } case KX_GAME_LOADCFG: { #ifdef WITH_PYTHON if (m_ketsjiengine) { char mashal_path[512]; char *marshal_buffer; int marshal_length; FILE *fp = NULL; int result; pathGamePythonConfig(mashal_path); fp = fopen(mashal_path, "rb"); if (fp) { // obtain file size: fseek (fp , 0 , SEEK_END); marshal_length = ftell(fp); if (marshal_length == -1) { printf("warning: could not read position of '%s'\n", mashal_path); fclose(fp); break; } rewind(fp); marshal_buffer = (char*) malloc (sizeof(char)*marshal_length); result = fread (marshal_buffer, 1, marshal_length, fp); if (result == marshal_length) { loadGamePythonConfig(marshal_buffer, marshal_length); } else { printf("warning: could not read all of '%s'\n", mashal_path); } free(marshal_buffer); fclose(fp); } else { printf("warning: could not open '%s'\n", mashal_path); } } break; #endif // WITH_PYTHON } case KX_GAME_SCREENSHOT: { RAS_ICanvas *canvas = m_ketsjiengine->GetCanvas(); if (canvas) { canvas->MakeScreenShot(m_filename); } else { printf("KX_GAME_SCREENSHOT error: Rasterizer not available"); } break; } default: ; /* do nothing? this is an internal error !!! */ } return false; }
bool KX_GameActuator::Update() { // bool result = false; /*unused*/ bool bNegativeEvent = IsNegativeEvent(); RemoveAllEvents(); if (bNegativeEvent) return false; // do nothing on negative events switch (m_mode) { case KX_GAME_LOAD: case KX_GAME_START: { if (m_ketsjiengine) { std::string exitstring = "start other game"; m_ketsjiengine->RequestExit(KX_EXIT_REQUEST_START_OTHER_GAME); m_ketsjiengine->SetNameNextGame(m_filename); m_scene->AddDebugProperty((this)->GetParent(), exitstring); } break; } case KX_GAME_RESTART: { if (m_ketsjiengine) { std::string exitstring = "restarting game"; m_ketsjiengine->RequestExit(KX_EXIT_REQUEST_RESTART_GAME); m_ketsjiengine->SetNameNextGame(m_filename); m_scene->AddDebugProperty((this)->GetParent(), exitstring); } break; } case KX_GAME_QUIT: { if (m_ketsjiengine) { std::string exitstring = "quiting game"; m_ketsjiengine->RequestExit(KX_EXIT_REQUEST_QUIT_GAME); m_scene->AddDebugProperty((this)->GetParent(), exitstring); } break; } case KX_GAME_SAVECFG: { #ifdef WITH_PYTHON if (m_ketsjiengine) { saveGamePythonConfig(); } break; #endif // WITH_PYTHON } case KX_GAME_LOADCFG: { #ifdef WITH_PYTHON if (m_ketsjiengine) { loadGamePythonConfig(); } break; #endif // WITH_PYTHON } case KX_GAME_SCREENSHOT: { RAS_ICanvas *canvas = m_ketsjiengine->GetCanvas(); if (canvas) { canvas->MakeScreenShot(m_filename); } else { CM_LogicBrickError(this, "KX_GAME_SCREENSHOT Rasterizer not available"); } break; } default: ; /* do nothing? this is an internal error !!! */ } return false; }