| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- //============================================================================================
- // Spirenkov Maxim, 2009
- //============================================================================================
- // Mission objects
- //============================================================================================
- // SetLanguage
- //============================================================================================
- #include "SetLanguage.h"
- #include "..\MissionsManager.h"
- SetLanguage::SetLanguage()
- {
- langName = null;
- }
- SetLanguage::~SetLanguage()
- {
- }
- //Инициализировать объект
- bool SetLanguage::Create(MOPReader & reader)
- {
- MissionObject::Activate(false);
- langName = reader.String().c_str();
- return true;
- }
- //Активировать
- void SetLanguage::Activate(bool isActive)
- {
- if(EditMode_IsOn())
- {
- return;
- }
- //На деактивацию ничего не делает
- if(!isActive)
- {
- LogicDebug("Deactivate (do nothing)");
- return;
- }
- //Ставим новый язык
- LogicDebug("Activate, set for wait language %s", langName);
- SetLanguageBlockService::SetNewLanguage(langName);
- }
- //Пересоздать объект
- void SetLanguage::Restart()
- {
- }
- MOP_BEGINLISTG(SetLanguage, "Set language", '1.00', 0, "Managment")
- MOP_STRINGC("Language name", "", "Set language name or language id")
- MOP_ENDLIST(SetLanguage)
- CREATE_SERVICE(SetLanguageBlockService, 1000)
- SetLanguageBlockService * SetLanguageBlockService::ptr = null;
- SetLanguageBlockService::SetLanguageBlockService()
- {
- Assert(!ptr);
- ptr = this;
- }
- SetLanguageBlockService::~SetLanguageBlockService()
- {
- Assert(ptr == this);
- ptr = null;
- }
- void SetLanguageBlockService::SetNewLanguage(const char * name)
- {
- if(string::IsEmpty(name))
- {
- return;
- }
- Assert(ptr);
- ptr->languageName = name;
- }
- bool SetLanguageBlockService::Init()
- {
- api->SetEndFrameLevel(this, Core_DefaultExecuteLevel + 100);
- return true;
- }
- void SetLanguageBlockService::EndFrame(float dltTime)
- {
- if(!languageName.IsEmpty())
- {
- const char * currentLang = api->Storage().GetString(ILocStrings_StorageLocalizationPath, "");
- if(languageName == currentLang)
- {
- languageName.Empty();
- api->Trace("Skip language process, because names is identical (\"%s\" and \"%s\")", languageName.c_str(), currentLang);
- return;
- }
- api->Trace("Set new language \"%s\" process...", languageName.c_str());
- //Перегружаем строки
- #ifdef _XBOX
- IRender * render = (IRender *)api->GetService("DX9Render");
- Assert(render);
- render->X360_DeviceSuspend();
- #endif
- api->Storage().SetString(ILocStrings_StorageLocalizationPath, languageName.c_str());
- ILocStrings * locStrings = (ILocStrings *)api->GetService("LocStrings");
- Assert(locStrings);
- locStrings->LoadAll();
- //Делаем рестарт всех миссий
- if(MissionsManager::Ptr())
- {
- MissionsManager::Ptr()->RestartAll();
- }else{
- api->Trace("Error: Can't set new language in editor");
- }
- languageName.Empty();
- #ifdef _XBOX
- render->X360_DeviceResume();
- #endif
- }
- }
|