Exemple #1
0
class BootcampQuestWidgetView(ViewImpl):
    __slots__ = ()
    uiBootcampLogger = BootcampLogger(BCLogKeys.BC_PROGRESS_WIDGET.value)

    def __init__(self, flags=ViewFlags.VIEW):
        settings = ViewSettings(R.views.lobby.bootcamp.BootcampQuestWidget())
        settings.flags = flags
        settings.model = BootcampQuestWidgetModel()
        super(BootcampQuestWidgetView, self).__init__(settings)

    @property
    def viewModel(self):
        return super(BootcampQuestWidgetView, self).getViewModel()

    def _initialize(self, *args, **kwargs):
        self.__addListeners()

    def __addListeners(self):
        self.viewModel.onQuestClick += self.__onQuestClick

    def __removeListeners(self):
        self.viewModel.onQuestClick -= self.__onQuestClick

    def __onQuestClick(self):
        from gui.impl.lobby.bootcamp.bootcamp_progress_view import BootcampProgressWindow
        self.uiBootcampLogger.log(BCLogActions.CLICK.value)
        wndFlags = WindowFlags.WINDOW | WindowFlags.WINDOW_FULLSCREEN
        window = BootcampProgressWindow(wndFlags=wndFlags)
        window.load()

    def _onLoading(self, *args, **kwargs):
        super(BootcampQuestWidgetView, self)._onLoading()
        with self.viewModel.transaction() as tx:
            tx.setCurrent(g_bootcamp.getLessonNum())
            tx.setTotal(g_bootcamp.getContextIntParameter('lastLessonNum'))
class BCInterludeVideoPage(BCVideoPage):
    appLoader = dependency.descriptor(IAppLoader)
    uiBootcampLogger = BootcampLogger(BC_LOG_KEYS.BC_INTERLUDE_VIDEO)

    def __init__(self, settings):
        super(BCInterludeVideoPage, self).__init__(settings)
        self._content = settings

    @property
    def content(self):
        return self._content

    def _populate(self):
        self.uiBootcampLogger.startAction(BCLogActions.VIDEO_FINISHED.value)
        super(BCInterludeVideoPage, self)._populate()
        self.appLoader.onGUISpaceLeft += self._onGUISpaceLeft

    def _dispose(self):
        self.appLoader.onGUISpaceLeft -= self._onGUISpaceLeft
        super(BCInterludeVideoPage, self)._dispose()

    def _onFinish(self):
        if self.content.get('exitEvent', False):
            self.content['exitEvent']()
        super(BCInterludeVideoPage, self)._onFinish()

    def _onGUISpaceLeft(self, _):
        super(BCInterludeVideoPage, self)._onFinish()

    def videoFinished(self, skipped=False):
        self.uiBootcampLogger.stopAction(BCLogActions.VIDEO_FINISHED.value,
                                         skipped=skipped)
        super(BCInterludeVideoPage, self).videoFinished()
class BootcampOptDeviceSetupSubView(OptDeviceSetupSubView):
    uiBootcampLogger = BootcampLogger(BCLogKeys.BC_DEVICE_SETUP_SUB_VIEW.value)

    @uiBootcampLogger.dLog(BCLogActions.SHOW.value)
    def onLoading(self, currentSlotID, *args, **kwargs):
        super(BootcampOptDeviceSetupSubView, self).onLoading(currentSlotID, *args, **kwargs)
        if any(self._interactor.getCurrentLayout()):
            return
        items = self._provider.getItemsList()
        for item in items:
            if item.isInInventory:
                self._onSelectItem({'intCD': item.intCD,
                 'isAutoSelect': True})
                break

    def finalize(self):
        if self._currentTabName:
            self.uiBootcampLogger.log(BCLogActions.CLOSE.value)
        super(BootcampOptDeviceSetupSubView, self).finalize()

    def _onSelectItem(self, args):
        self.uiBootcampLogger.log(BCLogActions.SELECT.value, item_id=args.get('intCD'))
        super(BootcampOptDeviceSetupSubView, self)._onSelectItem(args)

    def _createTabsController(self):
        return _BootcampOptDeviceTabsController()

    def _onDealConfirmed(self, _=None):
        self.uiBootcampLogger.log(BCLogActions.CONFIRM.value)
        super(BootcampOptDeviceSetupSubView, self)._onDealConfirmed(_)
