NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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}