def __setCameraDisabled(self, disabled): self.fireEvent( CameraRelatedEvents( CameraRelatedEvents.FORCE_DISABLE_IDLE_PARALAX_MOVEMENT, ctx={'isDisable': disabled}), EVENT_BUS_SCOPE.LOBBY) self.fireEvent( CameraRelatedEvents( CameraRelatedEvents.FORCE_DISABLE_CAMERA_MOVEMENT, ctx={'disable': disabled}), EVENT_BUS_SCOPE.LOBBY)
def __updateEasingOut(self): dt = min(self.measureDeltaTime(), self.MAX_DT) self.__currentIdleTime += dt cameraMatrix = Math.Matrix(self.__camera.source) yaw = self.__easeOutValue(self.__yawSpeed, cameraMatrix.yaw, dt) pitch = self.__easeOutValue(self.__pitchParams.speed, cameraMatrix.pitch, dt) dist = self.__easeOutValue(self.__distParams.speed, self.__camera.pivotMaxDist, dt) self.__setCameraParams(yaw, pitch, dist) if self.__currentIdleTime < self.TIME_OUT: return 0.0 g_eventBus.handleEvent(CameraRelatedEvents(CameraRelatedEvents.IDLE_CAMERA, ctx={'started': False}), scope=EVENT_BUS_SCOPE.DEFAULT) g_eventBus.handleEvent(CameraRelatedEvents(CameraRelatedEvents.IDLE_CAMERA, ctx={'started': False}), scope=EVENT_BUS_SCOPE.DEFAULT)
def moveSpace(self, dx, dy, dz): self.fireEvent(CameraRelatedEvents(CameraRelatedEvents.LOBBY_VIEW_MOUSE_MOVE, ctx={'dx': dx, 'dy': dy, 'dz': dz})) self.fireEvent(events.LobbySimpleEvent(events.LobbySimpleEvent.NOTIFY_SPACE_MOVED, ctx={'dx': dx, 'dy': dy, 'dz': dz}))
def __onResourcesLoaded(self, buildInd, resourceRefs): if not self.__vDesc: return if buildInd != self.__curBuildInd: return failedIDs = resourceRefs.failedIDs resources = self.__resources succesLoaded = True for resID, resource in resourceRefs.items(): if resID not in failedIDs: resources[resID] = resource LOG_ERROR('Could not load %s' % resID) succesLoaded = False self.collisions = resourceRefs['collisionAssembler'] if succesLoaded: self.__setupModel(buildInd) g_eventBus.handleEvent(CameraRelatedEvents( CameraRelatedEvents.VEHICLE_LOADING, ctx={ 'started': False, 'vEntityId': self.__vEntity.id }), scope=EVENT_BUS_SCOPE.DEFAULT) super(HangarVehicleAppearance, self).activate()
def setState(self, state): self.__state = state g_eventBus.handleEvent(CameraRelatedEvents( CameraRelatedEvents.CAMERA_ENTITY_UPDATED, ctx={ 'state': self.__state, 'entityId': self.id }), scope=EVENT_BUS_SCOPE.DEFAULT)
def __startCameraIdle(self): g_eventBus.handleEvent(CameraRelatedEvents(CameraRelatedEvents.IDLE_CAMERA, ctx={'started': True}), scope=EVENT_BUS_SCOPE.DEFAULT) self.measureDeltaTime() self.__pitchParams.startValue = Math.Matrix(self.__camera.source).pitch self.__distParams.startValue = self.__camera.pivotMaxDist self.__setStartParams(self.__pitchParams) self.__setStartParams(self.__distParams) self.__currentIdleTime = 0.0 self.__yawSpeed = 0.0 self.delayCallback(0.0, self.__updateIdleMovement)
def _dispose(self): self.fireEvent(events.HangarCustomizationEvent( events.HangarCustomizationEvent.RESET_VEHICLE_MODEL_TRANSFORM), scope=EVENT_BUS_SCOPE.LOBBY) self.fireEvent( CameraRelatedEvents( CameraRelatedEvents.FORCE_DISABLE_IDLE_PARALAX_MOVEMENT, ctx={'isDisable': False}), EVENT_BUS_SCOPE.LOBBY) if g_appLoader.getSpaceID() != _SPACE_ID.LOGIN: self.__releaseItemSound() self.soundManager.playInstantSound(SOUNDS.EXIT) self.settingsCore.interfaceScale.onScaleExactlyChanged -= self.__onInterfaceScaleChanged self._vehicleCustomizationAnchorsUpdater.stopUpdater() self._vehicleCustomizationAnchorsUpdater = None if self.hangarSpace.spaceInited: space = self.hangarSpace.space if self.__locatedOnEmbelem: space.clearSelectedEmblemInfo() space.locateCameraToStartState() self._seasonSoundAnimantion = None self.__renderEnv.enable(False) self.__renderEnv = None self.__viewLifecycleWatcher.stop() self.service.stopHighlighter() self.lobbyContext.deleteHeaderNavigationConfirmator( self.__confirmHeaderNavigation) self.lobbyContext.getServerSettings( ).onServerSettingsChange -= self.__onServerSettingChanged g_eventBus.removeListener(CameraRelatedEvents.IDLE_CAMERA, self.__onNotifyHangarCameraIdleStateChanged) self.hangarSpace.onSpaceCreate -= self.__onSpaceCreateHandler self.hangarSpace.onSpaceDestroy -= self.__onSpaceDestroyHandler self.hangarSpace.onSpaceRefresh -= self.__onSpaceRefreshHandler self.service.onRegionHighlighted -= self.__onRegionHighlighted if g_currentVehicle.item: g_tankActiveCamouflage[ g_currentVehicle.item.intCD] = self.__ctx.currentSeason g_currentVehicle.refreshModel() self.__hidePropertiesSheet() self.__propertiesSheet = None self.__ctx.onPropertySheetShown -= self.__onPropertySheetShown self.__ctx.onPropertySheetHidden -= self.__onPropertySheetHidden self.__ctx.onCaruselItemSelected -= self.__onCaruselItemSelected self.__ctx.onChangesCanceled -= self.__onChangesCanceled self.__ctx.onCacheResync -= self.__onCacheResync self.__ctx.onCustomizationItemsBought -= self.__onItemsBought self.__ctx.onCustomizationItemsRemoved -= self.__onItemsRemoved self.__ctx.onCustomizationItemInstalled -= self.__onItemsInstalled self.__ctx.onCustomizationTabChanged -= self.__onTabChanged self.__ctx.onCustomizationModeChanged -= self.__onModeChanged self.__ctx.onCustomizationSeasonChanged -= self.__onSeasonChanged self.__ctx = None self.service.destroyCtx() super(MainView, self)._dispose() return
def __fireResourcesLoadedEvent(self): compDescr = self.__vDesc.type.compactDescr if self.__vDesc is not None else None g_eventBus.handleEvent(CameraRelatedEvents( CameraRelatedEvents.VEHICLE_LOADING, ctx={ 'started': False, 'vEntityId': self.__vEntity.id, 'intCD': compDescr }), scope=EVENT_BUS_SCOPE.DEFAULT) return
def __startBuild(self, vDesc, vState): self.__curBuildInd += 1 self.__vState = vState self.__resources = {} self.__vehicleStickers = None cfg = hangarCFG() if vState == 'undamaged': self.__currentEmblemsAlpha = cfg['emblems_alpha_undamaged'] self.__isVehicleDestroyed = False else: self.__currentEmblemsAlpha = cfg['emblems_alpha_damaged'] self.__isVehicleDestroyed = True self.__vDesc = vDesc resources = camouflages.getCamoPrereqs(self.__outfit, vDesc) splineDesc = vDesc.chassis.splineDesc if splineDesc is not None: resources.append(splineDesc.segmentModelLeft) resources.append(splineDesc.segmentModelRight) if splineDesc.leftDesc is not None: resources.append(splineDesc.leftDesc) if splineDesc.rightDesc is not None: resources.append(splineDesc.rightDesc) if splineDesc.segment2ModelLeft is not None: resources.append(splineDesc.segment2ModelLeft) if splineDesc.segment2ModelRight is not None: resources.append(splineDesc.segment2ModelRight) from vehicle_systems import model_assembler resources.append(model_assembler.prepareCompoundAssembler(self.__vDesc, ModelsSetParams(self.__outfit.modelsSet, self.__vState), self.__spaceId)) g_eventBus.handleEvent(CameraRelatedEvents(CameraRelatedEvents.VEHICLE_LOADING, ctx={'started': True, 'vEntityId': self.__vEntity.id}), scope=EVENT_BUS_SCOPE.DEFAULT) cfg = hangarCFG() gunScale = Math.Vector3(1.0, 1.0, 1.1) capsuleScale = Math.Vector3(1.5, 1.5, 1.5) loadedGunScale = cfg.get('cam_capsule_gun_scale', gunScale) if loadedGunScale is not None: gunScale = loadedGunScale loadedCapsuleScale = cfg.get('cam_capsule_scale', capsuleScale) if loadedCapsuleScale is not None: capsuleScale = loadedCapsuleScale bspModels = ((TankPartNames.getIdx(TankPartNames.CHASSIS), vDesc.chassis.hitTester.bspModelName), (TankPartNames.getIdx(TankPartNames.HULL), vDesc.hull.hitTester.bspModelName), (TankPartNames.getIdx(TankPartNames.TURRET), vDesc.turret.hitTester.bspModelName), (TankPartNames.getIdx(TankPartNames.GUN), vDesc.gun.hitTester.bspModelName), (TankPartNames.getIdx(TankPartNames.GUN) + 1, vDesc.hull.hitTester.bspModelName, capsuleScale), (TankPartNames.getIdx(TankPartNames.GUN) + 2, vDesc.turret.hitTester.bspModelName, capsuleScale), (TankPartNames.getIdx(TankPartNames.GUN) + 3, vDesc.gun.hitTester.bspModelName, gunScale)) collisionAssembler = BigWorld.CollisionAssembler(bspModels, self.__spaceId) resources.append(collisionAssembler) physicalTracksBuilders = vDesc.chassis.physicalTracks for name, builder in physicalTracksBuilders.iteritems(): resources.append(builder.createLoader('{0}PhysicalTrack'.format(name))) BigWorld.loadResourceListBG(tuple(resources), makeCallbackWeak(self.__onResourcesLoaded, self.__curBuildInd)) return
def _populate(self): super(MainView, self)._populate() self.__ctx = self.service.getCtx() self.__ctx.onCustomizationSeasonChanged += self.__onSeasonChanged self.__ctx.onCustomizationModeChanged += self.__onModeChanged self.__ctx.onCustomizationTabChanged += self.__onTabChanged self.__ctx.onCustomizationItemInstalled += self.__onItemsInstalled self.__ctx.onCustomizationItemsRemoved += self.__onItemsRemoved self.__ctx.onCustomizationItemsBought += self.__onItemsBought self.__ctx.onCacheResync += self.__onCacheResync self.__ctx.onChangesCanceled += self.__onChangesCanceled self.__ctx.onCaruselItemSelected += self.__onCarouselItemSelected self.__ctx.onPropertySheetHidden += self.__onPropertySheetHidden self.__ctx.onPropertySheetShown += self.__onPropertySheetShown self.__ctx.onClearItem += self.__onClearItem self.soundManager.playInstantSound(SOUNDS.ENTER) self.__viewLifecycleWatcher.start(self.app.containerManager, [ _ModalWindowsPopupHandler(), _C11ViewsPopupHandler(self.__hidePropertiesSheet) ]) self.lobbyContext.addHeaderNavigationConfirmator( self.__confirmHeaderNavigation) self.lobbyContext.getServerSettings( ).onServerSettingsChange += self.__onServerSettingChanged self.hangarSpace.onSpaceCreate += self.__onSpaceCreateHandler self.hangarSpace.onSpaceDestroy += self.__onSpaceDestroyHandler self.hangarSpace.onSpaceRefresh += self.__onSpaceRefreshHandler self.service.onRegionHighlighted += self.__onRegionHighlighted self._seasonSoundAnimantion = _SeasonSoundAnimantion( len(SeasonType.COMMON_SEASONS), self.soundManager) self.__setHeaderInitData() self.__setSeasonData() self.__ctx.refreshOutfit() self.as_selectSeasonS(SEASON_TYPE_TO_IDX[self.__ctx.currentSeason]) self.fireEvent( CameraRelatedEvents( CameraRelatedEvents.FORCE_DISABLE_IDLE_PARALAX_MOVEMENT, ctx={'isDisable': True}), EVENT_BUS_SCOPE.LOBBY) self.fireEvent( LobbyHeaderMenuEvent( LobbyHeaderMenuEvent.TOGGLE_VISIBILITY, ctx={'state': HeaderMenuVisibilityState.ONLINE_COUNTER}), EVENT_BUS_SCOPE.LOBBY) self._isPropertySheetShown = False if self.__ctx.c11CameraManager is not None: self.__ctx.c11CameraManager.locateCameraToCustomizationPreview( forceLocate=True) self.__renderEnv = BigWorld.CustomizationEnvironment() self.__renderEnv.enable(True) if self.__ctx.vehicleAnchorsUpdater is not None: self.__ctx.vehicleAnchorsUpdater.setMainView(self.flashObject) return
def _populate(self): super(MainView, self)._populate() self.__ctx = self.service.getCtx() self.__ctx.onCustomizationSeasonChanged += self.__onSeasonChanged self.__ctx.onCustomizationModeChanged += self.__onModeChanged self.__ctx.onCustomizationTabChanged += self.__onTabChanged self.__ctx.onCustomizationItemInstalled += self.__onItemsInstalled self.__ctx.onCustomizationItemsRemoved += self.__onItemsRemoved self.__ctx.onCustomizationItemsBought += self.__onItemsBought self.__ctx.onCacheResync += self.__onCacheResync self.__ctx.onChangesCanceled += self.__onChangesCanceled self.__ctx.onCaruselItemSelected += self.__onCaruselItemSelected self.__ctx.onPropertySheetHidden += self.__onPropertySheetHidden self.__ctx.onPropertySheetShown += self.__onPropertySheetShown self.soundManager.playInstantSound(SOUNDS.ENTER) self.__viewLifecycleWatcher.start(self.app.containerManager, [ _ModalWindowsPopupHandler(), _C11ViewsPopupHandler(self.__hidePropertiesSheet) ]) self.lobbyContext.addHeaderNavigationConfirmator( self.__confirmHeaderNavigation) self.lobbyContext.getServerSettings( ).onServerSettingsChange += self.__onServerSettingChanged g_eventBus.addListener(CameraRelatedEvents.IDLE_CAMERA, self.__onNotifyHangarCameraIdleStateChanged) self.hangarSpace.onSpaceCreate += self.__onSpaceCreateHandler self.hangarSpace.onSpaceDestroy += self.__onSpaceDestroyHandler self.hangarSpace.onSpaceRefresh += self.__onSpaceRefreshHandler self.service.onRegionHighlighted += self.__onRegionHighlighted self._seasonSoundAnimantion = _SeasonSoundAnimantion( len(SeasonType.COMMON_SEASONS), self.soundManager) self.__setHeaderInitData() self.__setSeasonData() self._vehicleCustomizationAnchorsUpdater = _VehicleCustomizationAnchorsUpdater( self.service) self._vehicleCustomizationAnchorsUpdater.startUpdater( self.settingsCore.interfaceScale.get()) self.__ctx.refreshOutfit() self.settingsCore.interfaceScale.onScaleExactlyChanged += self.__onInterfaceScaleChanged self.fireEvent( CameraRelatedEvents( CameraRelatedEvents.FORCE_DISABLE_IDLE_PARALAX_MOVEMENT, ctx={'isDisable': True}), EVENT_BUS_SCOPE.LOBBY) if self.hangarSpace.spaceInited: self.hangarSpace.space.locateCameraToCustomizationPreview() self.__renderEnv = BigWorld.CustomizationEnvironment() self.__renderEnv.enable(True) self._isPropertySheetShown = False
def _moveSpaceHandler(args=None): if args is None: return else: ctx = { 'dx': args.get('dx'), 'dy': args.get('dy'), 'dz': args.get('dz') } g_eventBus.handleEvent( CameraRelatedEvents(CameraRelatedEvents.LOBBY_VIEW_MOUSE_MOVE, ctx=ctx), EVENT_BUS_SCOPE.GLOBAL) g_eventBus.handleEvent( events.LobbySimpleEvent( events.LobbySimpleEvent.NOTIFY_SPACE_MOVED, ctx=ctx), EVENT_BUS_SCOPE.GLOBAL) return
def __onMoveSpace(args=None): if args is None: return else: dx = args.get('dx') dy = args.get('dy') dz = args.get('dz') g_eventBus.handleEvent( CameraRelatedEvents(CameraRelatedEvents.LOBBY_VIEW_MOUSE_MOVE, ctx={ 'dx': dx, 'dy': dy, 'dz': dz }), EVENT_BUS_SCOPE.GLOBAL) g_eventBus.handleEvent( events.LobbySimpleEvent( events.LobbySimpleEvent.NOTIFY_SPACE_MOVED, ctx={ 'dx': dx, 'dy': dy, 'dz': dz }), EVENT_BUS_SCOPE.GLOBAL) return
def interactionStatusUpdate(self, value): self.fireEvent( CameraRelatedEvents( CameraRelatedEvents.FORCE_DISABLE_CAMERA_MOVEMENT, ctx={'disable': value}), EVENT_BUS_SCOPE.DEFAULT)
def __startBuild(self, vDesc, vState): self.__curBuildInd += 1 self.__vState = vState self.__resources = {} self.__vehicleStickers = None cfg = hangarCFG() if vState == 'undamaged': self.__currentEmblemsAlpha = cfg['emblems_alpha_undamaged'] self.__isVehicleDestroyed = False else: self.__currentEmblemsAlpha = cfg['emblems_alpha_damaged'] self.__isVehicleDestroyed = True self.__vDesc = vDesc resources = camouflages.getCamoPrereqs(self.__outfit, vDesc) if not self.__isVehicleDestroyed: self.__attachments = camouflages.getAttachments(self.__outfit, vDesc) modelsSet = self.__outfit.modelsSet splineDesc = vDesc.chassis.splineDesc if splineDesc is not None: for _, trackDesc in splineDesc.trackPairs.iteritems(): resources += trackDesc.prerequisites(modelsSet) from vehicle_systems import model_assembler resources.append(model_assembler.prepareCompoundAssembler(self.__vDesc, ModelsSetParams(modelsSet, self.__vState, self.__attachments), self.__spaceId)) g_eventBus.handleEvent(CameraRelatedEvents(CameraRelatedEvents.VEHICLE_LOADING, ctx={'started': True, 'vEntityId': self.__vEntity.id, 'intCD': self.__vDesc.type.compactDescr}), scope=EVENT_BUS_SCOPE.DEFAULT) cfg = hangarCFG() gunScale = Math.Vector3(1.0, 1.0, 1.1) capsuleScale = Math.Vector3(1.5, 1.5, 1.5) loadedGunScale = cfg.get('cam_capsule_gun_scale', gunScale) if loadedGunScale is not None: gunScale = loadedGunScale loadedCapsuleScale = cfg.get('cam_capsule_scale', capsuleScale) if loadedCapsuleScale is not None: capsuleScale = loadedCapsuleScale hitTesterManagers = {TankPartNames.CHASSIS: vDesc.chassis.hitTesterManager, TankPartNames.HULL: vDesc.hull.hitTesterManager, TankPartNames.TURRET: vDesc.turret.hitTesterManager, TankPartNames.GUN: vDesc.gun.hitTesterManager} bspModels = () crashedBspModels = () for partName, htManager in hitTesterManagers.iteritems(): partId = TankPartNames.getIdx(partName) bspModel = (partId, htManager.modelHitTester.bspModelName) bspModels = bspModels + (bspModel,) if htManager.crashedModelHitTester: crashedBspModel = (partId, htManager.crashedModelHitTester.bspModelName) crashedBspModels = crashedBspModels + (crashedBspModel,) bspModels = bspModels + ((TankPartNames.getIdx(TankPartNames.GUN) + 1, vDesc.hull.hitTesterManager.modelHitTester.bspModelName, capsuleScale), (TankPartNames.getIdx(TankPartNames.GUN) + 2, vDesc.turret.hitTesterManager.modelHitTester.bspModelName, capsuleScale), (TankPartNames.getIdx(TankPartNames.GUN) + 3, vDesc.gun.hitTesterManager.modelHitTester.bspModelName, gunScale)) if vDesc.hull.hitTesterManager.crashedModelHitTester: crashedBspModels = crashedBspModels + ((TankPartNames.getIdx(TankPartNames.GUN) + 1, vDesc.hull.hitTesterManager.crashedModelHitTester.bspModelName, capsuleScale),) if vDesc.turret.hitTesterManager.crashedModelHitTester: crashedBspModels = crashedBspModels + ((TankPartNames.getIdx(TankPartNames.GUN) + 2, vDesc.turret.hitTesterManager.crashedModelHitTester.bspModelName, capsuleScale),) if vDesc.gun.hitTesterManager.crashedModelHitTester: crashedBspModels = crashedBspModels + ((TankPartNames.getIdx(TankPartNames.GUN) + 3, vDesc.gun.hitTesterManager.crashedModelHitTester.bspModelName, gunScale),) modelCA = BigWorld.CollisionAssembler(bspModels, self.__spaceId) modelCA.name = 'ModelCollisions' resources.append(modelCA) if crashedBspModels: crashedModelCA = BigWorld.CollisionAssembler(crashedBspModels, self.__spaceId) crashedModelCA.name = 'CrashedModelCollisions' resources.append(crashedModelCA) physicalTracksBuilders = vDesc.chassis.physicalTracks for name, builders in physicalTracksBuilders.iteritems(): for index, builder in enumerate(builders): resources.append(builder.createLoader(self.__spaceId, '{0}{1}PhysicalTrack'.format(name, index), modelsSet)) BigWorld.loadResourceListBG(tuple(resources), makeCallbackWeak(self.__onResourcesLoaded, self.__curBuildInd)) return