portraitMaker.py (4309B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\login\charcreation_new\portraitMaker.py 2 import blue 3 import charactercreator.const as ccConst 4 import trinity 5 from eve.client.script.ui.camera.charCreationCamera import CharCreationCamera 6 7 class PortraitMaker(object): 8 9 def __init__(self, camera, backdropPath): 10 self.camera = camera 11 self.backdropPath = backdropPath 12 13 def GetPortraitTexture(self, portraitID): 14 size = 512 15 sceneManager = sm.GetService('sceneManager') 16 scene = sceneManager.GetActiveScene() 17 backdropPath = self.backdropPath 18 if backdropPath: 19 backdropScene = trinity.Tr2Sprite2dScene() 20 backdropScene.displayWidth = size 21 backdropScene.displayHeight = size 22 sprite = trinity.Tr2Sprite2d() 23 sprite.texturePrimary = trinity.Tr2Sprite2dTexture() 24 sprite.texturePrimary.resPath = backdropPath 25 sprite.displayWidth = size 26 sprite.displayHeight = size 27 backdropScene.children.append(sprite) 28 target = trinity.Tr2RenderTarget(size, size, 1, trinity.PIXEL_FORMAT.B8G8R8X8_UNORM) 29 depth = trinity.Tr2DepthStencil(size, size, trinity.DEPTH_STENCIL_FORMAT.AUTO) 30 renderJob = trinity.CreateRenderJob('TakeSnapShot') 31 renderJob.PushRenderTarget(target) 32 renderJob.PushDepthStencil(depth) 33 projection = trinity.TriProjection() 34 projection.PerspectiveFov(self.camera.fieldOfView, 1, 0.1, 5.0) 35 view = self.camera.viewMatrix 36 renderJob.Clear((0.0, 0.0, 0.0, 1.0), 1.0) 37 renderJob.SetProjection(projection) 38 renderJob.SetView(view) 39 if backdropPath: 40 renderJob.Update(backdropScene) 41 renderJob.RenderScene(backdropScene) 42 renderJob.RenderScene(scene) 43 trinity.WaitForResourceLoads() 44 renderJob.PopDepthStencil() 45 renderJob.PopRenderTarget() 46 renderJob.ScheduleOnce() 47 renderJob.WaitForFinish() 48 filename = self.GetPortraitSnapshotPath(portraitID) 49 trinity.Tr2HostBitmap(target).Save(filename) 50 path = 'cache:/Pictures/Portraits/PortraitSnapshot_%s_%s.jpg' % (portraitID, session.userid) 51 blue.motherLode.Delete(path) 52 tex = blue.resMan.GetResource(path, 'atlas') 53 return tex 54 55 def GetPortraitSnapshotPath(self, portraitID): 56 return blue.paths.ResolvePathForWriting(u'cache:/Pictures/Portraits/PortraitSnapshot_%s_%s.jpg' % (portraitID, session.userid)) 57 58 59 class PortraitCameraConfigurator: 60 61 def SetupPortraitCamera(self, camera, avatar, cameraPos = None, storedPortraitCameraSettings = None): 62 self.camera = camera 63 if self.camera is None: 64 self.camera = CharCreationCamera(avatar, ccConst.CAMERA_MODE_PORTRAIT) 65 self.SetupCameraUpdateJob() 66 else: 67 self.camera.ToggleMode(ccConst.CAMERA_MODE_PORTRAIT, avatar=avatar, transformTime=0) 68 if cameraPos: 69 self.camera.PlacePortraitCamera(self.cameraPos, self.cameraPoi) 70 xFactor, yFactor = self.camera.GetCorrectCameraXandYFactors(self.cameraPos, self.cameraPoi) 71 self.camera.xFactor = self.camera.xTarget = xFactor 72 self.camera.yFactor = self.camera.yTarget = yFactor 73 if storedPortraitCameraSettings: 74 self.camera.SetPointOfInterest(self.storedPortraitCameraSettings['poi']) 75 self.camera.pitch = self.storedPortraitCameraSettings['pitch'] 76 self.camera.yaw = self.storedPortraitCameraSettings['yaw'] 77 self.camera.distance = self.storedPortraitCameraSettings['distance'] 78 self.camera.xFactor = self.storedPortraitCameraSettings['xFactor'] 79 self.camera.yFactor = self.storedPortraitCameraSettings['yFactor'] 80 self.camera.fieldOfView = self.storedPortraitCameraSettings['fieldOfView'] 81 82 def RevertToNormalCamera(self, camera, avatar): 83 self.camera = camera 84 self.camera.ToggleMode(ccConst.CAMERA_MODE_DEFAULT, avatar=avatar) 85 self.camera.fieldOfView = 0.3 86 self.camera.distance = 8.0 87 self.camera.frontClip = 0.5 88 self.camera.backclip = 100.0 89 self.camera.SetPointOfInterest((0.0, self.camera.avatarEyeHeight / 2.0, 0.0))