Exemple #4
0
class BootcampProgressView(ViewImpl):
    __slots__ = ('__blur', '__tooltipData')
    uiBootcampLogger = BootcampLogger(
        BCLogKeys.BC_CURRENT_PROGRESS_WIDGET.value)

    def __init__(self, layoutID, *args, **kwargs):
        settings = ViewSettings(layoutID)
        settings.model = BootcampProgressModel()
        settings.args = args
        settings.kwargs = kwargs
        self.__blur = None
        self.__tooltipData = {}
        super(BootcampProgressView, self).__init__(settings)
        return

    @property
    def viewModel(self):
        return super(BootcampProgressView, self).getViewModel()

    def createToolTip(self, event):
        if event.contentID == R.views.common.tooltip_window.backport_tooltip_content.BackportTooltipContent(
        ):
            tooltipId = event.getArgument('tooltipId')
            if tooltipId:
                tooltipData = self.__tooltipData[int(tooltipId)]
                window = BackportTooltipWindow(tooltipData,
                                               self.getParentWindow())
                if window:
                    window.load()
                return window

    def _initialize(self):
        super(BootcampProgressView, self)._initialize()
        window = self.getParentWindow()
        self.__blur = CachedBlur(enabled=True, ownLayer=window.layer - 1)

    def _onLoading(self, *args, **kwargs):
        super(BootcampProgressView, self)._onLoading(*args, **kwargs)
        with self.viewModel.transaction() as model:
            g_bootcamp.fillProgressBar(model, self.__tooltipData,
                                       ICON_SIZE.BIG)

    def _finalize(self):
        self.uiBootcampLogger.log(BCLogActions.CLOSE.value)
        self.__blur.fini()
        super(BootcampProgressView, self)._finalize()
