SetLanguage.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. //============================================================================================
  2. // Spirenkov Maxim, 2009
  3. //============================================================================================
  4. // Mission objects
  5. //============================================================================================
  6. // SetLanguage
  7. //============================================================================================
  8. #include "SetLanguage.h"
  9. #include "..\MissionsManager.h"
  10. SetLanguage::SetLanguage()
  11. {
  12. langName = null;
  13. }
  14. SetLanguage::~SetLanguage()
  15. {
  16. }
  17. //Инициализировать объект
  18. bool SetLanguage::Create(MOPReader & reader)
  19. {
  20. MissionObject::Activate(false);
  21. langName = reader.String().c_str();
  22. return true;
  23. }
  24. //Активировать
  25. void SetLanguage::Activate(bool isActive)
  26. {
  27. if(EditMode_IsOn())
  28. {
  29. return;
  30. }
  31. //На деактивацию ничего не делает
  32. if(!isActive)
  33. {
  34. LogicDebug("Deactivate (do nothing)");
  35. return;
  36. }
  37. //Ставим новый язык
  38. LogicDebug("Activate, set for wait language %s", langName);
  39. SetLanguageBlockService::SetNewLanguage(langName);
  40. }
  41. //Пересоздать объект
  42. void SetLanguage::Restart()
  43. {
  44. }
  45. MOP_BEGINLISTG(SetLanguage, "Set language", '1.00', 0, "Managment")
  46. MOP_STRINGC("Language name", "", "Set language name or language id")
  47. MOP_ENDLIST(SetLanguage)
  48. CREATE_SERVICE(SetLanguageBlockService, 1000)
  49. SetLanguageBlockService * SetLanguageBlockService::ptr = null;
  50. SetLanguageBlockService::SetLanguageBlockService()
  51. {
  52. Assert(!ptr);
  53. ptr = this;
  54. }
  55. SetLanguageBlockService::~SetLanguageBlockService()
  56. {
  57. Assert(ptr == this);
  58. ptr = null;
  59. }
  60. void SetLanguageBlockService::SetNewLanguage(const char * name)
  61. {
  62. if(string::IsEmpty(name))
  63. {
  64. return;
  65. }
  66. Assert(ptr);
  67. ptr->languageName = name;
  68. }
  69. bool SetLanguageBlockService::Init()
  70. {
  71. api->SetEndFrameLevel(this, Core_DefaultExecuteLevel + 100);
  72. return true;
  73. }
  74. void SetLanguageBlockService::EndFrame(float dltTime)
  75. {
  76. if(!languageName.IsEmpty())
  77. {
  78. const char * currentLang = api->Storage().GetString(ILocStrings_StorageLocalizationPath, "");
  79. if(languageName == currentLang)
  80. {
  81. languageName.Empty();
  82. api->Trace("Skip language process, because names is identical (\"%s\" and \"%s\")", languageName.c_str(), currentLang);
  83. return;
  84. }
  85. api->Trace("Set new language \"%s\" process...", languageName.c_str());
  86. //Перегружаем строки
  87. #ifdef _XBOX
  88. IRender * render = (IRender *)api->GetService("DX9Render");
  89. Assert(render);
  90. render->X360_DeviceSuspend();
  91. #endif
  92. api->Storage().SetString(ILocStrings_StorageLocalizationPath, languageName.c_str());
  93. ILocStrings * locStrings = (ILocStrings *)api->GetService("LocStrings");
  94. Assert(locStrings);
  95. locStrings->LoadAll();
  96. //Делаем рестарт всех миссий
  97. if(MissionsManager::Ptr())
  98. {
  99. MissionsManager::Ptr()->RestartAll();
  100. }else{
  101. api->Trace("Error: Can't set new language in editor");
  102. }
  103. languageName.Empty();
  104. #ifdef _XBOX
  105. render->X360_DeviceResume();
  106. #endif
  107. }
  108. }