Mesh loader refactor
This commit is contained in:
76
koptilnya/mesh_loader/sv_builder.txt
Normal file
76
koptilnya/mesh_loader/sv_builder.txt
Normal file
@@ -0,0 +1,76 @@
|
||||
-- @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 = {}
|
||||
|
||||
http.get(link, function(response)
|
||||
for object in string.gmatch(response, "^?\n?o%s([%w_%.%-]+)") do
|
||||
table.insert(self._objectsNames, object)
|
||||
end
|
||||
|
||||
self.isReady = true
|
||||
self:onReady(self._objectsNames)
|
||||
self:_sendHolograms()
|
||||
end)
|
||||
|
||||
hook.add("ClientInitialized", "MeshBuilder_ClientInitialized", function(ply)
|
||||
if self.isReady then
|
||||
self:_sendHolograms(ply)
|
||||
end
|
||||
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 not self.isReady then
|
||||
throw("Call build methods when builder is ready!")
|
||||
end
|
||||
|
||||
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})
|
||||
end
|
||||
|
||||
function MeshBuilder:buildAll(pos, ang, scale, color, mat, parent, relativeTo)
|
||||
if not self.isReady then
|
||||
throw("Call build methods when builder is ready!")
|
||||
end
|
||||
|
||||
for _, v in pairs(self._objectsNames) do
|
||||
self:build(v, pos, ang, scale, color, mat, parent, relativeTo)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user