Nikita Kruglickiy 4c12c9d9ed mesh loader v2
2021-03-23 00:42:00 +06:00

78 lines
1.9 KiB
Plaintext

-- @server
MeshBuilder = class("MeshBuilder")
function MeshBuilder:initialize(link, modelPlaceholder)
self.link = link
self.modelPlaceholder = modelPlaceholder or "models/holograms/cube.mdl"
self.isReady = false
self._objectsNames = {}
self._objects = {}
self._readyPlayers = {}
http.get(link, function(response)
for object in string.gmatch(response, "^?\n?o%s([%w_%.%-]+)") do
table.insert(self._objectsNames, object)
end
timer.simple(0, function()
self.isReady = true
self:onReady(self._objectsNames)
end)
for _, v in pairs(self._readyPlayers) do
self:_sendHolograms(v)
end
end)
net.receive("ready", function(len, ply)
table.insert(self._readyPlayers, ply)
self:_sendHolograms(ply)
end)
end
function MeshBuilder:_sendHolograms(ply)
if #self._objects == 0 then
return
end
net.start("holograms")
for _, v in pairs(self._objects) do
net.writeBit(1)
net.writeString(v.name)
net.writeEntity(v.holo)
end
net.writeBit(0)
net.send(ply)
end
function MeshBuilder:onReady(objectsNames)
end
function MeshBuilder:build(name, pos, ang, scale, color, mat, parent, relativeTo)
if isValid(relativeTo) then
pos = relativeTo:localToWorld(pos)
ang = relativeTo:localToWorldAngles(ang)
end
local holo = holograms.create(pos, ang, self.modelPlaceholder, scale)
holo:setColor(color)
holo:setMaterial(mat)
if isValid(parent) then
holo:setParent(parent)
end
table.insert(self._objects, {name = name, holo = holo})
return name, holo
end
function MeshBuilder:buildAll(pos, ang, scale, color, mat, parent, relativeTo)
for _, v in pairs(self._objectsNames) do
self:build(v, pos, ang, scale, color, mat, parent, relativeTo)
end
end