def __init__(self, settings_, descriptor): super(Tutorial, self).__init__() self._cache = None self.__callbackID = None self._currentChapter = None self._currentState = None self._settings = settings_ self._ctrlFactory = createTutorialElement(settings_.ctrl) self._descriptor = descriptor self._data = None self._stopped = True self._nextChapter = False self._nextScene = None self._funcScene = None self._funcInfo = None self._flags = None self._vars = None self._effectsQueue = [] self._gui = None self._bonuses = None self._sound = None self._initialized = 0 self._triggeredEffects = set() self.onStarted = Event.Event() self.onStopped = Event.Event() return
def areSettingsEnabled(self, settingsID): settings = self.__settings.getSettings(settingsID) if settings is None: LOG_ERROR('Can not find settings', settingsID) return False else: return _settings.createTutorialElement(settings.reqs).isEnabled()
def __setDispatcher(self, settings): if self.__dispatcher is not None: self.__dispatcher.stop() self.__dispatcher = None self.__dispatcher = _settings.createTutorialElement(settings) self.__dispatcher.start(weakref.proxy(self)) return
def __doRun(self, settings, state): if not settings.enabled: return False else: reqs = _settings.createTutorialElement(settings.reqs) if not reqs.isEnabled(): return False descriptor = loadDescriptorData(settings, settings.exParsers) if descriptor is None: LOG_ERROR('Descriptor is not valid. Tutorial is not available', settings) return False cache = _cache.TutorialCache(BigWorld.player().name) cache.read() cache.setSpace(settings.space) if state.get('byRequest', False): cache.setRefused(False) runCtx = RunCtx(cache, **state) reqs.prepare(runCtx) if not reqs.process(descriptor, runCtx): return False self.clear() if self.__dispatcher is None: self.__setDispatcher(settings.dispatcher) tutorial = Tutorial(settings, descriptor) result = tutorial.run(weakref.proxy(self.__dispatcher), runCtx) if result: self.__tutorial = tutorial self.__tutorial.onStopped += self.__onTutorialStopped return result
def run(self, dispatcher, ctx): self._cache = ctx.cache if self._cache is None: LOG_ERROR('Cache is not init.') return False else: self._bonuses = self._ctrlFactory.createBonuses(ctx.bonusCompleted) self._sound = self._ctrlFactory.createSoundPlayer() GlobalStorage.setFlags(ctx.globalFlags) if not self._stopped: LOG_ERROR('Tutorial is already running.') return False self._gui = createTutorialElement(self._settings.gui) self._gui.setDispatcher(dispatcher) self._gui.onGUILoaded += self.__onGUILoaded if not self._gui.init(): self._gui.onGUILoaded -= self.__onGUILoaded self._gui.setDispatcher(None) LOG_ERROR('GUI can not init. Tutorial is stopping.') return False LOG_DEBUG('Start training', ctx) self._stopped = False proxy = weakref.proxy(self) setTutorialProxy(proxy) if self.__resolveInitialChapter(ctx): self._gui.loadConfig(self._descriptor.getGuiFilePath()) self._gui.onGUIInput += self.__onGUIInput self._gui.onPageChanging += self.__onPageChanging self._gui.onItemFound += self.__onItemFound self._gui.onItemLost += self.__onItemLost self.__tryRunFirstState(INITIAL_FLAG.CHAPTER_RESOLVED) self.onStarted() return True
def run(self, dispatcher, ctx): self._cache = ctx.cache if self._cache is None: LOG_ERROR('Cache is not init.') return False self._bonuses = self._ctrlFactory.createBonuses(ctx.bonusCompleted) self._sound = self._ctrlFactory.createSoundPlayer() GlobalStorage.setFlags(ctx.globalFlags) if not self._stopped: LOG_ERROR('Tutorial is already running.') return False self._gui = createTutorialElement(self._settings.gui) self._gui.setDispatcher(dispatcher) self._gui.onGUILoaded += self.__onGUILoaded if not self._gui.init(): self._gui.onGUILoaded -= self.__onGUILoaded self._gui.setDispatcher(None) LOG_ERROR('GUI can not init. Tutorial is stopping.') return False LOG_DEBUG('Start training', ctx) self._stopped = False proxy = weakref.proxy(self) setTutorialProxy(proxy) if self.__resolveInitialChapter(ctx): self._gui.loadConfig(self._descriptor.getGuiFilePath()) self._gui.onGUIInput += self.__onGUIInput self._gui.onPageChanging += self.__onPageChanging self._gui.onItemFound += self.__onItemFound self._gui.onItemLost += self.__onItemLost self.__tryRunFirstState(INITIAL_FLAG.CHAPTER_RESOLVED) self.onStarted() return True
def loadChapterData(chapter, chapterParser, afterBattle=False, initial=False): if chapter is not None and not chapter.isValid(): try: parser = settings.createTutorialElement(chapterParser) parser.parse(chapter, afterBattle=afterBattle, initial=initial) except Exception: LOG_CURRENT_EXCEPTION() return return chapter
def loadChapterData(chapter, chapterParser, afterBattle = False, initial = False): if chapter is not None and not chapter.isValid(): try: parser = settings.createTutorialElement(chapterParser) parser.parse(chapter, afterBattle=afterBattle, initial=initial) except Exception: LOG_CURRENT_EXCEPTION() return return chapter
def loadDescriptorData(setting, exParsers=None, clearCache=False): try: if exParsers is not None: imported = __import__(exParsers, globals(), locals(), ['init']) getattr(imported, 'init')() if clearCache: ResMgr.purge(setting.descriptorPath) classPath = setting.descriptorParser parser = settings.createTutorialElement(classPath) return parser.parse(setting.descriptorPath) except Exception: LOG_CURRENT_EXCEPTION() return return
def loadDescriptorData(setting, exParsers = None, clearCache = False): try: if exParsers is not None: imported = __import__(exParsers, globals(), locals(), ['init']) getattr(imported, 'init')() if clearCache: ResMgr.purge(setting.descriptorPath) classPath = setting.descriptorParser parser = settings.createTutorialElement(classPath) return parser.parse(setting.descriptorPath) except Exception: LOG_CURRENT_EXCEPTION() return return
def __doRun(self, settings, runCtx, byRequest = False): if not settings.enabled: return False reqs = _settings.createTutorialElement(settings.reqs) if not reqs.isEnabled(): return False descriptor = loadDescriptorData(settings, settings.exParsers) if descriptor is None: LOG_ERROR('Descriptor is not valid. Tutorial is not available', settings) return False runCtx.cache.setSpace(settings.space) if byRequest: runCtx.cache.setRefused(False) reqs.prepare(runCtx) if not reqs.process(descriptor, runCtx): return False self.clear() tutorial = Tutorial(settings, descriptor) result = tutorial.run(weakref.proxy(self.__dispatcher), runCtx) if result: self.__tutorial = tutorial self.__tutorial.onStopped += self.__onTutorialStopped return result
def __doRun(self, settings, runCtx, byRequest=False): if not settings.enabled: return False reqs = _settings.createTutorialElement(settings.reqs) if not reqs.isEnabled(): return False descriptor = loadDescriptorData(settings, settings.exParsers) if descriptor is None: LOG_ERROR('Descriptor is not valid. Tutorial is not available', settings) return False runCtx.cache.setSpace(settings.space) if byRequest: runCtx.cache.setRefused(False) reqs.prepare(runCtx) if not reqs.process(descriptor, runCtx): return False self.clear() tutorial = Tutorial(settings, descriptor) result = tutorial.run(weakref.proxy(self.__dispatcher), runCtx) if result: self.__tutorial = tutorial self.__tutorial.onStopped += self.__onTutorialStopped return result
def areSettingsEnabled(self, settingsID): settings = self.__settings.getSettings(settingsID) if settings is None: LOG_ERROR('Can not find settings', settingsID) return False return _settings.createTutorialElement(settings.reqs).isEnabled()