Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
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)
Ejemplo n.º 3
0
 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')
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
 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
Ejemplo n.º 9
0
 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()
Ejemplo n.º 10
0
 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()
Ejemplo n.º 11
0
    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
Ejemplo n.º 12
0
    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)
Ejemplo n.º 13
0
 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()
Ejemplo n.º 14
0
 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()
Ejemplo n.º 15
0
    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)
Ejemplo n.º 16
0
 def __init__(self):
     svc.BaseEntityService.__init__(self)
     self.playerEntity = None
     self.playerEntityLoaded = locks.Event('playerEntityLoaded')
Ejemplo n.º 17
0
 def AddEvent(self, event, *args):
     semaphore = locks.Event('event_%s' % event)
     self._queue.append((event, args, semaphore))
     return semaphore