def __init__(self): LargeCollidableStructure.__init__(self) self.overlayEffects = {} self.nanoContainerModel = None self.nanoContainerModelLoadedEvent = locks.Event() self.structureModel = None self.structureModelLoadedEvent = locks.Event() self.isConstructing = False self.oldClipSphereCenter = (0.0, 0.0, 0.0)
def LoadScene(self, scenefile, inflight=0, registerKey=None, setupCamera=True, applyScene=True): scene = None camera = None try: if registerKey: self.sceneLoadedEvents[registerKey] = locks.Event(registerKey) self.SetSceneType(SCENE_TYPE_SPACE) sceneFromFile = trinity.Load(scenefile) if sceneFromFile is None: return scene = sceneFromFile camera = self._GetCamera(registerKey, setupCamera) if inflight: self.ApplySolarsystemAttributes(scene, camera) self.ApplySceneInflightAttributes(scene, camera) if applyScene: self.ApplyScene(scene, camera, registerKey) except Exception: log.LogException('sceneManager::LoadScene') sys.exc_clear() finally: if registerKey and registerKey in self.sceneLoadedEvents: self.sceneLoadedEvents.pop(registerKey).set() return (scene, camera)
def __init__(self): service.Service.__init__(self) self.idCounter = 0L self.activeParticleEffects = {} self.timedParticleEffects = [] self.activeParticlesSemaphore = uthread.CriticalSection('CriticalSection for dynamic particle effects') self.updateTaskletLock = locks.Event('particleEffectClientUpdateTaskletLock')
def __init__(self): self.queue = [] self.inCallback = False self.updateEvent = locks.Event(name='LodQueueEvent') self.__freezeQueue = False uthread.new(LodQueue.QueueMonitorThread, weakref.ref(self)) self.queueSizeStat = blue.statistics.Find('paperDoll/queueSize') if not self.queueSizeStat: self.queueSizeStat = blue.CcpStatisticsEntry() self.queueSizeStat.name = 'paperDoll/queueSize' self.queueSizeStat.type = 1 self.queueSizeStat.resetPerFrame = False self.queueSizeStat.description = 'The length of the LOD switching queue' blue.statistics.Register(self.queueSizeStat) self.queueActiveUpStat = blue.statistics.Find( 'paperDoll/queueActiveUp') if not self.queueActiveUpStat: self.queueActiveUpStat = blue.CcpStatisticsEntry() self.queueActiveUpStat.name = 'paperDoll/queueActiveUp' self.queueActiveUpStat.type = 1 self.queueActiveUpStat.resetPerFrame = False self.queueActiveUpStat.description = 'Number of LOD switches to higher quality in progress' blue.statistics.Register(self.queueActiveUpStat) self.queueActiveDownStat = blue.statistics.Find( 'paperDoll/queueActiveDown') if not self.queueActiveDownStat: self.queueActiveDownStat = blue.CcpStatisticsEntry() self.queueActiveDownStat.name = 'paperDoll/queueActiveDown' self.queueActiveDownStat.type = 1 self.queueActiveDownStat.resetPerFrame = False self.queueActiveDownStat.description = 'Number of LOD switches to lower quality in progress' blue.statistics.Register(self.queueActiveDownStat)
def GetProximityTree(self, sceneID): tree = self.proximityTrees.get(sceneID, None) if tree: return tree if sceneID not in self.waitingForProximityTrees: self.waitingForProximityTrees[sceneID] = locks.Event( 'ProximityTreeLoad_%s' % sceneID) self.waitingForProximityTrees[sceneID].wait() tree = self.proximityTrees.get(sceneID, None) return tree
def GetProximityTree(self, sceneID): """ Returns the proximity tree for the scene. Will block if we don't have one yet """ tree = self.proximityTrees.get(sceneID, None) if tree: return tree if sceneID not in self.waitingForProximityTrees: self.waitingForProximityTrees[sceneID] = locks.Event('ProximityTreeLoad_%s' % sceneID) self.waitingForProximityTrees[sceneID].wait() tree = self.proximityTrees.get(sceneID, None) return tree
def GetGameWorld(self, gameWorldID): gw = self.gameworlds.get(gameWorldID, None) if gw: return gw if gameWorldID not in self.waitingForGameWorlds: self.waitingForGameWorlds[gameWorldID] = locks.Event( 'GameWorldLoad_%s' % gameWorldID) self.LogInfo('Waiting for gameworld instance', gameWorldID) self.waitingForGameWorlds[gameWorldID].wait() self.LogInfo('Done Waiting for gameworld instance', gameWorldID) gw = self.gameworlds.get(gameWorldID, None) return gw
def GetGameWorld(self, gameWorldID): """ Returns the gameworld tree for the scene. Will block if we don't have one yet """ gw = self.gameworlds.get(gameWorldID, None) if gw: return gw if gameWorldID not in self.waitingForGameWorlds: self.waitingForGameWorlds[gameWorldID] = locks.Event('GameWorldLoad_%s' % gameWorldID) self.LogInfo('Waiting for gameworld instance', gameWorldID) self.waitingForGameWorlds[gameWorldID].wait() self.LogInfo('Done Waiting for gameworld instance', gameWorldID) gw = self.gameworlds.get(gameWorldID, None) return gw
def __init__(self): self.explodeOnRemove = False self.exploded = False self.model = None self.animationSequencer = None self.released = False self.wreckID = None self._audioEntities = [] self._audioEntity = None self.logger = logging.getLogger('spaceObject.' + self.__class__.__name__) self.modelLoadedEvent = locks.Event() self.explosionModel = None self.typeID = None self.typeData = {} self.explosionManager = ExplosionManager()
def __init__(self): self.explodeOnRemove = False self.exploded = False self.model = None self.released = False self.forceLOD = False self.wreckID = None self.audioEntities = [] self.generalAudioEntity = None self.boosterAudioEvent = '' self.audioPumpStarted = False self.logChannel = log.GetChannel(self.__guid__) self.modelLoadedEvent = locks.Event() self.explosionModel = None self.typeID = None self.raceID = None self.explosionManager = util.ExplosionManager()
def FixUri(self, uri): """cache DNS lookups on the uri to make it faster""" parts = urlparse.urlsplit(uri) key = parts[1] try: while True: netloc = self.dnsMap[key] if isinstance(netloc, locks.Event): netloc.wait() else: break except KeyError: event = locks.Event() self.dnsMap[key] = event try: netloc = key hostport = netloc.split(':') if len(hostport) == 2: host, port = hostport else: host, port = hostport[0], None try: info = socket.getaddrinfo(host, port) info = [e for e in info if e[0] == socket.AF_INET] if info: if port is not None: host, port = info[0][4] netloc = host + ':' + str(port) else: netloc = host except socket.gaierror: pass except: del self.dnsMap[key] else: self.dnsMap[key] = netloc finally: event.set() if netloc != parts[1]: uri = urlparse.urlunsplit((parts[0], ) + (netloc, ) + parts[2:]) return uri
def LoadScene(self, scenefile, registerKey=None, applyScene=True): scene = None try: if registerKey: self.sceneLoadedEvents[registerKey] = locks.Event(registerKey) self.SetSceneType(SCENE_TYPE_SPACE) sceneFromFile = trinity.Load(scenefile) if sceneFromFile is None: return scene = sceneFromFile if applyScene: self.ApplyScene(scene, registerKey) except Exception: log.LogException('sceneManager::LoadScene') sys.exc_clear() finally: if registerKey and registerKey in self.sceneLoadedEvents: self.sceneLoadedEvents.pop(registerKey).set() return (scene, None)
def __init__(self): self.explodeOnRemove = False self.exploded = False self.unloaded = False self.model = None self.additionalModels = [] self.animationSequencer = None self.animationStateObject = None self.released = False self.wreckID = None self._audioEntities = [] self._audioEntity = None self.logger = logging.getLogger('spaceObject.' + self.__class__.__name__) self.logger = SpaceObjectLogAdapter(self.logger, so_id=self.id) self.modelLoadedEvent = locks.Event() self.modelLoadSignal = Signal() self.explosionModel = None self.typeID = None self.typeData = {} self.explosionManager = ExplosionManager()
def LoadScene(self, scenefile, sceneName='', fov=None, leaveUntouched=0, inflight=0, registerKey=None, setupCamera=True): try: if registerKey: self.sceneLoadedEvents[registerKey] = locks.Event(registerKey) self.SetSceneType(SCENE_TYPE_SPACE) sceneFromFile = trinity.Load(scenefile) if sceneFromFile is None: return scene = sceneFromFile bp = sm.GetService('michelle').GetBallpark() camera = self.GetRegisteredCamera(registerKey) if setupCamera: if camera is None: camera = trinity.Load('res:/dx9/scene/camera.red') if inflight: if scene.dustfield is None: scene.dustfield = trinity.Load( 'res:/dx9/scene/dustfield.red') scene.dustfieldConstraint = scene.dustfield.Find( 'trinity.EveDustfieldConstraint')[0] if scene.dustfieldConstraint is not None: scene.dustfieldConstraint.camera = camera scene.ballpark = bp scene.sunDiffuseColor = (1.5, 1.5, 1.5, 1.0) if settings.user.ui.Get( 'effectsEnabled', 1) and session.solarsystemid is not None: universe = getattr(self, 'universe', None) if not universe: universe = trinity.Load( 'res:/dx9/scene/starfield/universe.red') setattr(self, 'universe', universe) scene.backgroundObjects.append(universe) here = sm.GetService('map').GetItem(session.solarsystemid) if here: scale = 10000000000.0 position = (here.x / scale, here.y / scale, -here.z / scale) universe.children[0].translation = position if leaveUntouched: self.SetActiveScene(scene, registerKey) return scene if camera: self.PrepareCamera(camera) if fov: camera.fieldOfView = fov self.PrepareBackgroundLandscapes(scene) if registerKey: self.RegisterCamera(registerKey, camera) self.RegisterScene(scene, registerKey) activeScene = self.GetActiveScene() if activeScene is None or activeScene not in self.registeredScenes.values( ): self.SetActiveScene(scene, registerKey) if camera: self.SetActiveCamera(camera) else: self.SetActiveScene(scene, registerKey) if camera: self.SetActiveCamera(camera) if camera: camera.audio2Listener = audio2.GetListener(0) if camera and bp is not None: myShipBall = bp.GetBallById(bp.ego) vel = geo2.Vector(myShipBall.vx, myShipBall.vy, myShipBall.vz) if geo2.Vec3Length(vel) > 0.0: vel = geo2.Vec3Normalize(vel) pitch = asin(-vel[1]) yaw = atan2(vel[0], vel[2]) yaw = yaw - 0.3 pitch = pitch - 0.15 camera.SetOrbit(yaw, pitch) if inflight and settings.user.ui.Get('routeVisualizationEnabled', True): if self.routeVisualizer: self.routeVisualizer.Cleanup() self.routeVisualizer = RouteVisualizer() sm.ScatterEvent('OnLoadScene') except Exception: log.LogException('sceneManager::LoadScene') sys.exc_clear() finally: if registerKey and registerKey in self.sceneLoadedEvents: self.sceneLoadedEvents.pop(registerKey).set()
def Layout(self, reloading = 0, pushBtnArgs = None, setUsername = None, setPassword = None): if not reloading: self.sceneLoadedEvent = locks.Event('loginScene') uthread.new(self.LoadScene) self.eulaInited = 0 self.Flush() borderHeight = uicore.desktop.height / 6 par = uicls.Container(name='underlayContainer', parent=self, align=uiconst.TOTOP, height=borderHeight) self.sr.underlay2 = uicls.WindowUnderlay(parent=par) self.sr.underlay2.padding = (-16, -16, -16, 0) bottomPar = uicls.Container(name='underlayContainer_Bottom', parent=self, align=uiconst.TOBOTTOM, height=borderHeight + 6) bottomUnderlay = uicls.WindowUnderlay(parent=bottomPar) bottomUnderlay.padding = (-16, 6, -16, -16) self.fadeCont = uicls.Container(name='fadeCont', parent=self, align=uiconst.TOPLEFT, state=uiconst.UI_DISABLED, width=uicore.desktop.width, height=uicore.desktop.height, idx=-1) if trinity.app.fullscreen: closex = uicls.Icon(icon='ui_73_16_49', parent=self, pos=(0, 1, 0, 0), align=uiconst.TOPRIGHT, idx=0, state=uiconst.UI_NORMAL, hint=localization.GetByLabel('UI/Login/QuitGame')) closex.OnClick = self.ClickExit closex.sr.hintAbRight = uicore.desktop.width - 16 closex.sr.hintAbTop = 16 self.mainBrowserParent = uicls.Container(name='mainBrowserParent', parent=self, align=uiconst.CENTER, state=uiconst.UI_HIDDEN, width=800, height=440, idx=0) self.mainBrowser = uicls.Edit(parent=self.mainBrowserParent, padding=(8, 18, 8, 8), readonly=1) mainclosex = uicls.Icon(icon='ui_38_16_220', parent=self.mainBrowserParent, pos=(2, 1, 0, 0), align=uiconst.TOPRIGHT, idx=0, state=uiconst.UI_NORMAL) mainclosex.OnClick = self.CloseMenu wndUnderlay = uicls.WindowUnderlay(parent=self.mainBrowserParent) self.eulaParent = uicls.Container(name='eulaParent', parent=self, align=uiconst.CENTER, state=uiconst.UI_HIDDEN, width=800, height=440, idx=0) eulaCont = uicls.Container(name='eulaCont', parent=self.eulaParent, align=uiconst.TOALL, padding=(0, 18, 0, 0)) browser = uicls.Edit(parent=eulaCont, padding=(6, 6, 6, 6), readonly=1) browser.sr.scrollcontrols.state = uiconst.UI_NORMAL browser.viewing = 'eula_ccp' self.eulaBrowser = browser self.sr.eulaUnderlay = uicls.WindowUnderlay(parent=self.eulaParent) self.maintabs = uicls.TabGroup(name='maintabs', parent=eulaCont, idx=0, tabs=[[localization.GetByLabel('UI/Login/EULA/EveEULAHeader'), browser, self, 'eula_ccp'], [localization.GetByLabel('UI/Login/EULA/ThirdPartyEULAHeader'), browser, self, 'eula_others']], groupID='eula', autoselecttab=0) self.eulaclosex = uicls.Icon(icon='ui_38_16_220', parent=self.eulaParent, pos=(2, 1, 0, 0), align=uiconst.TOPRIGHT, idx=0, state=uiconst.UI_NORMAL) self.eulaclosex.OnClick = self.CloseMenu bottomArea = uicls.Container(name='bottomArea', parent=bottomPar, idx=0, pos=(0, 0, 0, 0)) bottomSub = uicls.Container(name='bottomSub', parent=bottomArea, align=uiconst.CENTER, idx=0, height=bottomPar.height, width=800) knownUserNames = settings.public.ui.Get('usernames', []) editswidth = 120 if borderHeight <= 100: editstop = 30 else: editstop = 40 editsleft = (bottomSub.width - editswidth) / 2 edit = uicls.SinglelineEdit(name='username', parent=bottomSub, pos=(editsleft, editstop, editswidth, 0), maxLength=64) edit.SetHistoryVisibility(0) t1 = uicls.EveLabelSmall(text=localization.GetByLabel('UI/Login/Username'), parent=edit, top=3, state=uiconst.UI_DISABLED, color=(1.0, 1.0, 1.0, 0.75)) if knownUserNames: ops = [ (name, name) for name in knownUserNames ] edit.LoadCombo('usernamecombo', ops, self.OnComboChange, comboIsTabStop=0) edit.SetValue(setUsername or settings.public.ui.Get('username', '')) edit.OnReturn = self.Confirm self.usernameEditCtrl = edit edit = uicls.SinglelineEdit(name='password', parent=bottomSub, pos=(editsleft, edit.top + edit.height + 6, editswidth, 0), maxLength=64) t2 = uicls.EveLabelSmall(text=localization.GetByLabel('UI/Login/Password'), parent=edit, top=3, state=uiconst.UI_DISABLED, color=(1.0, 1.0, 1.0, 0.75)) edit.SetPasswordChar(u'\u2022') edit.SetValue(setPassword or '') edit.OnReturn = self.Confirm self.passwordEditCtrl = edit if sm.GetService('gameui').UsingSingleSignOn(): self.usernameEditCtrl.state = self.passwordEditCtrl.state = uiconst.UI_HIDDEN editswidth = 0 tw = max(t1.textwidth, t2.textwidth) t1.left = t2.left = -tw - 6 connectBtn = uicls.Button(parent=bottomSub, label=localization.GetByLabel('UI/Login/Connect'), func=self.Connect, pos=(editsleft, edit.top + edit.height + 4, 0, 0), fixedwidth=120, btn_default=1) statusContainer = uicls.Container(parent=bottomSub, left=editsleft + editswidth + 6, top=editstop) self.serverNameTextControl = uicls.EveLabelSmall(text=localization.GetByLabel('UI/Login/CheckingStatus'), parent=statusContainer, align=uiconst.TOTOP, state=uiconst.UI_DISABLED) self.serverStatusTextControl = uicls.EveLabelSmall(parent=statusContainer, align=uiconst.TOTOP, state=uiconst.UI_DISABLED) self.serverPlayerCountTextControl = uicls.EveLabelSmall(parent=statusContainer, align=uiconst.TOTOP, state=uiconst.UI_DISABLED) self.serverVersionTextControl = uicls.EveLabelSmall(parent=statusContainer, align=uiconst.TOTOP, state=uiconst.UI_DISABLED) self.motdParent = uicls.Container(name='motdParent', parent=self, align=uiconst.CENTERBOTTOM, top=borderHeight + 16, width=400, height=64, state=uiconst.UI_HIDDEN) motdLabel = uicls.EveLabelMedium(parent=self.motdParent, align=uiconst.CENTER, width=360, state=uiconst.UI_NORMAL) self.motdLabel = motdLabel uicls.BumpedUnderlay(parent=self.motdParent, name='background') versionstr = localization.GetByLabel('UI/Login/Version', versionNumber=GetVersion()) vers = uicls.EveLabelSmall(text=versionstr, parent=self, left=6, top=6, idx=0, state=uiconst.UI_NORMAL) tabs = [[localization.GetByLabel('UI/Login/Settings'), None, self, None, ('settings',)], [localization.GetByLabel('UI/Login/EULA/EULAHeader'), self.eulaParent, self, None, ('eula',)]] self.pushButtons = uicls.PushButtonGroup(parent=bottomPar, align=uiconst.CENTERTOP, idx=0, top=-4) self.pushButtons.Startup(tabs) self.pushButtons.OnNoneSelected = self.OnPushButtonNoneSelected if boot.region == 'optic': self.eulaCRC = zlib.adler32(str(boot.version)) else: self.eulaCRC = zlib.adler32(buffer(self.GetEulaCCP())) eulaAgreed = bool(settings.public.generic.Get('eulaCRC', None) == self.eulaCRC) if not eulaAgreed: self.GetEulaConfirmation() else: if pushBtnArgs: self.pushButtons.SelectPanelByArgs(pushBtnArgs) uthread.pool('Login::Fetching ads', self.CheckAds, bool(pushBtnArgs)) uthread.new(self.LoadMotd, bool(pushBtnArgs)) if trinity.app.IsActive(): if settings.public.ui.Get('username', ''): uicore.registry.SetFocus(self.passwordEditCtrl) else: uicore.registry.SetFocus(self.usernameEditCtrl) if boot.region != 'optic': esrbNoticeHeight = 70 esrbNoticeWidth = 200 allowedSizes = [1.0, 0.9, 0.8] desktopWidth = uicore.desktop.width useHeight = int(esrbNoticeHeight * 0.7) useWidth = int(esrbNoticeWidth * 0.7) for multiplier in allowedSizes: tempWidth = esrbNoticeWidth * multiplier if tempWidth <= desktopWidth * 0.11: useWidth = int(tempWidth) useHeight = int(esrbNoticeHeight * multiplier) break cont = uicls.Container(name='esrbParent', parent=bottomArea, align=uiconst.TOPLEFT, top=editstop, width=useWidth, height=useHeight, state=uiconst.UI_NORMAL, idx=0, left=20) sprite = uicls.Sprite(name='ESRB', parent=cont, align=uiconst.TOALL, state=uiconst.UI_DISABLED, color=(1.0, 1.0, 1.0, 1.0), lockAspect=1, texturePath='res:/UI/Texture/ESRBnotice.dds') sprite.rectWidth = esrbNoticeWidth sprite.rectHeight = esrbNoticeHeight uthread.new(uix.FadeCont, cont, 0, after=6000, fadeTime=500.0)
def __init__(self): svc.BaseEntityService.__init__(self) self.playerEntity = None self.playerEntityLoaded = locks.Event('playerEntityLoaded')
def AddEvent(self, event, *args): semaphore = locks.Event('event_%s' % event) self._queue.append((event, args, semaphore)) return semaphore