109 lines
3.0 KiB
Plaintext
109 lines
3.0 KiB
Plaintext
local MODEL_PLACEHOLDER = "models/holograms/cube.mdl"
|
|
|
|
MeshBuilder = class("MeshBuilder")
|
|
|
|
function MeshBuilder:initialize()
|
|
self._holograms = {}
|
|
|
|
if SERVER then
|
|
self._meshObjects = {}
|
|
self._setupAllArgs = nil
|
|
|
|
net.receive("meshDataSet", function(_, ply)
|
|
self._meshObjects = net.readTable()
|
|
|
|
if self._setupAllArgs ~= nil then
|
|
self:setupAll(unpack(self._setupAllArgs))
|
|
|
|
self._setupAllArgs = nil
|
|
end
|
|
|
|
net.start("holograms")
|
|
for k, v in pairs(self._holograms) do
|
|
net.writeBit(1)
|
|
net.writeString(k)
|
|
net.writeEntity(v)
|
|
end
|
|
|
|
net.writeBit(0)
|
|
net.send(ply)
|
|
end)
|
|
else
|
|
self._meshData = {}
|
|
self._hologramsReceived = false
|
|
|
|
net.receive("holograms", function()
|
|
local hasNext = net.readBit()
|
|
|
|
while hasNext == 1 do
|
|
local key = net.readString()
|
|
|
|
net.readEntity(function(ent)
|
|
if not isValid(ent) then return end
|
|
|
|
if self._meshData[key] and not self._holograms[key] then
|
|
self._holograms[key] = ent:toHologram()
|
|
end
|
|
end)
|
|
|
|
hasNext = net.readBit()
|
|
end
|
|
|
|
self._hologramsReceived = true
|
|
|
|
self:applyMeshes()
|
|
end)
|
|
end
|
|
end
|
|
|
|
if SERVER then
|
|
function MeshBuilder:setup(key, pos, ang, scale, color, mat, parent, relativeTo)
|
|
if isValid(self._holograms[key]) then return end
|
|
|
|
if isValid(relativeTo) then
|
|
pos = relativeTo:localToWorld(pos)
|
|
ang = relativeTo:localToWorldAngles(ang)
|
|
end
|
|
|
|
local holo = holograms.create(pos, ang, MODEL_PLACEHOLDER, scale)
|
|
holo:setColor(color)
|
|
holo:setMaterial(mat)
|
|
holo:setParent(parent)
|
|
|
|
self._meshes[key] = Mesh:new()
|
|
self._holograms[key] = holo
|
|
|
|
return holo
|
|
end
|
|
|
|
function MeshBuilder:setupAll(pos, ang, scale, color, mat, parent, relativeTo)
|
|
if #self._meshObjects > 0 then
|
|
for _, v in pairs(self._meshObjects) do
|
|
self:setup(v, pos, ang, scale, color, mat, parent, relativeTo)
|
|
end
|
|
else
|
|
self._setupAllArgs = {pos, ang, scale, color, mat, parent, relativeTo}
|
|
end
|
|
end
|
|
else
|
|
function MeshBuilder:setMeshData(meshData)
|
|
self._meshData = meshData
|
|
|
|
if self._hologramsReceived then
|
|
self:applyMeshes()
|
|
else
|
|
net.start("meshDataSet")
|
|
net.writeTable(table.getKeys(meshData))
|
|
net.send()
|
|
end
|
|
end
|
|
|
|
function MeshBuilder:applyMeshes()
|
|
for k, v in pairs(self._holograms) do
|
|
if isValid(v) then
|
|
v:setMesh(self._meshData[k])
|
|
v:setRenderBounds(Vector(-200), Vector(200))
|
|
end
|
|
end
|
|
end
|
|
end |