Exemple #5
0
class ModeSelectorView(ViewImpl):
    __slots__ = ('__blur', '__dataProvider', '__prevAppBackgroundAlpha',
                 '__isEventEnabled', '__isClickProcessing',
                 '__prevOptimizationEnabled', '__isGraphicsRestored')
    uiLogger = BaseModeSelectorLogger(LOG_KEYS.MS_WINDOW)
    uiBootcampLogger = BootcampLogger(LOG_KEYS.MS_WINDOW)
    _COMMON_SOUND_SPACE = MODE_SELECTOR_SOUND_SPACE
    __appLoader = dependency.descriptor(IAppLoader)
    __bootcamp = dependency.descriptor(IBootcampController)
    __lobbyContext = dependency.descriptor(ILobbyContext)
    __gui = dependency.descriptor(IGuiLoader)
    __tooltipByContentID = {
        R.views.lobby.battle_pass.tooltips.BattlePassNotStartedTooltipView():
        BattlePassNotStartedTooltipView,
        R.views.lobby.battle_pass.tooltips.BattlePassCompletedTooltipView():
        BattlePassCompletedTooltipView,
        R.views.lobby.battle_pass.tooltips.BattlePassInProgressTooltipView():
        partial(BattlePassInProgressTooltipView,
                battleType=QUEUE_TYPE.RANDOMS),
        R.views.lobby.battle_pass.tooltips.BattlePass3dStyleNotChosenTooltip():
        BattlePass3dStyleNotChosenTooltip
    }
    layoutID = R.views.lobby.mode_selector.ModeSelectorView()
    _areWidgetsVisible = False

    def __init__(self, layoutId, isEventEnabled=False, provider=None):
        super(ModeSelectorView, self).__init__(
            ViewSettings(layoutId, ViewFlags.LOBBY_TOP_SUB_VIEW,
                         ModeSelectorModel()))
        self.__dataProvider = provider if provider else ModeSelectorDataProvider(
        )
        self.__blur = None
        self.__prevOptimizationEnabled = False
        self.__prevAppBackgroundAlpha = 0.0
        self.__isEventEnabled = isEventEnabled
        self.__isClickProcessing = False
        self.__isGraphicsRestored = False
        self.inputManager.addEscapeListener(self.__handleEscape)
        return

    @property
    def viewModel(self):
        return self.getViewModel()

    @property
    def inputManager(self):
        app = self.__appLoader.getApp()
        return app.gameInputManager

    def createToolTip(self, event):
        if event.contentID == _R_BACKPORT_TOOLTIP():
            tooltipId = event.getArgument('tooltipId')
            if tooltipId in [
                    ModeSelectorTooltipsConstants.DISABLED_TOOLTIP,
                    ModeSelectorTooltipsConstants.CALENDAR_TOOLTIP
            ]:
                index = int(event.getArgument('index'))
                modeSelectorItem = self.__dataProvider.getItemByIndex(index)
                if modeSelectorItem is None:
                    return
                body = modeSelectorItem.disabledTooltipText
                if tooltipId == ModeSelectorTooltipsConstants.CALENDAR_TOOLTIP:
                    body = modeSelectorItem.calendarTooltipText
                return self.__createSimpleTooltip(event, body=body)
            if tooltipId == ModeSelectorTooltipsConstants.RANDOM_BP_PAUSED_TOOLTIP:
                return self.__createSimpleTooltip(
                    event,
                    header=backport.text(R.strings.battle_pass.tooltips.
                                         entryPoint.disabled.header()),
                    body=backport.text(R.strings.battle_pass.tooltips.
                                       entryPoint.disabled.body()))
            if tooltipId in [
                    ModeSelectorTooltipsConstants.
                    RANKED_CALENDAR_DAY_INFO_TOOLTIP,
                    ModeSelectorTooltipsConstants.RANKED_STEP_TOOLTIP,
                    ModeSelectorTooltipsConstants.
                    RANKED_BATTLES_LEAGUE_TOOLTIP,
                    ModeSelectorTooltipsConstants.
                    RANKED_BATTLES_EFFICIENCY_TOOLTIP,
                    ModeSelectorTooltipsConstants.
                    RANKED_BATTLES_POSITION_TOOLTIP,
                    ModeSelectorTooltipsConstants.RANKED_BATTLES_BONUS_TOOLTIP,
                    ModeSelectorTooltipsConstants.MAPBOX_CALENDAR_TOOLTIP,
                    ModeSelectorTooltipsConstants.EPIC_BATTLE_CALENDAR_TOOLTIP
            ]:
                return createAndLoadBackportTooltipWindow(
                    self.getParentWindow(),
                    tooltipId=tooltipId,
                    isSpecial=True,
                    specialArgs=(None, ))
            if tooltipId == ModeSelectorTooltipsConstants.RANKED_BATTLES_RANK_TOOLTIP:
                rankID = int(event.getArgument('rankID'))
                return createAndLoadBackportTooltipWindow(
                    self.getParentWindow(),
                    tooltipId=tooltipId,
                    isSpecial=True,
                    specialArgs=(rankID, ))
        return super(ModeSelectorView, self).createToolTip(event)

    def createToolTipContent(self, event, contentID):
        if contentID == _R_SIMPLE_TOOLTIP():
            return SimpleTooltipContent(contentID,
                                        event.getArgument('header', ''),
                                        event.getArgument('body', ''),
                                        event.getArgument('note', ''),
                                        event.getArgument('alert', ''))
        elif contentID == R.views.lobby.mode_selector.tooltips.SimplyFormatTooltip(
        ):
            modeName = event.getArgument('modeName', '')
            if modeName is None:
                return
            tooltipLocal = R.strings.mode_selector.mode.dyn(modeName)
            if not tooltipLocal:
                return
            header = backport.text(tooltipLocal.battlePassTooltip.header())
            body = backport.text(tooltipLocal.battlePassTooltip.body())
            if not header:
                return
            return SimplyFormatTooltipView(header, body)
        else:
            tooltipClass = self.__tooltipByContentID.get(contentID)
            return tooltipClass() if tooltipClass else None

    def destroyWindow(self):
        self.uiLogger.log(LOG_ACTIONS.CLOSED, details=LOG_CLOSE_DETAILS.OTHER)
        super(ModeSelectorView, self).destroyWindow()

    def createPopOverContent(self, event):
        return RandomBattlePopover(
        ) if event.contentID == R.views.lobby.mode_selector.popovers.RandomBattlePopover(
        ) else super(ModeSelectorView, self).createPopOverContent(event)

    def close(self):
        g_eventBus.handleEvent(events.DestroyGuiImplViewEvent(self.layoutID))

    def _onLoading(self):
        self.__gui.windowsManager.onWindowStatusChanged += self.__windowStatusChanged
        self.__lobbyContext.addHeaderNavigationConfirmator(
            self.__handleHeaderNavigation)
        self.viewModel.onItemClicked += self.__itemClickHandler
        self.viewModel.onShowMapSelectionClicked += self.__showMapSelectionClickHandler
        self.viewModel.onShowWidgetsClicked += self.__showWidgetsClickHandler
        self.viewModel.onInfoClicked += self.__infoClickHandler
        self.__dataProvider.onListChanged += self.__dataProviderListChangeHandler
        self.__updateViewModel(self.viewModel)
        self.__blur = CachedBlur(enabled=True, ownLayer=WindowLayer.MARKER)
        g_eventBus.handleEvent(events.GameEvent(
            events.GameEvent.HIDE_LOBBY_SUB_CONTAINER_ITEMS),
                               scope=EVENT_BUS_SCOPE.GLOBAL)
        g_eventBus.handleEvent(events.LobbyHeaderMenuEvent(
            events.LobbyHeaderMenuEvent.TOGGLE_VISIBILITY,
            ctx={
                'state': HeaderMenuVisibilityState.NOTHING,
                'alias': self.layoutID
            }),
                               scope=EVENT_BUS_SCOPE.LOBBY)
        app = self.__appLoader.getApp()
        self.__prevAppBackgroundAlpha = app.getBackgroundAlpha()
        app.setBackgroundAlpha(_BACKGROUND_ALPHA)
        self.__prevOptimizationEnabled = app.graphicsOptimizationManager.getEnable(
        )
        if self.__prevOptimizationEnabled:
            app.graphicsOptimizationManager.switchOptimizationEnabled(False)

    def _initialize(self):
        g_eventBus.handleEvent(
            FullscreenModeSelectorEvent(FullscreenModeSelectorEvent.NAME,
                                        ctx={'showing': True}))

    def _onLoaded(self):
        self.uiBootcampLogger.logOnlyFromBootcamp(LOG_ACTIONS.OPENED)
        self.inputManager.removeEscapeListener(self.__handleEscape)
        self.uiLogger.log(LOG_ACTIONS.OPENED,
                          isNew=self.__dataProvider.hasNewIndicator,
                          isWidget=self._areWidgetsVisible,
                          isFeatured=self.__isEventEnabled)

    def _finalize(self):
        self.uiBootcampLogger.logOnlyFromBootcamp(LOG_ACTIONS.CLOSED)
        self.__gui.windowsManager.onWindowStatusChanged -= self.__windowStatusChanged
        self.inputManager.removeEscapeListener(self.__handleEscape)
        self.__lobbyContext.deleteHeaderNavigationConfirmator(
            self.__handleHeaderNavigation)
        self.viewModel.onItemClicked -= self.__itemClickHandler
        self.viewModel.onShowMapSelectionClicked -= self.__showMapSelectionClickHandler
        self.viewModel.onShowWidgetsClicked -= self.__showWidgetsClickHandler
        self.viewModel.onInfoClicked -= self.__infoClickHandler
        saveBattlePassStateForItems(self.__dataProvider.itemList)
        self.__dataProvider.onListChanged -= self.__dataProviderListChangeHandler
        self.__dataProvider.dispose()
        g_eventBus.handleEvent(events.LobbyHeaderMenuEvent(
            events.LobbyHeaderMenuEvent.TOGGLE_VISIBILITY,
            ctx={'state': HeaderMenuVisibilityState.ALL}),
                               scope=EVENT_BUS_SCOPE.LOBBY)
        g_eventBus.handleEvent(
            FullscreenModeSelectorEvent(FullscreenModeSelectorEvent.NAME,
                                        ctx={'showing': False}))
        g_eventBus.handleEvent(events.GameEvent(
            events.GameEvent.REVEAL_LOBBY_SUB_CONTAINER_ITEMS),
                               scope=EVENT_BUS_SCOPE.GLOBAL)
        self.__restoreGraphics()

    def __restoreGraphics(self):
        if self.__isGraphicsRestored:
            return
        else:
            self.__isGraphicsRestored = True
            if self.__blur:
                self.__blur.fini()
                self.__blur = None
            app = self.__appLoader.getApp()
            if self.__prevOptimizationEnabled:
                app.graphicsOptimizationManager.switchOptimizationEnabled(True)
            app.setBackgroundAlpha(self.__prevAppBackgroundAlpha)
            return

    def __createSimpleTooltip(self, event, header='', body=''):
        window = DecoratedTooltipWindow(content=SimpleTooltipContent(
            _R_SIMPLE_TOOLTIP(), body=body, header=header),
                                        parent=self.getParentWindow())
        window.load()
        window.move(event.mouse.positionX, event.mouse.positionY)
        return window

    def __dataProviderListChangeHandler(self):
        with self.viewModel.transaction() as tx:
            self.__updateViewModel(tx)

    def __updateViewModel(self, vm):
        vm.setIsMapSelectionVisible(self.__dataProvider.isDemonstrator)
        vm.setIsMapSelectionEnabled(self.__dataProvider.isDemoButtonEnabled)
        vm.setAreWidgetsVisible(ModeSelectorView._areWidgetsVisible)
        if self.__bootcamp.isInBootcamp():
            vm.setState(ModeSelectorWindowStates.BOOTCAMP)
        cards = vm.getCardList()
        cards.clear()
        for item in self.__dataProvider.itemList:
            cards.addViewModel(item.viewModel)

        cards.invalidate()

    @process
    def __itemClickHandler(self, event):
        self.__isClickProcessing = True
        navigationPossible = yield self.__lobbyContext.isHeaderNavigationPossible(
        )
        if not navigationPossible:
            self.__isClickProcessing = False
            return
        else:
            index = int(event.get('index'))
            modeSelectorItem = self.__dataProvider.getItemByIndex(index)
            if modeSelectorItem is None:
                self.__isClickProcessing = False
                return
            self.uiLogger.log(
                LOG_ACTIONS.CARD_CLICKED,
                size=event.get('size'),
                details=event.get('cardMediaSize'),
                isNew=modeSelectorItem.viewModel.getIsNew(),
                mode=modeSelectorItem.modeName,
                isSelected=modeSelectorItem.viewModel.getIsSelected())
            modeSelectorItem.handleClick()
            if modeSelectorItem.isSelectable:
                specView = self.__gui.windowsManager.getViewByLayoutID(
                    BattleSessionView.layoutID)
                if modeSelectorItem.modeName != PREBATTLE_ACTION_NAME.SPEC_BATTLES_LIST and specView is not None:
                    specView.destroyWindow()
                self.__dataProvider.select(modeSelectorItem.modeName)
            self.uiLogger.log(LOG_ACTIONS.CLOSED,
                              details=LOG_CLOSE_DETAILS.CARD_CLICKED)
            self.close()
            return

    def __showMapSelectionClickHandler(self):
        demonstratorWindow = self.__appLoader.getApp(
        ).containerManager.getView(WindowLayer.WINDOW,
                                   criteria={
                                       POP_UP_CRITERIA.VIEW_ALIAS:
                                       VIEW_ALIAS.DEMONSTRATOR_WINDOW
                                   })
        if demonstratorWindow is not None:
            demonstratorWindow.onWindowClose()
        else:
            g_eventBus.handleEvent(LoadViewEvent(
                SFViewLoadParams(VIEW_ALIAS.DEMONSTRATOR_WINDOW)),
                                   scope=EVENT_BUS_SCOPE.LOBBY)
        return

    def __showWidgetsClickHandler(self):
        ModeSelectorView._areWidgetsVisible = not ModeSelectorView._areWidgetsVisible
        self.viewModel.setAreWidgetsVisible(
            ModeSelectorView._areWidgetsVisible)

    def __infoClickHandler(self, event):
        self.uiBootcampLogger.logOnlyFromBootcamp(
            LOG_ACTIONS.INFO_PAGE_ICON_CLICKED)
        index = int(event.get('index'))
        modeSelectorItem = self.__dataProvider.getItemByIndex(index)
        if modeSelectorItem is None:
            return
        else:
            self.uiLogger.log(LOG_ACTIONS.INFO_PAGE_ICON_CLICKED,
                              isNew=modeSelectorItem.viewModel.getIsNew(),
                              mode=modeSelectorItem.modeName)
            modeSelectorItem.handleInfoPageClick()
            return

    def __windowStatusChanged(self, uniqueID, newStatus):
        if newStatus == WindowStatus.LOADED:
            window = self.__gui.windowsManager.getWindow(uniqueID)
            parent = None
            if window.parent is not None and window.parent.content is not None:
                parent = window.parent.content
            if window.content == self or parent is not None and parent == self:
                return
            if window.layer in _CLOSE_LAYERS:
                self.__restoreGraphics()
                if not self.__isClickProcessing:
                    self.uiLogger.log(LOG_ACTIONS.CLOSED,
                                      details=LOG_CLOSE_DETAILS.OTHER)
                    self.close()
        return

    @adisp. async
    def __handleHeaderNavigation(self, callback):
        if self.viewStatus not in (ViewStatus.DESTROYED, ViewStatus.DESTROYING
                                   ) and not self.__isClickProcessing:
            self.close()
        callback(True)

    def __handleEscape(self):
        self.close()
