class _HangarSpace(object): isPremium = property(lambda self: (self.__isSpacePremium if self.__spaceInited else self.__delayedIsPremium)) def __init__(self): self.__space = ClientHangarSpace() self.__videoCameraController = HangarVideoCameraController() self.__inited = False self.__spaceInited = False self.__isSpacePremium = False self.__igrSpaceType = constants.IGR_TYPE.NONE self.__delayedIsPremium = False self.__delayedForceRefresh = False self.__delayedRefreshCallback = None self.__spaceDestroyedDuringLoad = False self.__lastUpdatedVehicle = None self.onSpaceCreate = Event.Event() from helpers.statistics import g_statistics g_statistics.subscribeToHangarSpaceCreate(self.onSpaceCreate) return @property def space(self): if self.spaceInited: return self.__space else: return None @property def inited(self): return self.__inited @property def spaceInited(self): return self.__spaceInited def spaceLoading(self): return self.__space.spaceLoading() def init(self, isPremium): self.__videoCameraController.init() if not self.__spaceInited: LOG_DEBUG('_HangarSpace::init') Waiting.show('loadHangarSpace') self.__inited = True self.__isSpacePremium = isPremium self.__igrSpaceType = game_control.g_instance.igr.getRoomType() self.__space.create(isPremium, self.__spaceDone) if self.__lastUpdatedVehicle is not None: self.updateVehicle(self.__lastUpdatedVehicle) game_control.g_instance.gameSession.onPremiumNotify += self.onPremiumChanged return def refreshSpace(self, isPremium, forceRefresh = False): igrType = game_control.g_instance.igr.getRoomType() if self.__isSpacePremium == isPremium and self.__igrSpaceType == igrType and not forceRefresh: return elif not self.__spaceInited and self.__space.spaceLoading(): LOG_DEBUG('_HangarSpace::refreshSpace(isPremium={0!r:s}) - is delayed until space load is done'.format(isPremium)) if self.__delayedRefreshCallback is None: self.__delayedRefreshCallback = BigWorld.callback(0.1, self.__delayedRefresh) self.__delayedIsPremium = isPremium self.__delayedForceRefresh = forceRefresh return else: LOG_DEBUG('_HangarSpace::refreshSpace(isPremium={0!r:s})'.format(isPremium)) self.destroy() self.init(isPremium) self.__isSpacePremium = isPremium self.__igrSpaceType = igrType return def destroy(self): self.__videoCameraController.destroy() if self.__spaceInited: LOG_DEBUG('_HangarSpace::destroy') self.__inited = False self.__spaceInited = False self.__space.destroy() elif self.spaceLoading(): LOG_DEBUG('_HangarSpace::destroy - delayed until space load done') self.__spaceDestroyedDuringLoad = True if self.__delayedRefreshCallback is not None: BigWorld.cancelCallback(self.__delayedRefreshCallback) self.__delayedRefreshCallback = None game_control.g_instance.gameSession.onPremiumNotify -= self.onPremiumChanged return def _stripVehCompDescrIfRoaming(self, vehCompDescr): if game_control.g_instance.roaming.isInRoaming(): vehCompDescr = vehicles.stripCustomizationFromVehicleCompactDescr(vehCompDescr, True, True, False)[0] return vehicles.VehicleDescr(compactDescr=vehCompDescr) def updateVehicle(self, vehicle, historicalBattle = None): if self.__inited: Waiting.show('loadHangarSpaceVehicle', True) historicalBattleDef = None if historicalBattle is not None and historicalBattle.canParticipateWith(vehicle.intCD): historicalBattleDef = historicalBattle.getData() igrRoomType = game_control.g_instance.igr.getRoomType() igrLayout = g_itemsCache.items.inventory.getIgrCustomizationsLayout() updatedVehCompactDescr = getCustomizedVehCompDescr(igrLayout, vehicle.invID, igrRoomType, vehicle.descriptor.makeCompactDescr(), historicalBattleDef) self.__space.recreateVehicle(self._stripVehCompDescrIfRoaming(updatedVehCompactDescr), vehicle.modelState, self.__changeDone) self.__lastUpdatedVehicle = vehicle return def removeVehicle(self): if self.__inited: Waiting.show('loadHangarSpaceVehicle') if self.__space is not None: self.__space.removeVehicle() self.__changeDone() self.__lastUpdatedVehicle = None return def onPremiumChanged(self, isPremium, attrs, premiumExpiryTime): self.refreshSpace(isPremium) def __spaceDone(self): self.__spaceInited = True if self.__spaceDestroyedDuringLoad: self.__spaceDestroyedDuringLoad = False self.destroy() self.onSpaceCreate() Waiting.hide('loadHangarSpace') def __changeDone(self): Waiting.hide('loadHangarSpaceVehicle') def __delayedRefresh(self): self.__delayedRefreshCallback = None if not self.__spaceInited: self.__delayedRefreshCallback = BigWorld.callback(0.1, self.__delayedRefresh) return else: self.refreshSpace(self.__delayedIsPremium, self.__delayedForceRefresh) return
class _HangarSpace(object): isPremium = property(lambda self: (self.__isSpacePremium if self.__spaceInited else self.__delayedIsPremium)) gameSession = dependency.descriptor(IGameSessionController) igrCtrl = dependency.descriptor(IIGRController) statsCollector = dependency.descriptor(IStatisticsCollector) def __init__(self): self.__space = ClientHangarSpace() self.__videoCameraController = HangarVideoCameraController() self.__inited = False self.__spaceInited = False self.__isSpacePremium = False self.__igrSpaceType = constants.IGR_TYPE.NONE self.__delayedIsPremium = False self.__delayedForceRefresh = False self.__delayedRefreshCallback = None self.__spaceDestroyedDuringLoad = False self.__lastUpdatedVehicle = None self.onSpaceCreate = Event.Event() self.onObjectSelected = Event.Event() self.onObjectUnselected = Event.Event() self.onObjectClicked = Event.Event() return @property def space(self): if self.spaceInited: return self.__space else: return None @property def inited(self): return self.__inited @property def spaceInited(self): return self.__spaceInited def spaceLoading(self): return self.__space.spaceLoading() def init(self, isPremium): self.statsCollector.noteHangarLoadingState( HANGAR_LOADING_STATE.START_LOADING_SPACE) self.__videoCameraController.init() self.__spaceDestroyedDuringLoad = False if not self.__spaceInited: LOG_DEBUG('_HangarSpace::init') Waiting.show('loadHangarSpace') self.__inited = True self.__isSpacePremium = isPremium self.__igrSpaceType = self.igrCtrl.getRoomType() self.__space.create(isPremium, self.__spaceDone) if self.__lastUpdatedVehicle is not None: self.updateVehicle(self.__lastUpdatedVehicle) self.gameSession.onPremiumNotify += self.onPremiumChanged return def refreshSpace(self, isPremium, forceRefresh=False): igrType = self.igrCtrl.getRoomType() if self.__isSpacePremium == isPremium and self.__igrSpaceType == igrType and not forceRefresh: return elif not self.__spaceInited and self.__space.spaceLoading(): LOG_DEBUG( '_HangarSpace::refreshSpace(isPremium={0!r:s}) - is delayed until space load is done' .format(isPremium)) if self.__delayedRefreshCallback is None: self.__delayedRefreshCallback = BigWorld.callback( 0.1, self.__delayedRefresh) self.__delayedIsPremium = isPremium self.__delayedForceRefresh = forceRefresh return else: LOG_DEBUG('_HangarSpace::refreshSpace(isPremium={0!r:s})'.format( isPremium)) self.destroy() self.init(isPremium) self.__isSpacePremium = isPremium self.__igrSpaceType = igrType return def destroy(self): self.__videoCameraController.destroy() if self.__spaceInited: LOG_DEBUG('_HangarSpace::destroy') self.__inited = False self.__spaceInited = False self.__space.destroy() elif self.spaceLoading(): LOG_DEBUG('_HangarSpace::destroy - delayed until space load done') self.__spaceDestroyedDuringLoad = True self.__space.destroy() self.__inited = False self.__spaceInited = False if self.__delayedRefreshCallback is not None: BigWorld.cancelCallback(self.__delayedRefreshCallback) self.__delayedRefreshCallback = None self.gameSession.onPremiumNotify -= self.onPremiumChanged return def updateVehicle(self, vehicle): if self.__inited: Waiting.show('loadHangarSpaceVehicle', True) self.statsCollector.noteHangarLoadingState( HANGAR_LOADING_STATE.START_LOADING_VEHICLE) self.__space.recreateVehicle(vehicle.getCustomizedDescriptor(), vehicle.modelState, self.__changeDone) self.__lastUpdatedVehicle = vehicle def updatePreviewVehicle(self, vehicle): if self.__inited: Waiting.show('loadHangarSpaceVehicle', True) self.__space.recreateVehicle(vehicle.descriptor, vehicle.modelState, self.__changeDone) self.__lastUpdatedVehicle = vehicle def removeVehicle(self): if self.__inited: Waiting.show('loadHangarSpaceVehicle') if self.__space is not None: self.__space.removeVehicle() Waiting.hide('loadHangarSpaceVehicle') self.__lastUpdatedVehicle = None return def onPremiumChanged(self, isPremium, attrs, premiumExpiryTime): self.refreshSpace(isPremium) def __spaceDone(self): self.__spaceInited = True if self.__spaceDestroyedDuringLoad: self.__spaceDestroyedDuringLoad = False self.destroy() self.onSpaceCreate() Waiting.hide('loadHangarSpace') self.statsCollector.noteHangarLoadingState( HANGAR_LOADING_STATE.FINISH_LOADING_SPACE) self.statsCollector.noteHangarLoadingState( HANGAR_LOADING_STATE.HANGAR_READY, showSummaryNow=True) def __changeDone(self): Waiting.hide('loadHangarSpaceVehicle') self.statsCollector.noteHangarLoadingState( HANGAR_LOADING_STATE.FINISH_LOADING_VEHICLE) def __delayedRefresh(self): self.__delayedRefreshCallback = None if not self.__spaceInited: self.__delayedRefreshCallback = BigWorld.callback( 0.1, self.__delayedRefresh) return else: self.refreshSpace(self.__delayedIsPremium, self.__delayedForceRefresh) return def leftButtonClicked(self): self.onObjectClicked()
class _HangarSpace(object): profiler_vehicle = BigWorld.ProfilerEvent('VehicleLoading') def __init__(self): self.__space = ClientHangarSpace() self.__inited = False self.__isSpacePremium = False self.__spaceLoaded = False self.__delayedSpaceData = None self.__isVechicleLoading = False self.__delayedVechicleData = None self.__freeze = False self.eOnVehicleStart = Event.Event() self.eOnVehicleLoaded = Event.Event() self.__dbgHangarFlyingMode = False return def init(self, hangarConfig, overrideSpace = None): if not self.__inited: LOG_TRACE('_HangarSpace::init') self.setFreeze(False) self.__inited = True self.__loadHangarSpace(hangarConfig, overrideSpace) def destroy(self): self.__inited = False self.__isVechicleLoading = False self.__delayedSpaceData = None self.__delayedVechicleData = None self.eOnVehicleStart.clear() self.eOnVehicleLoaded.clear() if self.__spaceLoaded: LOG_TRACE('_HangarSpace::destroy') self.__spaceLoaded = False self.__space.destroy() return @property def isVSEPlansStarted(self): if self.space: return self.space.vsePlansStarted return False def refreshDecals(self): modelManipulator = self.space.getModelManipulator() if self.space else None if modelManipulator is not None: modelManipulator.surface.refreshClanEmblem() return def refreshSpace(self, hangarConfig, overrideSpace = None): LOG_TRACE('_HangarSpace::refreshSpace', hangarConfig, self.__inited, self.__freeze, self.__hangarConfig) if self.__inited and not self.__freeze: if self.__hangarConfig != hangarConfig or overrideSpace: self.__loadHangarSpace(hangarConfig, overrideSpace) @property def isAircraftLoaded(self): return self.space is not None and self.space.getModelManipulator() is not None and not self.__inLoading() def refreshVehicle(self, vehicleInfo): if self.__inited and not self.__freeze: if self.__inLoading(): self.__delayedVechicleData = (vehicleInfo,) elif vehicleInfo: vehicleInfo.isVehicleLoaded = False self.__isVechicleLoading = True _HangarSpace.profiler_vehicle.start() self.eOnVehicleStart() self.__space.recreateVehicle(vehicleInfo, self.__vechicleDone, self.__dbgHangarFlyingMode) else: self.__space.removeVehicle() @property def space(self): if self.__spaceLoaded: return self.__space else: return None def setFreeze(self, freeze): LOG_TRACE('_HangarSpace::setFreeze', freeze) self.__freeze = freeze def refreshSpaceSound(self, category, value): if category == 'music': self.__space.refreshSpaceSound(value) def __vechicleDone(self): LOG_TRACE('_HangarSpace::__vechicleDone') self.__isVechicleLoading = False self.__checkDelayedData() self.eOnVehicleLoaded() _HangarSpace.profiler_vehicle.end() def __inLoading(self): return self.__space.spaceLoading() or self.__isVechicleLoading def __loadHangarSpace(self, hangarConfig, overrideSpace = None): LOG_TRACE('_HangarSpace::__loadHangarSpace', self.__space.spaceLoading(), self.__isVechicleLoading) if self.__inLoading(): LOG_TRACE('_HangarSpace::__loadHangarSpace(hangarConfig=' + str(hangarConfig) + ') - is delayed until space load is done') self.__delayedSpaceData = (hangarConfig, overrideSpace) else: camTargetShifted = False if self.__spaceLoaded: camTargetShifted = self.__space.hangarCamera.getStateObject().targetShifted self.__spaceLoaded = False self.__space.destroy() waitingID = Waiting.show(HANGAR_LOBBY_WAITING_SCREEN_MESSAGE, WaitingFlags.WORLD_DRAW_DISABLE | WaitingFlags.LOADING_FPS_MODE) self.__hangarConfig = hangarConfig self.__space.create(hangarConfig, partial(self.__spaceDone, waitingID), overrideSpace=overrideSpace) self.__space.hangarCamera.getStateObject().setCameraTargetShift(camTargetShifted) def __spaceDone(self, waitingID): LOG_TRACE('_HangarSpace::__spaceDone', self.__inited) self.__spaceLoaded = True self.__space.onSpaceLoaded() if not self.__inited: self.destroy() else: self.__checkDelayedData() GlobalEvents.onHangarLoaded() Waiting.hide(waitingID) def __checkDelayedData(self): LOG_TRACE('_HangarSpace::__checkDelayedData', self.__inited, self.__delayedSpaceData, self.__delayedVechicleData) if self.__inited: if self.__delayedSpaceData is not None: self.__loadHangarSpace(*self.__delayedSpaceData) self.__delayedSpaceData = None elif self.__delayedVechicleData: vechicleData = self.__delayedVechicleData[0] self.__delayedVechicleData = None self.refreshVehicle(vechicleData) return def dbgChangeSpace(self, name): if self.__inited and not self.__freeze: self.__loadHangarSpace(self.__hangarConfig, overrideSpace=name) self.dbgHangarFlyingMode(self.__dbgHangarFlyingMode, forceReload=True) def dbgHangarFlyingMode(self, enable = True, forceReload = False): if self.__dbgHangarFlyingMode == enable and not forceReload: return self.__dbgHangarFlyingMode = enable from BWPersonality import g_lobbyCarouselHelper vehicleInfo = g_lobbyCarouselHelper.getCarouselAirplaneSelected() if self.__inited and not self.__freeze: self.refreshVehicle(vehicleInfo) def dbgSwitchCameraView(self, camView): if self.__inited and not self.__freeze: self.__space.dbgSwitchCameraView(camView) def dbgRotateTurrets(self, command): if self.__inited and not self.__freeze: self.__space.dbgRotateTurrets(command) def dbgShowBBoxes(self, show): self.__space.dbgShowBBoxes(show) def switchHangarPremiumType(self): self.refreshSpace('premium' if self.__hangarConfig == 'basic' else 'basic')
class HangarSpace(IHangarSpace): isPremium = property(lambda self: self.__isSpacePremium if self.__spaceInited else self.__delayedIsPremium) gameSession = dependency.descriptor(IGameSessionController) igrCtrl = dependency.descriptor(IIGRController) statsCollector = dependency.descriptor(IStatisticsCollector) def __init__(self): self.__space = None self.__videoCameraController = HangarVideoCameraController() self.__inited = False self.__spaceInited = False self.__isModelLoaded = False self.__isSpacePremium = False self.__igrSpaceType = constants.IGR_TYPE.NONE self.__delayedIsPremium = False self.__delayedForceRefresh = False self.__delayedRefreshCallback = None self.__spaceDestroyedDuringLoad = False self.__lastUpdatedVehicle = None self.onSpaceRefresh = Event.Event() self.onSpaceRefreshCompleted = Event.Event() self.onSpaceCreating = Event.Event() self.onSpaceCreate = Event.Event() self.onSpaceDestroy = Event.Event() self.onSpaceChanged = Event.Event() self.onMouseEnter = Event.Event() self.onMouseExit = Event.Event() self.onMouseDown = Event.Event() self.onMouseUp = Event.Event() self.onHeroTankReady = Event.Event() self.onVehicleChanged = Event.Event() self.onVehicleChangeStarted = Event.Event() self.onSpaceChangedByAction = Event.Event() self.onNotifyCursorOver3dScene = Event.Event() self.__isCursorOver3DScene = False return @property def space(self): return self.__space if self.spaceInited else None @property def spaceID(self): return self.__space.getSpaceID() if self.__space else None @property def inited(self): return self.__inited @property def spaceInited(self): return self.__spaceInited @property def isCursorOver3DScene(self): return self.__isCursorOver3DScene @property def isModelLoaded(self): return self.__isModelLoaded @property def spacePath(self): return None if self.__space is None else self.__space.spacePath @property def visibilityMask(self): return None if self.__space is None else self.__space.visibilityMask def spaceLoading(self): return self.__space.spaceLoading( ) if self.__space is not None else False def getAnchorParams(self, slotId, areaId, regionId): return self.__space.getAnchorParams(slotId, areaId, regionId) def updateAnchorsParams(self, *args): self.__space.updateAnchorsParams(*args) def __onNotifyCursorOver3dScene(self, event): self.__isCursorOver3DScene = event.ctx.get('isOver3dScene', False) self.onNotifyCursorOver3dScene(self.__isCursorOver3DScene) @uniprof.regionDecorator(label='hangar.space.loading', scope='enter') def init(self, isPremium): if self.__space is None: self.__space = ClientHangarSpace( BoundMethodWeakref(self._changeDone)) self.statsCollector.noteHangarLoadingState( HANGAR_LOADING_STATE.START_LOADING_SPACE) self.__videoCameraController.init() self.__spaceDestroyedDuringLoad = False if not self.__spaceInited: LOG_DEBUG('HangarSpace::init') Waiting.show('loadHangarSpace') self.__inited = True self.__isSpacePremium = isPremium self.__igrSpaceType = self.igrCtrl.getRoomType() self.__space.create(isPremium, self.__spaceDone) self.onSpaceCreating() if self.__lastUpdatedVehicle is not None: self.startToUpdateVehicle(self.__lastUpdatedVehicle) self.gameSession.onPremiumNotify += self.onPremiumChanged g_keyEventHandlers.add(self.__handleKeyEvent) g_eventBus.addListener( events.LobbySimpleEvent.NOTIFY_CURSOR_OVER_3DSCENE, self.__onNotifyCursorOver3dScene) return def refreshSpace(self, isPremium, forceRefresh=False): igrType = self.igrCtrl.getRoomType() if self.__isSpacePremium == isPremium and self.__igrSpaceType == igrType and not forceRefresh: return else: self.onSpaceRefresh() if not self.__spaceInited and self.__space.spaceLoading(): LOG_DEBUG( 'HangarSpace::refreshSpace(isPremium={0!r:s}) - is delayed until space load is done' .format(isPremium)) if self.__delayedRefreshCallback is None: self.__delayedRefreshCallback = BigWorld.callback( 0.1, self.__delayedRefresh) self.__delayedIsPremium = isPremium self.__delayedForceRefresh = forceRefresh return LOG_DEBUG('HangarSpace::refreshSpace(isPremium={0!r:s})'.format( isPremium)) self.destroy() self.init(isPremium) self.__isSpacePremium = isPremium self.__igrSpaceType = igrType self.onSpaceRefreshCompleted() return def destroy(self): if self.__inited: g_keyEventHandlers.remove(self.__handleKeyEvent) g_eventBus.removeListener( events.LobbySimpleEvent.NOTIFY_CURSOR_OVER_3DSCENE, self.__onNotifyCursorOver3dScene) self.onSpaceDestroy(self.__spaceInited and not self.__spaceDestroyedDuringLoad) self.__videoCameraController.destroy() self.__isModelLoaded = False self.__isCursorOver3DScene = False if self.__spaceInited: LOG_DEBUG('HangarSpace::destroy') self.__inited = False self.__spaceInited = False self.__space.destroy() elif self.spaceLoading(): LOG_DEBUG('HangarSpace::destroy - delayed until space load done') self.__spaceDestroyedDuringLoad = True self.__space.destroy() self.__inited = False self.__spaceInited = False if self.__delayedRefreshCallback is not None: BigWorld.cancelCallback(self.__delayedRefreshCallback) self.__delayedRefreshCallback = None self.gameSession.onPremiumNotify -= self.onPremiumChanged return @g_execute_after_hangar_space_inited @uniprof.regionDecorator(label='hangar.vehicle.loading', scope='enter') def updateVehicle(self, vehicle, outfit=None): if self.__inited: self.__isModelLoaded = False self.onVehicleChangeStarted() self.statsCollector.noteHangarLoadingState( HANGAR_LOADING_STATE.START_LOADING_VEHICLE) self.__space.recreateVehicle(vehicle.descriptor, vehicle.modelState, outfit=outfit) self.__lastUpdatedVehicle = vehicle else: Waiting.hide('loadHangarSpaceVehicle') def startToUpdateVehicle(self, vehicle, outfit=None): Waiting.show('loadHangarSpaceVehicle', isSingle=True) self.updateVehicle(vehicle, outfit) def updateVehicleDescriptor(self, descr): if self.__inited: self.__space.updateVehicleDescriptor(descr) def __handleKeyEvent(self, event): if event.key == Keys.KEY_LEFTMOUSE: if event.isKeyDown(): self.onMouseDown() else: self.onMouseUp() @g_execute_after_hangar_space_inited def updatePreviewVehicle(self, vehicle, outfit=None): if self.__inited: self.__isModelLoaded = False self.onVehicleChangeStarted() Waiting.show('loadHangarSpaceVehicle', isSingle=True) self.__space.recreateVehicle(vehicle.descriptor, vehicle.modelState, outfit=outfit) self.__lastUpdatedVehicle = vehicle def getVehicleEntity(self): return self.__space.getVehicleEntity() if self.__inited else None def getVehicleEntityAppearance(self): entity = self.getVehicleEntity() return entity.appearance if entity is not None else None def updateVehicleOutfit(self, outfit): if self.__inited: self.__space.updateVehicleCustomization(outfit) def getCentralPointForArea(self, areaId): return self.__space.getCentralPointForArea( areaId) if self.__inited else Math.Vector3(0.0) @g_execute_after_hangar_space_inited def removeVehicle(self): if self.__inited: self.__isModelLoaded = False self.onVehicleChangeStarted() Waiting.show('loadHangarSpaceVehicle', isSingle=True) if self.__space is not None: self.__space.removeVehicle() Waiting.hide('loadHangarSpaceVehicle') self.__isModelLoaded = True self.onVehicleChanged() self.__lastUpdatedVehicle = None return def setVehicleSelectable(self, flag): self.__space.setVehicleSelectable(flag) def onPremiumChanged(self, isPremium, attrs, premiumExpiryTime): premiumHangar = _getHangarPath(True, self.__igrSpaceType) defaultHangar = _getHangarPath(False, self.__igrSpaceType) if premiumHangar != defaultHangar: self.refreshSpace(isPremium) self.__isSpacePremium = isPremium def resetLastUpdatedVehicle(self): self.__lastUpdatedVehicle = None return @uniprof.regionDecorator(label='hangar.space.loading', scope='exit') def __spaceDone(self): self.__spaceInited = True if self.__spaceDestroyedDuringLoad: self.destroy() self.__spaceDestroyedDuringLoad = False self.onSpaceCreate() Waiting.hide('loadHangarSpace') self.statsCollector.noteHangarLoadingState( HANGAR_LOADING_STATE.FINISH_LOADING_SPACE) self.statsCollector.noteHangarLoadingState( HANGAR_LOADING_STATE.HANGAR_READY) stats = self.statsCollector.getStatistics() player = BigWorld.player() if player is not None: LOG_DEBUG_DEV(stats) if stats['system'] and hasattr(player, 'logClientSystem'): BigWorld.player().logClientSystem(stats['system']) if stats['session'] and hasattr(player, 'logClientSessionStats'): BigWorld.player().logClientSessionStats(stats['session']) self.onHeroTankReady() return @uniprof.regionDecorator(label='hangar.vehicle.loading', scope='exit') def _changeDone(self): Waiting.hide('loadHangarSpaceVehicle') self.__isModelLoaded = True self.onVehicleChanged() self.statsCollector.noteHangarLoadingState( HANGAR_LOADING_STATE.FINISH_LOADING_VEHICLE) def __delayedRefresh(self): self.__delayedRefreshCallback = None if not self.__spaceInited: self.__delayedRefreshCallback = BigWorld.callback( 0.1, self.__delayedRefresh) return else: self.refreshSpace(self.__delayedIsPremium, self.__delayedForceRefresh) return
class _HangarSpace(object): isPremium = property(lambda self: (self.__isSpacePremium if self.__spaceInited else self.__delayedIsPremium)) def __init__(self): self.__space = ClientHangarSpace() self.__videoCameraController = HangarVideoCameraController() self.__inited = False self.__spaceInited = False self.__isSpacePremium = False self.__igrSpaceType = constants.IGR_TYPE.NONE self.__delayedIsPremium = False self.__delayedForceRefresh = False self.__delayedRefreshCallback = None self.__spaceDestroyedDuringLoad = False self.__lastUpdatedVehicle = None self.onSpaceCreate = Event.Event() self.onObjectSelected = Event.Event() self.onObjectUnselected = Event.Event() from helpers.statistics import g_statistics g_statistics.subscribeToHangarSpaceCreate(self.onSpaceCreate) @property def space(self): if self.spaceInited: return self.__space @property def inited(self): return self.__inited @property def spaceInited(self): return self.__spaceInited def spaceLoading(self): return self.__space.spaceLoading() def init(self, isPremium): self.__videoCameraController.init() self.__spaceDestroyedDuringLoad = False if not self.__spaceInited: LOG_DEBUG('_HangarSpace::init') Waiting.show('loadHangarSpace') self.__inited = True self.__isSpacePremium = isPremium self.__igrSpaceType = game_control.g_instance.igr.getRoomType() self.__space.create(isPremium, self.__spaceDone) if self.__lastUpdatedVehicle is not None: self.updateVehicle(self.__lastUpdatedVehicle) game_control.g_instance.gameSession.onPremiumNotify += self.onPremiumChanged def refreshSpace(self, isPremium, forceRefresh=False): igrType = game_control.g_instance.igr.getRoomType() if self.__isSpacePremium == isPremium and self.__igrSpaceType == igrType and not forceRefresh: return if not self.__spaceInited and self.__space.spaceLoading(): LOG_DEBUG( '_HangarSpace::refreshSpace(isPremium={0!r:s}) - is delayed until space load is done' .format(isPremium)) if self.__delayedRefreshCallback is None: self.__delayedRefreshCallback = BigWorld.callback( 0.1, self.__delayedRefresh) self.__delayedIsPremium = isPremium self.__delayedForceRefresh = forceRefresh return LOG_DEBUG( '_HangarSpace::refreshSpace(isPremium={0!r:s})'.format(isPremium)) self.destroy() self.init(isPremium) self.__isSpacePremium = isPremium self.__igrSpaceType = igrType def destroy(self): self.__videoCameraController.destroy() if self.__spaceInited: LOG_DEBUG('_HangarSpace::destroy') self.__inited = False self.__spaceInited = False self.__space.destroy() elif self.spaceLoading(): LOG_DEBUG('_HangarSpace::destroy - delayed until space load done') self.__spaceDestroyedDuringLoad = True self.__space.destroy() self.__inited = False self.__spaceInited = False if self.__delayedRefreshCallback is not None: BigWorld.cancelCallback(self.__delayedRefreshCallback) self.__delayedRefreshCallback = None game_control.g_instance.gameSession.onPremiumNotify -= self.onPremiumChanged def _stripVehCompDescrIfRoaming(self, vehCompDescr): serverSettings = g_lobbyContext.getServerSettings() if serverSettings is not None and serverSettings.roaming.isInRoaming(): vehCompDescr = vehicles.stripCustomizationFromVehicleCompactDescr( vehCompDescr, True, True, False)[0] return vehicles.VehicleDescr(compactDescr=vehCompDescr) def updateVehicle(self, vehicle, historicalBattle=None): if self.__inited: Waiting.show('loadHangarSpaceVehicle', True) historicalBattleDef = None if historicalBattle is not None and historicalBattle.canParticipateWith( vehicle.intCD): historicalBattleDef = historicalBattle.getData() igrRoomType = game_control.g_instance.igr.getRoomType() igrLayout = g_itemsCache.items.inventory.getIgrCustomizationsLayout( ) updatedVehCompactDescr = getCustomizedVehCompDescr( igrLayout, vehicle.invID, igrRoomType, vehicle.descriptor.makeCompactDescr(), historicalBattleDef) self.__space.recreateVehicle( self._stripVehCompDescrIfRoaming(updatedVehCompactDescr), vehicle.modelState, self.__changeDone) self.__lastUpdatedVehicle = vehicle def removeVehicle(self): if self.__inited: Waiting.show('loadHangarSpaceVehicle') if self.__space is not None: self.__space.removeVehicle() self.__changeDone() self.__lastUpdatedVehicle = None def onPremiumChanged(self, isPremium, attrs, premiumExpiryTime): self.refreshSpace(isPremium) def __spaceDone(self): self.__spaceInited = True if self.__spaceDestroyedDuringLoad: self.__spaceDestroyedDuringLoad = False self.destroy() self.onSpaceCreate() Waiting.hide('loadHangarSpace') def __changeDone(self): Waiting.hide('loadHangarSpaceVehicle') def __delayedRefresh(self): self.__delayedRefreshCallback = None if not self.__spaceInited: self.__delayedRefreshCallback = BigWorld.callback( 0.1, self.__delayedRefresh) return self.refreshSpace(self.__delayedIsPremium, self.__delayedForceRefresh)
class _HangarSpace(object): isPremium = property(lambda self: (self.__isSpacePremium if self.__spaceInited else self.__delayedIsPremium)) def __init__(self): self.__space = ClientHangarSpace() self.__inited = False self.__spaceInited = False self.__isSpacePremium = False self.__delayedIsPremium = False self.__delayedForceRefresh = False self.__delayedRefreshCallback = None self.__spaceDestroyedDuringLoad = False self.__lastUpdatedVehicle = None return @property def space(self): if self.spaceInited: return self.__space else: return None @property def inited(self): return self.__inited @property def spaceInited(self): return self.__spaceInited def spaceLoading(self): return self.__space.spaceLoading() def init(self, isPremium): if not self.__spaceInited: LOG_DEBUG('_HangarSpace::init') Waiting.show('loadHangarSpace') self.__inited = True self.__isSpacePremium = isPremium self.__space.create(isPremium, self.__spaceDone) if self.__lastUpdatedVehicle is not None: self.updateVehicle(self.__lastUpdatedVehicle) return def refreshSpace(self, isPremium, forceRefresh = False): if not self.__spaceInited: LOG_DEBUG('_HangarSpace::refreshSpace(isPremium={0!r:s}) - is delayed until space load is done'.format(isPremium)) if self.__delayedRefreshCallback is None: self.__delayedRefreshCallback = BigWorld.callback(0.1, self.__delayedRefresh) self.__delayedIsPremium = isPremium self.__delayedForceRefresh = forceRefresh return else: LOG_DEBUG('_HangarSpace::refreshSpace(isPremium={0!r:s})'.format(isPremium)) if self.__isSpacePremium != isPremium or forceRefresh: self.destroy() self.init(isPremium) self.__isSpacePremium = isPremium return def destroy(self): if self.__spaceInited: LOG_DEBUG('_HangarSpace::destroy') self.__inited = False self.__spaceInited = False self.__space.destroy() elif self.spaceLoading(): LOG_DEBUG('_HangarSpace::destroy - delayed until space load done') self.__spaceDestroyedDuringLoad = True if self.__delayedRefreshCallback is not None: BigWorld.cancelCallback(self.__delayedRefreshCallback) self.__delayedRefreshCallback = None return def _stripVehCompDescrIfRoaming(self, vehCompDescr): if game_control.g_instance.roaming.isInRoaming(): vehCompDescr = vehicles.stripCustomizationFromVehicleCompactDescr(vehCompDescr, True, True, False)[0] return vehicles.VehicleDescr(compactDescr=vehCompDescr) def updateVehicle(self, vehicle): if self.__inited: Waiting.show('loadHangarSpaceVehicle', True) self.__space.recreateVehicle(self._stripVehCompDescrIfRoaming(vehicle.descriptor.makeCompactDescr()), vehicle.modelState, self.__changeDone) self.__lastUpdatedVehicle = vehicle def removeVehicle(self): if self.__inited: Waiting.show('loadHangarSpaceVehicle') self.__space.removeVehicle() self.__changeDone() self.__lastUpdatedVehicle = None return def __spaceDone(self): self.__spaceInited = True if self.__spaceDestroyedDuringLoad: self.__spaceDestroyedDuringLoad = False self.destroy() Waiting.hide('loadHangarSpace') def __changeDone(self): Waiting.hide('loadHangarSpaceVehicle') def __delayedRefresh(self): self.__delayedRefreshCallback = None if not self.__spaceInited: self.__delayedRefreshCallback = BigWorld.callback(0.1, self.__delayedRefresh) return else: self.refreshSpace(self.__delayedIsPremium, self.__delayedForceRefresh) return
class _HangarSpace(object): isPremium = property(lambda self: (self.__isSpacePremium if self.__spaceInited else self.__delayedIsPremium)) def __init__(self): self.__space = ClientHangarSpace() self.__videoCameraController = HangarVideoCameraController() self.__inited = False self.__spaceInited = False self.__isSpacePremium = False self.__igrSpaceType = constants.IGR_TYPE.NONE self.__delayedIsPremium = False self.__delayedForceRefresh = False self.__delayedRefreshCallback = None self.__spaceDestroyedDuringLoad = False self.__lastUpdatedVehicle = None self.onSpaceCreate = Event.Event() self.onObjectSelected = Event.Event() self.onObjectUnselected = Event.Event() self.onObjectClicked = Event.Event() g_statistics.subscribeToHangarSpaceCreate(self.onSpaceCreate) return @property def space(self): if self.spaceInited: return self.__space else: return None @property def inited(self): return self.__inited @property def spaceInited(self): return self.__spaceInited def spaceLoading(self): return self.__space.spaceLoading() def init(self, isPremium): g_statistics.noteHangarLoadingState(HANGAR_LOADING_STATE.START_LOADING_SPACE) self.__videoCameraController.init() self.__spaceDestroyedDuringLoad = False if not self.__spaceInited: LOG_DEBUG('_HangarSpace::init') Waiting.show('loadHangarSpace') self.__inited = True self.__isSpacePremium = isPremium self.__igrSpaceType = game_control.g_instance.igr.getRoomType() self.__space.create(isPremium, self.__spaceDone) if self.__lastUpdatedVehicle is not None: self.updateVehicle(self.__lastUpdatedVehicle) game_control.g_instance.gameSession.onPremiumNotify += self.onPremiumChanged return def refreshSpace(self, isPremium, forceRefresh = False): igrType = game_control.g_instance.igr.getRoomType() if self.__isSpacePremium == isPremium and self.__igrSpaceType == igrType and not forceRefresh: return elif not self.__spaceInited and self.__space.spaceLoading(): LOG_DEBUG('_HangarSpace::refreshSpace(isPremium={0!r:s}) - is delayed until space load is done'.format(isPremium)) if self.__delayedRefreshCallback is None: self.__delayedRefreshCallback = BigWorld.callback(0.1, self.__delayedRefresh) self.__delayedIsPremium = isPremium self.__delayedForceRefresh = forceRefresh return else: LOG_DEBUG('_HangarSpace::refreshSpace(isPremium={0!r:s})'.format(isPremium)) self.destroy() self.init(isPremium) self.__isSpacePremium = isPremium self.__igrSpaceType = igrType return def destroy(self): self.__videoCameraController.destroy() if self.__spaceInited: LOG_DEBUG('_HangarSpace::destroy') self.__inited = False self.__spaceInited = False self.__space.destroy() elif self.spaceLoading(): LOG_DEBUG('_HangarSpace::destroy - delayed until space load done') self.__spaceDestroyedDuringLoad = True self.__space.destroy() self.__inited = False self.__spaceInited = False if self.__delayedRefreshCallback is not None: BigWorld.cancelCallback(self.__delayedRefreshCallback) self.__delayedRefreshCallback = None game_control.g_instance.gameSession.onPremiumNotify -= self.onPremiumChanged return def updateVehicle(self, vehicle): if self.__inited: Waiting.show('loadHangarSpaceVehicle', True) g_statistics.noteHangarLoadingState(HANGAR_LOADING_STATE.START_LOADING_VEHICLE) self.__space.recreateVehicle(vehicle.getCustomizedDescriptor(), vehicle.modelState, self.__changeDone) self.__lastUpdatedVehicle = vehicle def updatePreviewVehicle(self, vehicle): if self.__inited: Waiting.show('loadHangarSpaceVehicle', True) self.__space.recreateVehicle(vehicle.descriptor, vehicle.modelState, self.__changeDone) self.__lastUpdatedVehicle = vehicle def removeVehicle(self): if self.__inited: Waiting.show('loadHangarSpaceVehicle') if self.__space is not None: self.__space.removeVehicle() Waiting.hide('loadHangarSpaceVehicle') self.__lastUpdatedVehicle = None return def onPremiumChanged(self, isPremium, attrs, premiumExpiryTime): self.refreshSpace(isPremium) def __spaceDone(self): self.__spaceInited = True if self.__spaceDestroyedDuringLoad: self.__spaceDestroyedDuringLoad = False self.destroy() self.onSpaceCreate() Waiting.hide('loadHangarSpace') g_statistics.noteHangarLoadingState(HANGAR_LOADING_STATE.FINISH_LOADING_SPACE) g_statistics.noteHangarLoadingState(HANGAR_LOADING_STATE.HANGAR_READY, showSummaryNow=True) def __changeDone(self): Waiting.hide('loadHangarSpaceVehicle') g_statistics.noteHangarLoadingState(HANGAR_LOADING_STATE.FINISH_LOADING_VEHICLE) def __delayedRefresh(self): self.__delayedRefreshCallback = None if not self.__spaceInited: self.__delayedRefreshCallback = BigWorld.callback(0.1, self.__delayedRefresh) return else: self.refreshSpace(self.__delayedIsPremium, self.__delayedForceRefresh) return def leftButtonClicked(self): self.onObjectClicked()
class _HangarSpace(object): isPremium = property(lambda self: (self.__isSpacePremium if self.__spaceInited else self.__delayedIsPremium)) gameSession = dependency.descriptor(IGameSessionController) igrCtrl = dependency.descriptor(IIGRController) statsCollector = dependency.descriptor(IStatisticsCollector) _customizableObjMgr = dependency.descriptor(ICustomizableObjectsManager) def __init__(self): self.__space = ClientHangarSpace() self.__videoCameraController = HangarVideoCameraController() self.__inited = False self.__spaceInited = False self.__isSpacePremium = False self.__igrSpaceType = constants.IGR_TYPE.NONE self.__delayedIsPremium = False self.__delayedForceRefresh = False self.__delayedRefreshCallback = None self.__spaceDestroyedDuringLoad = False self.__lastUpdatedVehicle = None self.onSpaceCreate = Event.Event() self.onSpaceDestroy = Event.Event() self.onSpaceRefreshed = Event.Event() self.onObjectSelected = Event.Event() self.onObjectUnselected = Event.Event() self.onObjectClicked = Event.Event() return @property def space(self): if self.spaceInited: return self.__space else: return None @property def inited(self): return self.__inited @property def spaceInited(self): return self.__spaceInited @staticmethod def __isNY(): player = BigWorld.player() if not hasattr(player, 'newYear'): return False return player.newYear.state == NY_STATE.IN_PROGRESS def spaceLoading(self): return self.__space.spaceLoading() def getSlotPositions(self): return self.__space.getSlotPositions() def init(self, isPremium): self.statsCollector.noteHangarLoadingState(HANGAR_LOADING_STATE.START_LOADING_SPACE) self.__videoCameraController.init() self.__spaceDestroyedDuringLoad = False if not self.__spaceInited: LOG_DEBUG('_HangarSpace::init') Waiting.show('loadHangarSpace') self.__inited = True self.__isSpacePremium = isPremium self.__igrSpaceType = self.igrCtrl.getRoomType() if not self.__isNY() else constants.IGR_TYPE.NONE self.__space.create(isPremium, self.__spaceDone) if self.__lastUpdatedVehicle is not None: self.updateVehicle(self.__lastUpdatedVehicle) self.gameSession.onPremiumNotify += self.onPremiumChanged return def refreshSpace(self, isPremium, forceRefresh = False): igrType = self.igrCtrl.getRoomType() if not self.__isNY() else constants.IGR_TYPE.NONE if self.__isSpacePremium == isPremium and self.__igrSpaceType == igrType and not forceRefresh: return elif not self.__spaceInited and self.__space.spaceLoading(): LOG_DEBUG('_HangarSpace::refreshSpace(isPremium={0!r:s}) - is delayed until space load is done'.format(isPremium)) if self.__delayedRefreshCallback is None: self.__delayedRefreshCallback = BigWorld.callback(0.1, self.__delayedRefresh) self.__delayedIsPremium = isPremium self.__delayedForceRefresh = forceRefresh return else: LOG_DEBUG('_HangarSpace::refreshSpace(isPremium={0!r:s})'.format(isPremium)) if self._customizableObjMgr.state: from gui.prb_control.events_dispatcher import g_eventDispatcher g_eventDispatcher.loadHangar() self.destroy() self.init(isPremium) self.__isSpacePremium = isPremium self.__igrSpaceType = igrType self.onSpaceRefreshed() return def destroy(self): if self.__spaceInited: self.onSpaceDestroy() self.__videoCameraController.destroy() if self.__spaceInited: LOG_DEBUG('_HangarSpace::destroy') self.__inited = False self.__spaceInited = False self.__space.destroy() elif self.spaceLoading(): LOG_DEBUG('_HangarSpace::destroy - delayed until space load done') self.__spaceDestroyedDuringLoad = True self.__space.destroy() self.__inited = False self.__spaceInited = False if self.__delayedRefreshCallback is not None: BigWorld.cancelCallback(self.__delayedRefreshCallback) self.__delayedRefreshCallback = None self.gameSession.onPremiumNotify -= self.onPremiumChanged return def updateVehicle(self, vehicle): if self.__inited: Waiting.show('loadHangarSpaceVehicle', True) self.statsCollector.noteHangarLoadingState(HANGAR_LOADING_STATE.START_LOADING_VEHICLE) self.__space.recreateVehicle(vehicle.descriptor, vehicle.modelState, self.__changeDone) self.__lastUpdatedVehicle = vehicle def updatePreviewVehicle(self, vehicle): if self.__inited: Waiting.show('loadHangarSpaceVehicle', True) self.__space.recreateVehicle(vehicle.descriptor, vehicle.modelState, self.__changeDone) self.__lastUpdatedVehicle = vehicle def getVehicleEntity(self): """ Get BigWorld entity of the current hangar vehicle. """ if self.__inited: return self.__space.getVehicleEntity() def updateVehicleOutfit(self, outfit): """ Updates outfit of the current vehicle. """ if self.__inited: self.__space.updateVehicleCustomization(outfit) def getCentralPointForArea(self, areaId): if self.__inited: return self.__space.getCentralPointForArea(areaId) return Math.Vector3(0.0) def removeVehicle(self): if self.__inited: Waiting.show('loadHangarSpaceVehicle') if self.__space is not None: self.__space.removeVehicle() Waiting.hide('loadHangarSpaceVehicle') self.__lastUpdatedVehicle = None return def setVehicleSelectable(self, flag): """See comment in HangarVehicle.""" self.__space.setVehicleSelectable(flag) def onPremiumChanged(self, isPremium, attrs, premiumExpiryTime): self.refreshSpace(isPremium) def __spaceDone(self): self.__spaceInited = True if self.__spaceDestroyedDuringLoad: self.__spaceDestroyedDuringLoad = False self.destroy() self.onSpaceCreate() Waiting.hide('loadHangarSpace') self.statsCollector.noteHangarLoadingState(HANGAR_LOADING_STATE.FINISH_LOADING_SPACE) self.statsCollector.noteHangarLoadingState(HANGAR_LOADING_STATE.HANGAR_READY, showSummaryNow=True) def __changeDone(self): Waiting.hide('loadHangarSpaceVehicle') self.statsCollector.noteHangarLoadingState(HANGAR_LOADING_STATE.FINISH_LOADING_VEHICLE) def __delayedRefresh(self): self.__delayedRefreshCallback = None if not self.__spaceInited: self.__delayedRefreshCallback = BigWorld.callback(0.1, self.__delayedRefresh) return else: self.refreshSpace(self.__delayedIsPremium, self.__delayedForceRefresh) return def leftButtonClicked(self): self.onObjectClicked()