class WodPlaceable(util.BlueClassNotifyWrap('trinity.WodPlaceable'), graphicWrappers.TrinityTransformMatrixMixinWrapper): __guid__ = 'graphicWrappers.WodPlaceable' @staticmethod def Wrap(triObject, resPath): WodPlaceable(triObject) triObject.AddNotify('transform', triObject._TransformChange) return triObject @staticmethod def ConvertToInterior(triObject, resPath): returnObject = trinity.Tr2InteriorPlaceable() returnObject.placeableResPath = triObject.placeableResPath return returnObject def AddToScene(self, scene): scene.AddPlaceableToScene(self) def RemoveFromScene(self, scene): scene.RemovePlaceableFromScene(self) def _TransformChange(self, transform): self.OnTransformChange() def OnTransformChange(self): """ Called back on a transform change """ pass
class Tr2InteriorBoxLight( util.BlueClassNotifyWrap('trinity.Tr2InteriorBoxLight')): __guid__ = 'graphicWrappers.Tr2InteriorBoxLight' @staticmethod def Wrap(triObject, resPath): Tr2InteriorBoxLight(triObject) triObject.AddNotify('color', triObject._TransformChange) triObject.AddNotify('rotation', triObject._TransformChange) triObject.AddNotify('transform', triObject._TransformChange) triObject.AddNotify('falloff', triObject._TransformChange) triObject.scene = None return triObject def AddToScene(self, scene): if self.scene and self.scene(): scene.RemoveLight(self.scene()) scene.AddLight(self) self.scene = weakref.ref(scene) def RemoveFromScene(self, scene): scene.RemoveLight(self) self.scene = None def _TransformChange(self, transform): self.OnTransformChange() def OnTransformChange(self): pass def SetPosition(self, position): self.position = position def GetPosition(self): return self.position def GetRotationYawPitchRoll(self): return geo2.QuaternionRotationGetYawPitchRoll(self.rotation) def SetRotationYawPitchRoll(self, ypr): self.rotation = geo2.QuaternionRotationSetYawPitchRoll(*ypr) def SetScaling(self, scaling): self.scaling = scaling def GetScaling(self): return self.scaling def GetColor(self): return self.color[:3] def SetColor(self, color): self.color = (color[0], color[1], color[2], 1) def GetFalloff(self): return self.falloff def SetFalloff(self, falloff): self.falloff = falloff
class Tr2InteriorPhysicalPortal( util.BlueClassNotifyWrap('trinity.Tr2InteriorPhysicalPortal')): __guid__ = 'graphicWrappers.Tr2InteriorPhysicalPortal' @staticmethod def Wrap(triObject, resPath): Tr2InteriorPhysicalPortal(triObject) triObject.AddNotify('position', triObject._TransformChange) triObject.AddNotify('rotation', triObject._TransformChange) triObject.AddNotify('maxBounds', triObject._TransformChange) triObject.AddNotify('minBounds', triObject._TransformChange) triObject.scene = None return triObject def AddToScene(self, scene): scene.AddPhysicalPortal(self) self.scene = weakref.ref(scene) def RemoveFromScene(self, scene): scene.RemovePhysicalPortal(self) self.scene = None def _TransformChange(self, transform): self.OnTransformChange() def OnTransformChange(self): pass def GetPosition(self): return self.position def SetPosition(self, pos): self.position = pos def GetRotationYawPitchRoll(self): return geo2.QuaternionRotationGetYawPitchRoll(self.rotation) def SetRotationYawPitchRoll(self, ypr): self.rotation = geo2.QuaternionRotationSetYawPitchRoll(*ypr) def GetScale(self): return (self.maxBounds[0], self.maxBounds[1], self.maxBounds[2]) def SetScale(self, scale): self.maxBounds = scale self.minBounds = (-scale[0], -scale[1], -scale[2]) def GetName(self): return self.name def SetName(self, name): self.name = str(name) def GetBoundingBoxInLocalSpace(self): min = trinity.TriVector(*self.minBounds) max = trinity.TriVector(*self.maxBounds) return (min, max)
class Tr2InteriorLightSource( util.BlueClassNotifyWrap('trinity.Tr2InteriorLightSource')): __guid__ = 'graphicWrappers.Tr2InteriorLightSource' _alwaysEditableMembers = ['renderDebugInfo', 'renderDebugType'] @staticmethod def Wrap(triObject, resPath): Tr2InteriorLightSource(triObject) triObject.AddNotify('position', triObject._TransformChange) triObject.AddNotify('radius', triObject._TransformChange) triObject.AddNotify('color', triObject._TransformChange) triObject.AddNotify('falloff', triObject._TransformChange) triObject.scene = None return triObject def AddToScene(self, scene): scene.AddLight(self) self.scene = weakref.ref(scene) def RemoveFromScene(self, scene): scene.RemoveLight(self) self.scene = None def _TransformChange(self, transform): self.OnTransformChange() def OnTransformChange(self): """ Called back on a transform change """ pass def GetPosition(self): return self.position def SetPosition(self, pos): self.position = pos def GetColor(self): return self.color[:3] def SetColor(self, color): self.color = (color[0], color[1], color[2], 1) def GetRadius(self): return self.radius def SetRadius(self, radius): self.radius = radius def GetFalloff(self): return self.falloff def SetFalloff(self, falloff): self.falloff = falloff
class Tr2InteriorOccluder(util.BlueClassNotifyWrap('trinity.Tr2InteriorOccluder'), graphicWrappers.TrinityTransformMatrixMixinWrapper): __guid__ = 'graphicWrappers.Tr2InteriorOccluder' @staticmethod def Wrap(triObject, resPath): Tr2InteriorOccluder(triObject) triObject.InitTransformMatrixMixinWrapper() triObject.AddNotify('transform', triObject._TransformChange) triObject.cellName = '' triObject.scene = None return triObject def SetCell(self, cellName): if self.cellName != cellName: self.cellName = cellName if self.scene and self.scene(): self.AddToScene(self.scene()) def AddToScene(self, scene): if self.scene and self.scene(): scene.RemoveOccluder(self) scene.AddOccluder(self, self.cellName) self.scene = weakref.ref(scene) def RemoveFromScene(self, scene): scene.RemoveOccluder(self) self.scene = None self.cellName = None def _TransformChange(self, transform): self.OnTransformChange() def OnTransformChange(self): pass def OnPositionChange(self): pass def OnRotationChange(self): pass def OnScaleChange(self): """ # TODO: Ensure we don't get negative scale xvec = geo2.Vector(self.transform[0][0], self.transform[0][1], self.transform[0][2]) yvec = geo2.Vector(self.transform[1][0], self.transform[1][1], self.transform[1][2]) zvec = geo2.Vector(self.transform[2][0], self.transform[2][1], self.transform[2][2]) lx = xvec.Vec3Length(xvec) ly = xvec.Vec3Length(xvec) lz = xvec.Vec3Length(xvec) print lx, ly, lz # TODO: Ensure we don't get negative scale """ pass
class Tr2IntSkinnedObject( util.BlueClassNotifyWrap('trinity.Tr2IntSkinnedObject'), WodExtSkinnedObject): __guid__ = 'graphicWrappers.Tr2IntSkinnedObject' @staticmethod def Wrap(triObject, resPath): Tr2IntSkinnedObject(triObject) triObject.InitTransformMatrixMixinWrapper() triObject.AddNotify('transform', triObject._TransformChange) return triObject
class WodExtSkinnedObject( util.BlueClassNotifyWrap('trinity.WodExtSkinnedObject'), TrinityTransformMatrixMixinWrapper): __guid__ = 'graphicWrappers.WodExtSkinnedObject' @staticmethod def Wrap(triObject, resPath): WodExtSkinnedObject(triObject) triObject.AddNotify('transform', triObject._TransformChange) return triObject @staticmethod def ConvertToInterior(triObject, resPath): returnObject = trinity.Tr2IntSkinnedObject() returnObject.visualModel = triObject.visualModel returnObject.animationUpdater = triObject.animationUpdater returnObject.lowDetailModel = triObject.lowDetailModel returnObject.mediumDetailModel = triObject.mediumDetailModel returnObject.highDetailModel = triObject.highDetailModel return returnObject def AddToScene(self, scene): scene.AddAvatarToScene(self) if hasattr(self.animationUpdater, 'grannyRes'): def PlayAnimation(): while not (self.animationUpdater.grannyRes.isGood and self.animationUpdater.grannyRes.isPrepared): blue.synchro.SleepWallclock(50) if self.animationUpdater.grannyRes.animationCount: clipName = self.animationUpdater.grannyRes.GetAnimationName( 0) self.animationUpdater.PlayAnimationEx(clipName, 0, 0, 1) uthread.new( PlayAnimation ).context = 'graphicWrappers.WodExtSkinnedObject::PlayAnimation' def RemoveFromScene(self, scene): scene.RemoveAvatarFromScene(self) def _TransformChange(self, transform): self.OnTransformChange() def OnTransformChange(self): """ Called back on a transform change """ pass
class Tr2InteriorProbeVolume( util.BlueClassNotifyWrap('trinity.Tr2InteriorProbeVolume'), graphicWrappers.TrinityTransformMatrixMixinWrapper): __guid__ = 'graphicWrappers.Tr2InteriorProbeVolume' @staticmethod def Wrap(triObject, resPath): Tr2InteriorProbeVolume(triObject) triObject.InitTransformMatrixMixinWrapper() triObject.AddNotify('transform', triObject._TransformChange) triObject.cellName = '' triObject.scene = None return triObject def SetCell(self, cellName): if self.cellName != cellName: if self.scene and self.scene(): self.scene().RemoveProbeVolume(self) self.cellName = cellName if self.scene and self.scene(): self.AddToScene(self.scene()) def AddToScene(self, scene): if self.scene and self.scene(): scene.RemoveProbeVolume(self) scene.AddProbeVolume(self, self.cellName) self.scene = weakref.ref(scene) def RemoveFromScene(self, scene): scene.RemoveProbeVolume(self) self.scene = None def _TransformChange(self, transform): self.OnTransformChange() def OnTransformChange(self): pass def OnPositionChange(self): pass def OnRotationChange(self): pass def OnScaleChange(self): pass def SetResolution(self, res): self.resolutionX, self.resolutionY, self.resolutionZ = res
class Tr2InteriorPlaceable( util.BlueClassNotifyWrap('trinity.Tr2InteriorPlaceable'), graphicWrappers.TrinityTransformMatrixMixinWrapper): __guid__ = 'graphicWrappers.Tr2InteriorPlaceable' @staticmethod def Wrap(triObject, resPath): Tr2InteriorPlaceable(triObject) triObject.InitTransformMatrixMixinWrapper() triObject.AddNotify('transform', triObject._TransformChange) triObject.scene = None return triObject def AddToScene(self, scene): if self.scene and self.scene(): self.RemoveFromScene(self.scene()) scene.AddDynamicToScene(self) self.scene = weakref.ref(scene) def RemoveFromScene(self, scene): scene.RemoveDynamicFromScene(self) self.scene = None def _TransformChange(self, transform): self.InitTransformMatrixMixinWrapper() self.OnTransformChange() def IsLoading(self): if self.placeableRes: if self.placeableRes.visualModel and util.IsTr2ModelLoading( self.placeableRes.visualModel): return True return False def OnTransformChange(self): pass def OnPositionChange(self): pass def OnRotationChange(self): pass def OnScaleChange(self): pass
class Tr2InteriorStatic(util.BlueClassNotifyWrap('trinity.Tr2InteriorStatic'), graphicWrappers.TrinityTranslationRotationMixinWrapper ): __guid__ = 'graphicWrappers.Tr2InteriorStatic' @staticmethod def Wrap(triObject, resPath): Tr2InteriorStatic(triObject) triObject.AddNotify('worldPosition', triObject._PositionChange) triObject.AddNotify('rotation', triObject._RotationChange) triObject.cellName = '0' triObject.systemName = 0 triObject.scene = None triObject.resPath = resPath return triObject def SetCell(self, cellName): if self.cellName != cellName: self.cellName = cellName if self.scene and self.scene(): self.AddToScene(self.scene()) def SetSystem(self, systemName): if self.systemName != systemName: self.systemName = systemName if self.scene and self.scene(): self.AddToScene(self.scene()) def AddToScene(self, scene): if self.scene and self.scene(): self.RemoveFromScene(scene) scene.AddStatic(self, self.cellName, self.systemName) self.scene = weakref.ref(scene) blue.resMan.Wait() self.BindLowLevelShaders() def RemoveFromScene(self, scene): scene.RemoveStatic(self) self.scene = None def OnTransformChange(self): pass def _PositionChange(self, pos): self.OnPositionChange() def OnPositionChange(self): pass def _RotationChange(self, rot): self.OnRotationChange() def OnRotationChange(self): pass def OnScaleChange(self): pass def GetBoundingBoxInLocalSpace(self): if self.geometry.meshCount > 0: min, max = self.geometry.GetBoundingBox(0) for i in xrange(self.geometry.meshCount - 1): cMin, cMax = self.geometry.GetBoundingBox(i + 1) min.Minimize(cMin) max.Maximize(cMax) return (min, max) return (trinity.TriVector(), trinity.TriVector()) def IsLoading(self): for area in self.enlightenAreas: if util.IsAreaLoading(area): return True for mesh in self.detailMeshes: if util.IsTr2MeshLoading(mesh): return True return False
class Tr2InteriorCylinderLight( util.BlueClassNotifyWrap('trinity.Tr2InteriorCylinderLight')): """ Wrapper for trinity interior cylinder light object. """ __guid__ = 'graphicWrappers.Tr2InteriorCylinderLight' @staticmethod def Wrap(triObject, resPath): """ Wraps trinity object. """ Tr2InteriorCylinderLight(triObject) triObject.scene = None return triObject def AddToScene(self, scene): """ Adds light source to the scene. """ if self.scene and self.scene(): scene.RemoveLight(self.scene()) scene.AddLight(self) self.scene = weakref.ref(scene) def RemoveFromScene(self, scene): """ Removes light source from the scene. """ scene.RemoveLight(self) self.scene = None def _TransformChange(self, transform): """ Called back on a transform change """ self.OnTransformChange() def OnTransformChange(self): """ Called back on a transform change """ pass def SetPosition(self, position): """ Assigns new position to the light source. """ self.position = position def GetPosition(self): """ Returns light source position. """ return self.position def GetRotationYawPitchRoll(self): """ Returns light source rotation as Euler angles. """ return geo2.QuaternionRotationGetYawPitchRoll(self.rotation) def SetRotationYawPitchRoll(self, ypr): """ Assigns light source rotation passed as Euler angles. """ self.rotation = geo2.QuaternionRotationSetYawPitchRoll(*ypr) def GetRadius(self): """ Returns light source radius. """ return self.radius def SetRadius(self, radius): """ Assigns light source radius. """ self.radius = radius def GetLength(self): """ Returns light source length. """ return self.length def SetLength(self, length): """ Assigns light source length. """ self.length = length def GetColor(self): """ Returns light source color. """ return self.color[:3] def SetColor(self, color): """ Assigns light source color. """ self.color = (color[0], color[1], color[2], 1) def GetFalloff(self): """ Returns light source falloff power. """ return self.falloff def SetFalloff(self, falloff): """ Assigns light source falloff power. """ self.falloff = falloff