def _UnRegisterComponents(self, entity): with uthread.BlockTrapSection(): with entity.entityLock: try: if entity.state == const.cef.ENTITY_STATE_READY: registerCalls = [] for name, component in entity.components.iteritems(): systems = self.GetComponentSystems(name) if systems: for system in systems: f = getattr(system, 'UnRegisterComponent', None) if f: registerCalls.append((f, (entity, component))) if registerCalls: for f, args in registerCalls: try: f(*args) except Exception as e: self._deadEntityList[entity.entityID] = entity log.LogException(e) elif entity.state in (const.cef.ENTITY_STATE_UNINITIALIZED, const.cef.ENTITY_STATE_DEAD, const.cef.ENTITY_STATE_DESTROYING): self.LogError('UnRegisterComponents: Entity state should be either ', const.cef.ENTITY_STATE_NAMES[const.cef.ENTITY_STATE_CREATING], ' or ', const.cef.ENTITY_STATE_NAMES[const.cef.ENTITY_STATE_READY], ', is instead ', const.cef.ENTITY_STATE_NAMES[entity.state], '. Entity:', str(entity)) entity.scene.RemoveEntityFromRegisteredList(entity) self.entitySceneManager.Unregister(entity.entityID) entity.state = const.cef.ENTITY_STATE_DESTROYING except Exception as e: self._deadEntityList[entity.entityID] = entity if entity.scene and entity.entityID in entity.scene.entities: del entity.scene.entities[entity.entityID] self.entitySceneManager.Unregister(entity.entityID) log.LogException(e)
def _RegisterComponents(self, entity, initData = None): with uthread.BlockTrapSection(): with entity.entityLock: try: if entity.state == const.cef.ENTITY_STATE_CREATING: entity.state = const.cef.ENTITY_STATE_READY entity.scene.AddEntityToRegisteredList(entity) registerCalls = [] for name, component in entity.components.iteritems(): systems = self.GetComponentSystems(name) if systems: for system in systems: f = getattr(system, 'RegisterComponent', None) if f: registerCalls.append((f, (entity, component))) if registerCalls: for f, args in registerCalls: f(*args) del self.loadingEntities[entity.entityID] elif entity.state in (const.cef.ENTITY_STATE_UNINITIALIZED, const.cef.ENTITY_STATE_DEAD, const.cef.ENTITY_STATE_READY): self.LogError('RegisterComponents: Entity state should be either', const.cef.ENTITY_STATE_NAMES[const.cef.ENTITY_STATE_CREATING], 'or', const.cef.ENTITY_STATE_NAMES[const.cef.ENTITY_STATE_DESTROYING], ', is instead', const.cef.ENTITY_STATE_NAMES[entity.state], '. Entity:', str(entity)) sm.ScatterEvent('OnEntityCreated', entity.entityID) GameWorld.GetNetworkEntityQueueManager().ClearEntity(entity.entityID) except Exception as e: log.LogException(e) self._deadEntityList[entity.entityID] = entity if entity.scene and entity.entityID in entity.scene.entities: del entity.scene.entities[entity.entityID] self.entitySceneManager.Unregister(entity.entityID)
def OnGraphicSettingsChanged(self, changes): flaresEnabled = sm.GetService('device').GetAppFeatureState( 'Interior.LensflaresEnabled', True) with uthread.BlockTrapSection(): for entity in self.flareEntities: flareComponent = entity.GetComponent('lensFlare') if not flaresEnabled and flareComponent.trinityObject is not None: self.RemoveFromScene(entity, flareComponent) elif flaresEnabled and flareComponent.trinityObject is None: self.AddToScene(entity, flareComponent)
def OnGraphicSettingsChanged(self, changes): particlesEnabled = sm.GetService('device').GetAppFeatureState( 'Interior.ParticlesEnabled', True) with uthread.BlockTrapSection(): for entity in self.particleObjectEntities: particleComponent = entity.GetComponent('particleObject') if not particlesEnabled and particleComponent.trinityObject is not None: self.RemoveFromScene(entity, particleComponent) elif particlesEnabled and particleComponent.trinityObject is None: self.AddToScene(entity, particleComponent)
def OnGraphicSettingsChanged(self, changes): """ Detects if particles have been turned on or off, or there is some other sort of change. Updates flares accordingly. """ flaresEnabled = sm.GetService('device').GetAppFeatureState( 'Interior.LensflaresEnabled', True) with uthread.BlockTrapSection(): for entity in self.flareEntities: flareComponent = entity.GetComponent('lensFlare') if not flaresEnabled and flareComponent.trinityObject is not None: self.RemoveFromScene(entity, flareComponent) elif flaresEnabled and flareComponent.trinityObject is None: self.AddToScene(entity, flareComponent)
def ZactionCommonBasePythonProcMethod(method, args, blocking): if blocking: callbackHandle = GameWorld.GetResultHandleForCurrentPythonProc() def _CallBlockingMethod(): result = method(*args) GameWorld.SetResultForPythonProcFromHandle(callbackHandle, int(result)) thread = uthread.new(_CallBlockingMethod) thread.localStorage['callbackHandle'] = callbackHandle return False else: try: with uthread.BlockTrapSection(): result = method(*args) except: log.LogException() result = False return result