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