Exemple #6
0
class BCBattleResult(BCBattleResultMeta):
    battleResults = dependency.descriptor(IBattleResultsService)
    appLoader = dependency.descriptor(IAppLoader)
    uiBootcampLogger = BootcampLogger(BC_LOG_KEYS.BC_RESULT_SCREEN)
    __sound_env__ = BattleResultsEnv
    __metaclass__ = event_bus_handlers.EventBusListener

    def __init__(self, ctx=None):
        super(BCBattleResult, self).__init__()
        if 'arenaUniqueID' not in ctx:
            raise UserWarning('Key "arenaUniqueID" is not found in context',
                              ctx)
        if not ctx['arenaUniqueID']:
            raise UserWarning(
                'Value of "arenaUniqueID" must be greater than 0')
        self.__arenaUniqueID = ctx['arenaUniqueID']
        self.__hasShowRewards = False
        self.__hasBonusInMedals = False
        self.__hasBonusInStats = False
        self.__awardSounds = []
        self.__music = None
        return

    def onFocusIn(self, alias):
        if self.__music is None:
            if self.alias == alias:
                self.__music = SoundGroups.g_instance.getSound2D(
                    _AMBIENT_SOUND)
                self.__music.play()
        elif self.alias != alias:
            self.__music.stop()
            self.__music = None
        return

    def click(self):
        self.destroy()
        Waiting.show('exit_battle')
        BigWorld.callback(0.5, self.delayedFinish)

    @staticmethod
    def delayedFinish():
        g_bootcampEvents.onResultScreenFinished()

    def onVideoButtonClick(self, index):
        g_bootcampEvents.onInterludeVideoStarted(index)
        for sound in self.__awardSounds:
            sound.stop()

    @event_bus_handlers.eventBusHandler(
        events.HideWindowEvent.HIDE_BATTLE_RESULT_WINDOW,
        EVENT_BUS_SCOPE.LOBBY)
    def selectVehicle(self, inventoryId):
        g_currentVehicle.selectVehicle(inventoryId)
        return g_currentVehicle.invID == inventoryId

    @simpleLog(argsIndex=0,
               resetTime=False,
               logOnce=True,
               argMap=BC_AWARDS_MAP,
               argMapSection=lambda: g_bootcamp.getContext()['lessonNum'])
    def onToolTipShow(self, rendererId):
        pass

    def onAnimationAwardStart(self, id):
        if not self.battleResults.areResultsPosted(self.__arenaUniqueID):
            return
        else:
            soundid = _SNDID_ACHIEVEMENT if self.__hasShowRewards else None
            if id == AWARD.MEDAlS_LIST and self.__hasBonusInMedals:
                soundid = _SNDID_BONUS
            elif id == AWARD.STATS_LIST and self.__hasBonusInStats:
                soundid = _SNDID_BONUS
            if soundid is not None:
                sound = SoundGroups.g_instance.getSound2D(soundid)
                self.__awardSounds.append(sound)
                sound.play()
            return

    @loggerEntry
    def _populate(self):
        g_bootcampEvents.onResultScreenFinished += self.__onResultScreenFinished
        g_bootcampEvents.onInterludeVideoStarted += self.__onInterludeVideoStarted
        g_bootcampEvents.onInterludeVideoFinished += self.__onInterludeVideoFinished
        g_playerEvents.onDisconnected += self._onDisconnected
        self.__music = SoundGroups.g_instance.getSound2D(_AMBIENT_SOUND)
        if self.__music is not None:
            self.__music.play()
        self.soundManager.playSound(BOOTCAMP_SOUND.NEW_UI_ELEMENT_SOUND)
        super(BCBattleResult, self)._populate()
        if self.battleResults.areResultsPosted(self.__arenaUniqueID):
            self.__setBattleResults()
        self.app.as_loadLibrariesS([
            'guiControlsLobbyBattleDynamic.swf', 'guiControlsLobbyDynamic.swf'
        ])
        self.appLoader.attachCursor(app_settings.APP_NAME_SPACE.SF_LOBBY,
                                    _CTRL_FLAG.GUI_ENABLED)
        g_bootcampEvents.onResultScreenPopulated()
        return

    @simpleLog(action=DEPRECATED_BC_LOG_ACTIONS.CONTINUE_BUTTON_PRESSED)
    def _dispose(self):
        g_bootcampEvents.onResultScreenFinished -= self.__onResultScreenFinished
        g_bootcampEvents.onInterludeVideoStarted -= self.__onInterludeVideoStarted
        g_bootcampEvents.onInterludeVideoFinished -= self.__onInterludeVideoFinished
        g_playerEvents.onDisconnected -= self._onDisconnected
        for sound in self.__awardSounds:
            sound.stop()

        del self.__awardSounds[:]
        if self.__music is not None:
            self.__music.stop()
            self.__music = None
        super(BCBattleResult, self)._dispose()
        return

    def __setBattleResults(self):
        vo = self.battleResults.getResultsVO(self.__arenaUniqueID)
        self.as_setDataS(vo)
        self.uiBootcampLogger.log(action=BCLogActions.SHOW.value,
                                  finishReason=vo.get('finishReason', None))
        self.__hasShowRewards = vo['showRewards']
        self.__hasBonusInMedals = vo['hasUnlocks']
        self.__hasBonusInStats = vo['xp']['value'] > 0 or vo['credits'][
            'value'] > 0
        return

    def __onResultScreenFinished(self):
        self.destroy()

    def __onInterludeVideoStarted(self, _):
        self.onFocusIn(alias='')

    def __onInterludeVideoFinished(self):
        self.onFocusIn(alias=self.alias)

    def _onDisconnected(self):
        self.destroy()
