87 | function DebugInfoTable:createWithNodeToCamera(node, yOffset, info, size) |
88 | local x, y, z = localToWorld(node, 0, yOffset, 0) |
89 | local cx, cy, cz = getWorldTranslation(getCamera()) |
90 | local dirX, _, dirZ = MathUtil.vector3Normalize(cx-x, cy-y, cz-z) |
91 | local rotY = MathUtil.getYRotationFromDirection(dirX, dirZ) |
92 | |
93 | return self:createWithWorldPosAndRot(x, y, z, 0, rotY, 0, info, size) |
94 | end |
98 | function DebugInfoTable:createWithWorldPosAndRot(x, y, z, rotX, rotY, rotZ, info, size) |
99 | self.x, self.y, self.z = x, y, z |
100 | self.rotX, self.rotY, self.rotZ = rotX, rotY, rotZ |
101 | self.information = info |
102 | self.size = size * 2.5 |
103 | |
104 | return self |
105 | end |
37 | function DebugInfoTable:draw() |
38 | setTextDepthTestEnabled(false) |
39 | setTextVerticalAlignment(RenderText.VERTICAL_ALIGN_BASELINE) |
40 | setTextColor(self.r, self.g, self.b, self.a) |
41 | setTextBold(false) |
42 | |
43 | local yOffset = 0 |
44 | for i=#self.information, 1, -1 do |
45 | local info = self.information[i] |
46 | local title = info.title |
47 | local content = info.content |
48 | |
49 | for j=#content, 1, -1 do |
50 | local pair = content[j] |
51 | local key = pair.name |
52 | local value = pair.value |
53 | |
54 | setTextAlignment(RenderText.ALIGN_RIGHT) |
55 | renderText3D(self.x, self.y+yOffset, self.z, self.rotX, self.rotY, self.rotZ, self.size, key) |
56 | setTextAlignment(RenderText.ALIGN_LEFT) |
57 | if type(value) == "number" then |
58 | renderText3D(self.x, self.y+yOffset, self.z, self.rotX, self.rotY, self.rotZ, self.size, " " ..string.format("%.4f", value)) |
59 | else |
60 | renderText3D(self.x, self.y+yOffset, self.z, self.rotX, self.rotY, self.rotZ, self.size, " " ..tostring(value)) |
61 | end |
62 | yOffset = yOffset + self.size |
63 | end |
64 | |
65 | setTextAlignment(RenderText.ALIGN_CENTER) |
66 | setTextBold(true) |
67 | renderText3D(self.x, self.y+yOffset, self.z, self.rotX, self.rotY, self.rotZ, self.size, title) |
68 | setTextBold(false) |
69 | setTextAlignment(RenderText.ALIGN_LEFT) |
70 | yOffset = yOffset + 2*self.size |
71 | end |
72 | |
73 | setTextDepthTestEnabled(true) |
74 | end |
15 | function DebugInfoTable.new(customMt) |
16 | local self = setmetatable({}, customMt or DebugInfoTable_mt) |
17 | |
18 | self.x, self.y, self.z = 0, 0, 0 |
19 | self.rotX, self.rotY, self.rotZ = 0, 0, 0 |
20 | self.r, self.g, self.b, self.a = 1, 1, 1, 1 |
21 | self.size = 0.25 |
22 | |
23 | self.text = nil |
24 | self.alignToGround = false |
25 | |
26 | return self |
27 | end |