diff --git a/koptilnya/libs/utils.txt b/koptilnya/libs/utils.txt index e52ff53..411b4b1 100644 --- a/koptilnya/libs/utils.txt +++ b/koptilnya/libs/utils.txt @@ -1,11 +1,24 @@ function checkVarClass(var, class, message) - if type(var) ~= "table" or var["class"] == nil or not var:isInstanceOf(class) then + if type(var) ~= "table" or var["class"] == nil or not var:isInstanceOf(class) then throw(message == nil and "Wrong variable class." or message, 1, true) end end function accessorFunc(tbl, varName, name, defaultValue) tbl[varName] = defaultValue - tbl["get" .. name] = function(self) return self[varName] end - tbl["set" .. name] = function(self, value) self[varName] = value end -end \ No newline at end of file + tbl["get" .. name] = function(self) + return self[varName] + end + tbl["set" .. name] = function(self, value) + self[varName] = value + end +end + +function rotateAround(entity, pivot, angles) + local pos = entity:getPos() + local localPivotPos = entity:worldToLocal(pivot) + + entity:setAngles(angles) + pos = pos + (pivot - entity:localToWorld(localPivotPos)) + entity:setPos(pos) +end diff --git a/koptilnya/mesh_loader/cl_builder.txt b/koptilnya/mesh_loader/cl_builder.txt index 7d8cf84..2a6461f 100644 --- a/koptilnya/mesh_loader/cl_builder.txt +++ b/koptilnya/mesh_loader/cl_builder.txt @@ -15,7 +15,8 @@ function MeshBuilder:initialize(link) self._parser.onLoaded = function(parser, objData, meshData, usedTriangles) self.meshData = meshData - self:_applyMeshes() + net.start("ready") + net.send() end net.receive("holograms", function() @@ -35,10 +36,8 @@ function MeshBuilder:initialize(link) hasNext = net.readBit() end - timer.simple(0, function() - self:onHologramsReceived(self._objects) - self:_applyMeshes() - end) + self:onHologramsReceived(self._objects) + self:_applyMeshes() end) end diff --git a/koptilnya/mesh_loader/obj_parser.txt b/koptilnya/mesh_loader/obj_parser.txt index 7d2a6ac..9ee10d7 100644 --- a/koptilnya/mesh_loader/obj_parser.txt +++ b/koptilnya/mesh_loader/obj_parser.txt @@ -7,7 +7,7 @@ local function setStatus(status) end function ObjParser:initialize(link, maxQuota) - self.maxQuota = maxQuota or 0.5 + self.maxQuota = maxQuota or 0.6 local triangles = mesh.trianglesLeft() @@ -23,7 +23,7 @@ function ObjParser:initialize(link, maxQuota) setStatus("File received, start parsing...") hook.add("think", "loadingMesh", function() - while quotaAverage() < quotaMax() * self.maxQuota do + while math.max(quotaAverage(), quotaUsed()) < quotaMax() * self.maxQuota do if loadMesh() then setName(initialChipName) self:onLoaded(objData, self.meshData, triangles - mesh.trianglesLeft()) diff --git a/koptilnya/mesh_loader/sv_builder.txt b/koptilnya/mesh_loader/sv_builder.txt index 9f6f6ba..5fe954e 100644 --- a/koptilnya/mesh_loader/sv_builder.txt +++ b/koptilnya/mesh_loader/sv_builder.txt @@ -8,6 +8,7 @@ function MeshBuilder:initialize(link, modelPlaceholder) self._objectsNames = {} self._objects = {} + self._readyPlayers = {} http.get(link, function(response) for object in string.gmatch(response, "^?\n?o%s([%w_%.%-]+)") do @@ -16,13 +17,16 @@ function MeshBuilder:initialize(link, modelPlaceholder) self.isReady = true self:onReady(self._objectsNames) - self:_sendHolograms() + + for _, v in pairs(self._readyPlayers) do + self:_sendHolograms(v) + end end) - hook.add("ClientInitialized", "MeshBuilder_ClientInitialized", function(ply) - if self.isReady then - self:_sendHolograms(ply) - end + net.receive("ready", function(len, ply) + table.insert(self._readyPlayers, ply) + + self:_sendHolograms(ply) end) end @@ -45,10 +49,6 @@ 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) @@ -63,13 +63,11 @@ function MeshBuilder:build(name, pos, ang, scale, color, mat, parent, relativeTo end table.insert(self._objects, {name = name, holo = holo}) + + return name, 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