Exemple #7
0
class BCResearch(Research):
    uiBootcampLogger = BootcampLogger(BC_LOG_KEYS.BC_RESEARCH_VEHICLES)
    BC_MESSAGE_WINDOW_OPEN_SOUND_ID = 'bc_info_line_woosh'

    def __init__(self, ctx=None):
        super(BCResearch, self).__init__(ctx, skipConfirm=False)
        self._data = BCResearchItemsData(dumpers.ResearchItemsObjDumper())
        self._resolveLoadCtx(ctx=ctx)

    @loggerEntry
    def _populate(self):
        super(BCResearch, self)._populate()

    @simpleLog(
        action=BC_LOG_ACTIONS.UNLOCK_ITEM,
        restrictions={'lesson_id': lambda x: x <= LIMITS.RESEARCH_MAX_LESSON},
        logOnce=True)
    def request4Unlock(self, unlockCD, topLevel):
        self.soundManager.playSound(self.BC_MESSAGE_WINDOW_OPEN_SOUND_ID)
        super(BCResearch, self).request4Unlock(unlockCD, topLevel)

    def _doUnlockItemAction(self, itemCD, unlockProps):
        ItemsActionsFactory.doAction(ItemsActionsFactory.BC_UNLOCK_ITEM,
                                     itemCD,
                                     unlockProps,
                                     skipConfirm=self._skipConfirm)

    @simpleLog(
        action=BC_LOG_ACTIONS.BUY_ITEM,
        restrictions={'lesson_id': lambda x: x <= LIMITS.RESEARCH_MAX_LESSON},
        logOnce=True)
    def request4Buy(self, itemCD):
        if getTypeOfCompactDescr(int(itemCD)) != GUI_ITEM_TYPE.VEHICLE:
            self.soundManager.playSound(self.BC_MESSAGE_WINDOW_OPEN_SOUND_ID)
        super(BCResearch, self).request4Buy(itemCD)

    def _doBuyAndInstallItemAction(self, itemCD):
        ItemsActionsFactory.doAction(
            ItemsActionsFactory.BC_BUY_AND_INSTALL_ITEM,
            itemCD,
            self._data.getRootCD(),
            skipConfirm=self._skipConfirm)

    def onModuleHover(self, itemCD):
        pass

    def invalidateVehCompare(self):
        pass

    def invalidateUnlocks(self, unlocks):
        self.redraw()

    @uiBootcampLogger.dLogOnce(action=BCLogActions.BUTTON_BACK_TO_HANGAR.value)
    def exitFromResearch(self):
        super(BCResearch, self).exitFromResearch()

    def goToVehicleView(self, itemCD):
        vehicle = self._itemsCache.items.getItemByCD(int(itemCD))
        if vehicle.isInInventory:
            self.uiBootcampLogger.logOnce(
                action=BCLogActions.BUTTON_VIEW_IN_HANGAR.value)
            shared_events.selectVehicleInHangar(itemCD)

    def goToNextVehicle(self, vehCD):
        nationData = g_bootcamp.getNationData()
        super(BCResearch, self).goToNextVehicle(vehCD)
        if vehCD not in (nationData.get('vehicle_first'),
                         nationData.get('vehicle_second')):
            self.exitFromResearch()

    def setupContextHints(self, hintID):
        pass

    def _getRootData(self):
        result = super(BCResearch, self)._getRootData()
        result['vehicleButton']['compareBtnEnabled'] = False
        result['vehicleButton']['previewBtnEnabled'] = False
        return result

    def _dispose(self):
        self._listener.stopListen()
        super(BCResearch, self)._dispose()

    def _getExperienceInfoLinkage(self):
        return RESEARCH_ALIASES.BOOTCAMP_EXPERIENCE_INFO
