GUI fixes; Mesh loader WIP
This commit is contained in:
@@ -6,12 +6,17 @@ MeshBuilder = class("MeshBuilder")
|
||||
|
||||
function MeshBuilder:initialize()
|
||||
self._objects = {}
|
||||
self._bundle = {}
|
||||
self._setups = {}
|
||||
|
||||
if CLIENT then
|
||||
self._setups = {}
|
||||
self._meshData = {}
|
||||
|
||||
net.receive("sendHolograms", function(len)
|
||||
--[[
|
||||
self._shouldBuild = false
|
||||
self._shouldRevision = true
|
||||
]]
|
||||
|
||||
net.receive("holograms", function(len)
|
||||
local hasNext = net.readBit()
|
||||
|
||||
while hasNext == 1 do
|
||||
@@ -33,9 +38,47 @@ function MeshBuilder:initialize()
|
||||
hasNext = net.readBit()
|
||||
end
|
||||
end)
|
||||
|
||||
--[[
|
||||
net.receive("revision", function()
|
||||
local hasNext = net.readBit()
|
||||
|
||||
while hasNext == 1 do
|
||||
local key = net.readString()
|
||||
|
||||
net.readEntity(function(ent)
|
||||
local holo = ent:toHologram()
|
||||
|
||||
self._objects[key] = holo
|
||||
end)
|
||||
|
||||
hasNext = net.readBit()
|
||||
end
|
||||
|
||||
self._shouldRevision = false
|
||||
|
||||
if self._shouldBuild then
|
||||
self:build()
|
||||
|
||||
self._shouldBuild = false
|
||||
end
|
||||
end)
|
||||
]]
|
||||
else
|
||||
|
||||
net.receive("sendObjects", function(len, ply)
|
||||
--[[
|
||||
net.receive("revision", function(len, ply)
|
||||
net.start("revision")
|
||||
for k, v in pairs(self._objects) do
|
||||
net.writeBit(1)
|
||||
net.writeString(k)
|
||||
net.writeEntity(v)
|
||||
end
|
||||
net.writeBit(0)
|
||||
net.send()
|
||||
end)
|
||||
]]
|
||||
|
||||
net.receive("setups", function(len, ply)
|
||||
local hasNext = net.readBit()
|
||||
|
||||
while hasNext == 1 do
|
||||
@@ -62,15 +105,15 @@ function MeshBuilder:initialize()
|
||||
self._objects[key] = holo
|
||||
end
|
||||
|
||||
if not self._bundle[key] then
|
||||
self._bundle[key] = self._objects[key]
|
||||
if not self._setups[key] then
|
||||
self._setups[key] = self._objects[key]
|
||||
end
|
||||
|
||||
hasNext = net.readBit()
|
||||
end
|
||||
|
||||
net.start("sendHolograms")
|
||||
for k, v in pairs(self._bundle) do
|
||||
net.start("holograms")
|
||||
for k, v in pairs(self._setups) do
|
||||
net.writeBit(1)
|
||||
net.writeString(k)
|
||||
net.writeEntity(v)
|
||||
@@ -78,7 +121,7 @@ function MeshBuilder:initialize()
|
||||
net.writeBit(0)
|
||||
net.send(ply)
|
||||
|
||||
table.empty(self._bundle)
|
||||
table.empty(self._setups)
|
||||
end)
|
||||
end
|
||||
end
|
||||
@@ -89,8 +132,8 @@ if CLIENT then
|
||||
end
|
||||
|
||||
function MeshBuilder:setup(key, pos, ang, scale, color, mat, parent, relativeTo)
|
||||
if not self._objects[key] and not self._bundle[key] and self._meshData[key] then
|
||||
self._bundle[key] = {
|
||||
if not self._objects[key] and not self._setups[key] and self._meshData[key] then
|
||||
self._setups[key] = {
|
||||
pos = pos,
|
||||
ang = ang,
|
||||
scale = scale,
|
||||
@@ -109,9 +152,20 @@ if CLIENT then
|
||||
end
|
||||
|
||||
function MeshBuilder:build()
|
||||
local function send(objects)
|
||||
net.start("sendObjects")
|
||||
for k, v in pairs(objects) do
|
||||
--[[
|
||||
if self._shouldRevision then
|
||||
net.start("revision")
|
||||
net.send()
|
||||
|
||||
self._shouldBuild = true
|
||||
|
||||
return
|
||||
end
|
||||
]]
|
||||
|
||||
local function sendSetups(setups)
|
||||
net.start("setups")
|
||||
for k, v in pairs(setups) do
|
||||
net.writeBit(1)
|
||||
net.writeString(k)
|
||||
net.writeVector(v.pos)
|
||||
@@ -126,28 +180,28 @@ if CLIENT then
|
||||
net.send()
|
||||
end
|
||||
|
||||
local bundleKeys = table.getKeys(self._bundle)
|
||||
local bundleKeys = table.getKeys(self._setups)
|
||||
if #bundleKeys > BUNDLE_SIZE then
|
||||
local i = 1
|
||||
|
||||
timer.create("send", SEND_DELAY, math.ceil(#bundleKeys / BUNDLE_SIZE), function()
|
||||
timer.create("sendSetups", SEND_DELAY, math.ceil(#bundleKeys / BUNDLE_SIZE), function()
|
||||
local from = (i - 1) * BUNDLE_SIZE + 1
|
||||
local objects = {}
|
||||
local setups = {}
|
||||
|
||||
for _, v in pairs({ unpack(bundleKeys, from, from + BUNDLE_SIZE - 1) }) do
|
||||
objects[v] = self._bundle[v]
|
||||
setups[v] = self._setups[v]
|
||||
end
|
||||
|
||||
send(objects)
|
||||
sendSetups(setups)
|
||||
|
||||
if i < math.ceil(#bundleKeys / BUNDLE_SIZE) then
|
||||
i = i + 1
|
||||
else
|
||||
table.empty(self._bundle)
|
||||
table.empty(self._setups)
|
||||
end
|
||||
end)
|
||||
else
|
||||
send(self._bundle)
|
||||
send(self._setups)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user