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

debugRenderClient.py (7889B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\client\script\graphics\debugRenderClient.py
      2 import trinity
      3 import blue
      4 import yaml
      5 import log
      6 from carbon.common.script.sys.service import Service
      7 from carbon.common.script.util import safeThread
      8 from eve.common.lib import appConst as const
      9 DEBUG_FILENAME = 'debugLog.yaml'
     10 FULL_DEBUG_PATH = blue.paths.ResolvePath(u'res:/') + DEBUG_FILENAME
     11 DEBUG_RES_PATH = 'res:/' + DEBUG_FILENAME
     12 
     13 class DebugRay:
     14 
     15     def __init__(self, src = (0.0, 0.0, 0.0), dst = (0.0, 0.0, 0.0), srcColor = 4294967295L, dstColor = 4294967295L, time = 500, pulse = False):
     16         self.src = src
     17         self.srcColor = srcColor
     18         self.dst = dst
     19         self.dstColor = dstColor
     20         self.time = time
     21         self.currentTime = 0
     22         self.pulse = pulse
     23 
     24     def Render(self):
     25         if self.pulse is True:
     26             newColor = int(255.0 - 255.0 * (float(self.currentTime) / float(self.time))) % 16
     27             srcColor = self.srcColor & 4278190080L | self.srcColor & newColor << 20 | self.srcColor & newColor << 12 | self.srcColor & newColor << 6
     28             dstColor = self.dstColor & 4278190080L | self.srcColor & newColor << 20 | self.srcColor & newColor << 12 | self.srcColor & newColor << 6
     29         else:
     30             srcColor = self.srcColor
     31             dstColor = self.dstColor
     32         trinity.GetDebugRenderer().DrawLine(self.src, srcColor, self.dst, dstColor)
     33         self.currentTime += 1
     34 
     35 
     36 class DebugCapsule:
     37 
     38     def __init__(self, src = (0.0, 0.0, 0.0), dst = (0.0, 0.0, 0.0), radius = 0.0, color = 4294967295L, time = 500):
     39         self.src = src
     40         self.dst = dst
     41         self.radius = radius
     42         self.color = color
     43         self.time = time
     44         self.currentTime = 0
     45 
     46     def Render(self):
     47         newAlpha = int(255.0 - 255.0 * (float(self.currentTime) / float(self.time)))
     48         color = self.color & 16777215 | newAlpha << 24
     49         trinity.GetDebugRenderer().DrawCapsule(self.src, self.dst, self.radius, 6, color)
     50         self.currentTime += 1
     51 
     52 
     53 class DebugSphere:
     54 
     55     def __init__(self, src = (0.0, 0.0, 0.0), radius = 0.0, color = 4294967295L, time = 500):
     56         self.src = src
     57         self.radius = radius
     58         self.color = color
     59         self.time = time
     60         self.currentTime = 0
     61 
     62     def Render(self):
     63         newAlpha = int(255.0 - 255.0 * (float(self.currentTime) / float(self.time)))
     64         color = self.color & 16777215 | newAlpha << 24
     65         trinity.GetDebugRenderer().DrawSphere(self.src, self.radius, 6, color)
     66         self.currentTime += 1
     67 
     68 
     69 class DebugCylinder:
     70 
     71     def __init__(self, src = (0.0, 0.0, 0.0), dst = (0.0, 0.0, 0.0), radius = 0.0, color = 4294967295L, time = 500):
     72         self.src = src
     73         self.dst = dst
     74         self.radius = radius
     75         self.color = color
     76         self.time = time
     77         self.currentTime = 0
     78 
     79     def Render(self):
     80         newAlpha = int(255.0 - 255.0 * (float(self.currentTime) / float(self.time)))
     81         color = self.color & 16777215 | newAlpha << 24
     82         trinity.GetDebugRenderer().DrawCylinder(self.src, self.dst, self.radius, 6, color)
     83         self.currentTime += 1
     84 
     85 
     86 class DebugCone:
     87 
     88     def __init__(self, src = (0.0, 0.0, 0.0), dst = (0.0, 0.0, 0.0), radius = 0.0, color = 4294967295L, time = 500):
     89         self.src = src
     90         self.dst = dst
     91         self.radius = radius
     92         self.color = color
     93         self.time = time
     94         self.currentTime = 0
     95 
     96     def Render(self):
     97         newAlpha = int(255.0 - 255.0 * (float(self.currentTime) / float(self.time)))
     98         color = self.color & 16777215 | newAlpha << 24
     99         trinity.GetDebugRenderer().DrawCone(self.src, self.dst, self.radius, 6, color)
    100         self.currentTime += 1
    101 
    102 
    103 class DebugBox:
    104 
    105     def __init__(self, min = (0.0, 0.0, 0.0), max = (0.0, 0.0, 0.0), color = 4294967295L, time = 500):
    106         self.min = min
    107         self.max = max
    108         self.color = color
    109         self.time = time
    110         self.currentTime = 0
    111 
    112     def Render(self):
    113         newAlpha = int(255.0 - 255.0 * (float(self.currentTime) / float(self.time)))
    114         color = self.color & 16777215 | newAlpha << 24
    115         trinity.GetDebugRenderer().DrawBox(self.min, self.max, color)
    116         self.currentTime += 1
    117 
    118 
    119 class DebugText:
    120 
    121     def __init__(self, src = (0.0, 0.0, 0.0), msg = '', color = 4294967295L, time = 500, fade = True):
    122         self.src = src
    123         self.color = color
    124         self.msg = msg
    125         self.time = time
    126         self.currentTime = 0
    127         self.fade = fade
    128 
    129     def Render(self):
    130         if self.fade is True:
    131             newAlpha = int(255.0 - 255.0 * (self.currentTime / float(self.time)))
    132             color = self.color & 16777215 | newAlpha << 24
    133             trinity.GetDebugRenderer().Print3D(self.src, color, self.msg)
    134         else:
    135             trinity.GetDebugRenderer().Print3D(self.src, self.color, self.msg)
    136         self.currentTime += 1
    137 
    138 
    139 class DebugRenderClient(Service, safeThread.SafeThread):
    140     __guid__ = 'svc.debugRenderClient'
    141 
    142     def __init__(self, *args):
    143         Service.__init__(self, *args)
    144         self.shapes = []
    145         self.debugRender = False
    146         self.renderJob = None
    147         safeThread.SafeThread.init(self, 'debugRenderClient')
    148 
    149     def Run(self, *args):
    150         Service.Run(self, *args)
    151         self.LaunchSafeThreadLoop_BlueTime(const.ONE_TICK)
    152 
    153     def SetDebugRendering(self, enabled):
    154         self.debugRender = enabled
    155         if enabled and self.renderJob is None:
    156             self.renderJob = trinity.CreateRenderJob()
    157             dr = self.renderJob.RenderDebug()
    158             dr.name = 'DebugRendererInPlace'
    159             trinity.SetDebugRenderer(dr)
    160             self.renderJob.ScheduleRecurring()
    161         elif not enabled and self.renderJob is not None:
    162             self.renderJob.UnscheduleRecurring()
    163             self.renderJob = None
    164 
    165     def GetDebugRendering(self):
    166         return self.debugRender
    167 
    168     def ClearAllShapes(self):
    169         self.shapes = []
    170 
    171     def SafeThreadLoop(self, now):
    172         shapesToKill = []
    173         if self.debugRender:
    174             try:
    175                 for shape in self.shapes:
    176                     shape.Render()
    177                     if shape.currentTime > shape.time:
    178                         shapesToKill.append(shape)
    179 
    180             except:
    181                 log.LogException('Error rendering shape in debugRenderClient.SafeThreadLoop')
    182                 self.shapes = []
    183 
    184         else:
    185             self.ClearAllShapes()
    186         for shape in shapesToKill:
    187             self.shapes.remove(shape)
    188 
    189     def RenderRay(self, src, dst, srcColor = 4294967295L, dstColor = 4294967295L, time = 500, pulse = False):
    190         self.shapes.append(DebugRay(src, dst, srcColor, dstColor, time, pulse))
    191 
    192     def RenderText(self, pos, msg, color = 4294967295L, time = 500, fade = True):
    193         self.shapes.append(DebugText(pos, msg, color, time, fade))
    194 
    195     def RenderCapsule(self, src, dst, radius, color, time = 500):
    196         self.shapes.append(DebugCapsule(src, dst, radius, color, time))
    197 
    198     def RenderCylinder(self, src, dst, radius, color, time = 500):
    199         self.shapes.append(DebugCylinder(src, dst, radius, color, time))
    200 
    201     def RenderCone(self, src, dst, radius, color, time = 500):
    202         self.shapes.append(DebugCone(src, dst, radius, color, time))
    203 
    204     def RenderBox(self, min, max, color, time = 500):
    205         self.shapes.append(DebugBox(min, max, color, time))
    206 
    207     def RenderSphere(self, src, radius, color = 4294967295L, time = 500):
    208         self.shapes.append(DebugSphere(src, radius, color, time))
    209 
    210     def ExportDebugData(self, path = FULL_DEBUG_PATH):
    211         outFile = open(path, 'w')
    212         yaml.dump(self.shapes, outFile)
    213         outFile.close()
    214 
    215     def LoadDebugData(self, path = DEBUG_RES_PATH):
    216         resourceFile = blue.ResFile()
    217         resFile = resourceFile.open(path)
    218         self.shapes = yaml.load(resFile)
    219         resourceFile.close()