class BootcampExitView(ViewImpl):
    __slots__ = ('__blur', '__tooltipData', '__callback', '__isInBattle')
    __appLoader = dependency.descriptor(IAppLoader)
    __bootcampController = dependency.descriptor(IBootcampController)
    uiBootcampLogger = BootcampLogger(BCLogKeys.BC_EXIT_VIEW.value)

    def __init__(self, callback, isInBattle, *args, **kwargs):
        settings = ViewSettings(R.views.lobby.bootcamp.BootcampExitView())
        settings.model = BootcampExitModel()
        settings.args = args
        settings.kwargs = kwargs
        self.__blur = None
        self.__tooltipData = {}
        self.__callback = callback
        self.__isInBattle = isInBattle
        super(BootcampExitView, self).__init__(settings)
        return

    @property
    def viewModel(self):
        return super(BootcampExitView, self).getViewModel()

    def createToolTip(self, event):
        if event.contentID == R.views.common.tooltip_window.backport_tooltip_content.BackportTooltipContent(
        ):
            tooltipId = event.getArgument('tooltipId')
            if tooltipId:
                tooltipData = self.__tooltipData[int(tooltipId)]
                window = BackportTooltipWindow(tooltipData,
                                               self.getParentWindow())
                if window is None:
                    return
                window.load()
                return window
        return

    def _initialize(self):
        super(BootcampExitView, self)._initialize()
        window = self.getParentWindow()
        if self.__isInBattle:
            app = self.__appLoader.getApp()
            app.enterGuiControlMode(self.uniqueID, True, False)
        else:
            self.__blur = CachedBlur(enabled=True, ownLayer=window.layer - 1)

    @uiBootcampLogger.dLog(BCLogActions.SHOW.value)
    def _onLoading(self, *args, **kwargs):
        super(BootcampExitView, self)._onLoading(*args, **kwargs)
        with self.viewModel.transaction() as model:
            model.onLeaveBootcamp += self.__onLeave
            model.setIsInBattle(self.__isInBattle)
            model.setIsNeedAwarding(self.__bootcampController.needAwarding())
            model.setIsReferral(self.__bootcampController.isReferralEnabled())
            g_bootcamp.fillProgressBar(model, self.__tooltipData)

    @uiBootcampLogger.dLog(BCLogActions.CLOSE.value)
    def _finalize(self):
        self.viewModel.onLeaveBootcamp -= self.__onLeave
        if self.__isInBattle:
            app = self.__appLoader.getApp()
            app.leaveGuiControlMode(self.uniqueID)
        g_eventBus.handleEvent(events.LoadViewEvent(
            SFViewLoadParams(VIEW_ALIAS.LOBBY_MENU)),
                               scope=EVENT_BUS_SCOPE.LOBBY)
        if self.__blur:
            self.__blur.fini()
        super(BootcampExitView, self)._finalize()

    @uiBootcampLogger.dLog(BCLogActions.LEAVE.value)
    def __onLeave(self):
        self.__callback()
        self.destroyWindow()
