Пример #1
0
 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
Пример #2
0
 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()
Пример #3
0
 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
Пример #4
0
 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
Пример #5
0
 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
Пример #6
0
 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
Пример #7
0
 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
Пример #8
0
 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
Пример #9
0
 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
Пример #10
0
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
Пример #11
0
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
Пример #12
0
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
Пример #13
0
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
Пример #14
0
 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
Пример #15
0
 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
Пример #16
0
 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()