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

postProcess.py (3998B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\environment\effects\postProcess.py
      2 import blue
      3 import uthread2
      4 import yamlext
      5 import trinity
      6 
      7 class PostProcessEffect(object):
      8     __guid__ = 'effects.PostProcessEffect'
      9     __lerpFields__ = {'vignette': ['opacity', 'intensity']}
     10 
     11     def __init__(self, trigger, effect = None, graphicFile = None):
     12         self.ballIDs = [trigger.shipID, trigger.targetID]
     13         self.graphicFile = graphicFile
     14         self.postProcess = None
     15         self.lerpValues = {}
     16         self.fadeInDuration = 1
     17         self.fadeOutDuration = 1
     18         self.forSelf = trigger.shipID == session.shipid
     19 
     20     def _GetPostProcess(self):
     21         return sm.GetService('sceneManager').GetActiveScene().postprocess
     22 
     23     def GetBalls(self):
     24         return self.ballIDs
     25 
     26     def GetEffectTargetID(self):
     27         try:
     28             return self.ballIDs[1]
     29         except IndexError:
     30             return None
     31 
     32     def Prepare(self):
     33         self.postProcess = self._GetPostProcess()
     34         yaml = yamlext.load(blue.paths.GetFileContentsWithYield(self.graphicFile))
     35         for postProcessMemberKey, postProcessMemberList in yaml.iteritems():
     36             postProcessMember = getattr(self.postProcess, postProcessMemberKey, None)
     37             if postProcessMember is None:
     38                 postProcessMember = self.PPMemberToClass(postProcessMemberKey)()
     39                 setattr(self.postProcess, postProcessMemberKey, postProcessMember)
     40             lerpField = self.__lerpFields__[postProcessMemberKey]
     41             for subMemberKey, value in postProcessMemberList.iteritems():
     42                 if subMemberKey in lerpField:
     43                     if postProcessMemberKey not in self.lerpValues:
     44                         self.lerpValues[postProcessMemberKey] = {}
     45                     self.lerpValues[postProcessMemberKey][subMemberKey] = (getattr(postProcessMember, subMemberKey), value)
     46                 else:
     47                     setattr(postProcessMember, subMemberKey, value)
     48 
     49     def Start(self, duration):
     50         if self.forSelf:
     51             uthread2.StartTasklet(self._FadeThread, self.fadeInDuration)
     52 
     53     def Stop(self, reason):
     54         if self.forSelf:
     55             uthread2.StartTasklet(self._FadeThread, self.fadeOutDuration, invert=True)
     56 
     57     def Repeat(self, duration):
     58         self.Start(duration)
     59 
     60     def _FadeThread(self, duration, invert = False):
     61         startTime = blue.os.GetSimTime()
     62         while True:
     63             blue.synchro.Yield()
     64             curTime = blue.os.GetSimTime()
     65             dif = min(blue.os.TimeDiffInMs(startTime, curTime) / 1000.0 / duration, 1)
     66             for postProcessMemberKey, subMemberDict in self.lerpValues.iteritems():
     67                 postprocessMember = getattr(self.postProcess, postProcessMemberKey)
     68                 for subMemberKey, subMemberLerpValues in subMemberDict.iteritems():
     69                     start, end = subMemberLerpValues
     70                     if invert:
     71                         start, end = end, 0
     72                     val = start + (end - start) * dif
     73                     setattr(postprocessMember, subMemberKey, val)
     74 
     75             if dif >= 1:
     76                 break
     77 
     78     def PPMemberToClass(self, postProcessMember):
     79         ppMemberToClassMap = {'signalLoss': trinity.Tr2PPSignalLossEffect,
     80          'godRays': trinity.Tr2PPGodRaysEffect,
     81          'bloom': trinity.Tr2PPBloomEffect,
     82          'dynamicExposure': trinity.Tr2PPDynamicExposureEffect,
     83          'filmGrain': trinity.Tr2PPFilmGrainEffect,
     84          'desaturate': trinity.Tr2PPDesaturateEffect,
     85          'fade': trinity.Tr2PPFadeEffect,
     86          'lut': trinity.Tr2PPLutEffect,
     87          'vignette': trinity.Tr2PPVignetteEffect,
     88          'fog': trinity.Tr2PPFogEffect,
     89          'taa': trinity.Tr2PPTaaEffect}
     90         if postProcessMember in ppMemberToClassMap:
     91             return ppMemberToClassMap[postProcessMember]
     92         raise ValueError('Invalid post process member name passed into environment.effects.postprocess')