class BCQuestsView(LobbySubView, MissionDetailsContainerViewMeta):
    __background_alpha__ = 0.8
    _bootcamp = dependency.descriptor(IBootcampController)
    _LINES_IN_DESCR = 3
    _TANK_LEVEL = 3
    _COMMA = ', '
    _OBTAINED_IMAGE_OFFSET = 6
    _MISSIONS_DONE = 0
    _MISSIONS_COUNT = 1
    _AWARD_LABEL_PADDING = 20
    _GOLD_LABEL = '500'
    _PAGES_LINKAGE = 'MissionDetailsPageGroup'
    uiBootcampLogger = BootcampLogger(BCLogKeys.BC_QUESTS_VIEW.value)

    @uiBootcampLogger.dLog(BCLogActions.CLOSE.value)
    def closeView(self):
        self.app.setBackgroundAlpha(0.0)
        self.destroy()

    def requestMissionData(self, index):
        isObtained = not self._bootcamp.needAwarding()
        vehicleSelector = self.getComponent(QUESTS_ALIASES.MISSIONS_VEHICLE_SELECTOR_ALIAS)
        if vehicleSelector is not None:
            criteria = REQ_CRITERIA.VEHICLE.LEVELS([self._TANK_LEVEL]) | REQ_CRITERIA.IN_OWNERSHIP
            vehicleSelector.setCriteria(criteria, [])
        bTypesData = formatters.packMissionBonusTypeElements([ARENA_BONUS_TYPE.REGULAR])
        bTypes = self._COMMA.join([ iconData.iconLabel for iconData in bTypesData ])
        tooltipBody = makeString(QUESTS.MISSIONDETAILS_CONDITIONS_BATTLEBONUSTYPE_BODY, battleBonusTypes=bTypes)
        missionData = {'title': text_styles.promoSubTitle(backport.text(R.strings.bootcamp.quest.title())),
         'battleConditions': [{'rendererLinkage': MISSIONS_ALIASES.BATTLE_CONDITION,
                               'linkageBig': MISSIONS_ALIASES.ANG_GROUP_BIG_LINKAGE,
                               'isDetailed': True,
                               'data': [{'title': text_styles.promoSubTitle(backport.text(R.strings.bootcamp.quest.name())),
                                         'description': text_styles.highlightText(backport.text(R.strings.bootcamp.quest.condition())),
                                         'state': MISSIONS_ALIASES.NONE,
                                         'icon': backport.image(R.images.gui.maps.icons.quests.battleCondition.c_128.icon_battle_condition_battles_128x128()),
                                         'maxDescLines': self._LINES_IN_DESCR}],
                               'linkage': MISSIONS_ALIASES.ANG_GROUP_DETAILED_LINKAGE}],
         'statusLabel': text_styles.concatStylesWithSpace(icons.inProgress(), text_styles.standard(backport.text(R.strings.quests.missionDetails.missionsComplete(), count=text_styles.stats(self._MISSIONS_DONE), total=text_styles.standard(self._MISSIONS_COUNT)))),
         'awards': [{'label': text_styles.gold(backport.text(R.strings.menu.premium.packet.days3())),
                     'padding': self._AWARD_LABEL_PADDING,
                     'imgSource': backport.image(R.images.gui.maps.icons.quests.bonuses.big.premium_3()),
                     'align': LABEL_ALIGN.RIGHT,
                     'tooltip': TOOLTIPS.AWARDITEM_PREMIUM,
                     'obtainedImage': backport.image(R.images.gui.maps.icons.library.awardObtained()),
                     'isObtained': isObtained,
                     'obtainedImageOffset': self._OBTAINED_IMAGE_OFFSET}, {'label': text_styles.gold(self._GOLD_LABEL),
                     'padding': self._AWARD_LABEL_PADDING,
                     'imgSource': backport.image(R.images.gui.maps.icons.quests.bonuses.big.gold()),
                     'align': LABEL_ALIGN.RIGHT,
                     'tooltip': TOOLTIPS.AWARDITEM_GOLD,
                     'obtainedImage': backport.image(R.images.gui.maps.icons.library.awardObtained()),
                     'isObtained': isObtained,
                     'obtainedImageOffset': self._OBTAINED_IMAGE_OFFSET}],
         'background': 'default',
         'prebattleConditions': [formatters.packMissionPrebattleCondition(text_styles.main(bTypesData[0].iconLabel), ''.join([ iconData.icon for iconData in bTypesData ]), makeTooltip(QUESTS.MISSIONDETAILS_CONDITIONS_BATTLEBONUSTYPE, tooltipBody))],
         'uiDecoration': backport.image(R.images.gui.maps.icons.quests.decorations.default_750x264()),
         'statusTooltipData': {}}
        self.as_setMissionDataS(missionData)
        return

    @uiBootcampLogger.dLog(BCLogActions.SHOW.value)
    def _populate(self):
        super(BCQuestsView, self)._populate()
        self.as_setInitDataS({'pages': [{'buttonsGroup': self._PAGES_LINKAGE,
                    'pageIndex': 0,
                    'selected': True}]})