sun.py (5224B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\environment\spaceObject\sun.py 2 import blue 3 import geo2 4 import uthread2 5 from eve.client.script.environment.spaceObject.spaceObject import SpaceObject 6 import trinity 7 import fsdBuiltData.common.graphicIDs as fsdGraphicIDs 8 import inventorycommon.typeHelpers 9 10 class Sun(SpaceObject): 11 12 def __init__(self): 13 SpaceObject.__init__(self) 14 self._stopUpdate = False 15 self.sunColorClose = (0, 0, 1.5) 16 self.sunColorFar = (0, 0, 1.5) 17 self.lensflare = None 18 self.sceneManager = sm.GetService('sceneManager') 19 20 def LoadModel(self, fileName = None, loadedModel = None): 21 self.Reload(self.typeData.get('graphicFile', None), self.typeID) 22 23 def Reload(self, sunGraphicFile, typeID): 24 scene = self.spaceMgr.GetScene() 25 if self.lensflare is not None and self.lensflare in scene.lensflares: 26 scene.lensflares.remove(self.lensflare) 27 sunFlareGraphicID = cfg.mapSystemCache[session.solarsystemid].sunFlareGraphicID 28 self.lensflare = trinity.Load(fsdGraphicIDs.GetGraphicFile(sunFlareGraphicID)) 29 scene.sunBall = self 30 self.model = trinity.Load(sunGraphicFile) 31 if self.model is None: 32 self.model = trinity.EvePlanet() 33 self.model.translationCurve = self 34 self.model.rotationCurve = self 35 self.model.name = '%d' % self.id 36 gfx = inventorycommon.typeHelpers.GetGraphic(typeID) 37 sunColorClose = (1.5, 1.5, 1.5, 1.0) 38 if hasattr(gfx, 'emissiveColor') and gfx.emissiveColor: 39 sunColorClose = tuple(gfx.emissiveColor) 40 self.sunColorClose = trinity.TriColor(*sunColorClose).GetHSV() 41 if hasattr(gfx, 'albedoColor') and gfx.albedoColor: 42 sunColorFar = tuple(gfx.albedoColor) 43 self.sunColorFar = trinity.TriColor(*sunColorFar).GetHSV() 44 else: 45 self.sunColorFar = (self.sunColorClose[0], self.sunColorClose[1] * 0.5, 1.5) 46 if abs(self.sunColorClose[0] - self.sunColorFar[0]) > 180: 47 self.sunColorFar = (360 + self.sunColorFar[0], self.sunColorFar[1], self.sunColorFar[2]) 48 self._stopUpdate = False 49 uthread2.StartTasklet(self._UpdateSunColor) 50 self._UpdateController(sunGraphicFile) 51 if self.model is not None and self.model not in scene.planets: 52 scene.planets.append(self.model) 53 if self.lensflare is not None: 54 self.lensflare.translationCurve = self 55 scene.lensflares.append(self.lensflare) 56 godRaysColor = fsdGraphicIDs.GetAlbedoColor(sunFlareGraphicID) 57 scene = self.sceneManager.fisRenderJob.GetScene() 58 if scene.postprocess is None: 59 scene.postprocess = trinity.Tr2PostProcess2() 60 if scene.postprocess.godRays is None: 61 scene.postprocess.godRays = trinity.Tr2PPGodRaysEffect() 62 self.sceneManager.fisRenderJob.GetScene().postprocess.godRays.godRayColor = (godRaysColor[0], 63 godRaysColor[1], 64 godRaysColor[2], 65 godRaysColor[3]) 66 self.SetupAmbientAudio() 67 if self._audioEntity: 68 self._audioEntity.SetAttenuationScalingFactor(self.radius) 69 70 def _UpdateController(self, sunGraphicFile): 71 isYellow = bool('yellow' in sunGraphicFile.lower()) 72 if isYellow: 73 self.model.SetControllerVariable('star_is_yellow', 1.0) 74 self.model.SetControllerVariable('radius', self.radius or 0) 75 76 def _UpdateSunColor(self): 77 triColor = trinity.TriColor() 78 while not self._stopUpdate: 79 try: 80 distance = self.model.translationCurve.UpdateVector(blue.os.GetSimTime()).Length() 81 ratio = 1.0 / max(1.0, distance / self.radius * 0.5) 82 color = geo2.Vec3Lerp(self.sunColorFar, self.sunColorClose, ratio) 83 triColor.SetHSV(*color) 84 scene = self.spaceMgr.GetScene() 85 if scene: 86 scene.sunDiffuseColor = (triColor.r, 87 triColor.g, 88 triColor.b, 89 1.0) 90 except: 91 pass 92 93 uthread2.Sleep(0.1) 94 95 def EnableGodRays(self, enable): 96 self.sceneManager.fisRenderJob.postProcess.GodRaysIntensity = 1.0 if enable else 0.0 97 98 def Assemble(self): 99 self.model.radius = self.radius 100 self.model.scaling = (self.radius, self.radius, self.radius) 101 102 def Release(self, origin = None): 103 if self.released: 104 return 105 self.ReleaseSun() 106 SpaceObject.Release(self, 'Sun') 107 108 def ReleaseSun(self): 109 self._stopUpdate = True 110 scene = self.spaceMgr.GetScene() 111 if hasattr(self.model, 'children'): 112 del self.model.children[:] 113 if scene: 114 scene.planets.fremove(self.model) 115 if self.model is not None: 116 self.model.translationCurve = None 117 self.model.rotationCurve = None 118 self.model = None 119 self.lensflare = None 120 if scene: 121 scene.sunBall = None 122 del scene.lensflares[:] 123 124 125 exports = {'spaceObject.Sun': Sun}