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')