fixes
This commit is contained in:
parent
eb6144ae94
commit
0bd64a0f78
@ -1,3 +1,4 @@
|
|||||||
|
-- @name koptilnya/libs/render
|
||||||
--@client
|
--@client
|
||||||
|
|
||||||
function render.drawWedge(x, y, w, h, angle, mouthSize, fidelity)
|
function render.drawWedge(x, y, w, h, angle, mouthSize, fidelity)
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
-- @name koptilnya/libs/table
|
||||||
|
|
||||||
function table.chunk(tbl, size)
|
function table.chunk(tbl, size)
|
||||||
size = size or 1
|
size = size or 1
|
||||||
size = size > 0 and size or 1
|
size = size > 0 and size or 1
|
||||||
@ -17,3 +19,23 @@ function table.chunk(tbl, size)
|
|||||||
|
|
||||||
return result
|
return result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function table.contains(tbl, ...)
|
||||||
|
local argCount = #arg
|
||||||
|
|
||||||
|
if argCount == 1 then
|
||||||
|
return table.hasValue(tbl, arg[1])
|
||||||
|
elseif argCount > 1 then
|
||||||
|
local result = true
|
||||||
|
|
||||||
|
for _, v in pairs(arg) do
|
||||||
|
if not table.hasValue(tbl, v) then
|
||||||
|
result = true
|
||||||
|
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
-- @name koptilnya/libs/utils
|
||||||
|
|
||||||
function checkVarClass(var, class, message)
|
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)
|
throw(message == nil and "Wrong variable class." or message, 1, true)
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
-- @name koptilnya/libs/workers
|
||||||
|
|
||||||
WORKERS = {}
|
WORKERS = {}
|
||||||
WORKERS_QUOTA = 0.4
|
WORKERS_QUOTA = 0.4
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
-- @name koptilnya/mesh_loader/builder
|
||||||
-- @include sv_builder.txt
|
-- @include sv_builder.txt
|
||||||
-- @include cl_builder.txt
|
-- @include cl_builder.txt
|
||||||
if SERVER then
|
if SERVER then
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
-- @name koptilnya/mesh_loader/cl_builder
|
||||||
-- @client
|
-- @client
|
||||||
-- @include /koptilnya/libs/table.txt
|
-- @include /koptilnya/libs/table.txt
|
||||||
-- @include obj_parser.txt
|
-- @include obj_parser.txt
|
||||||
@ -26,6 +27,9 @@ function MeshBuilder:initialize(link)
|
|||||||
self:_applyMeshes()
|
self:_applyMeshes()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
net.start("initialized")
|
||||||
|
net.send()
|
||||||
|
|
||||||
net.receive("objects", function()
|
net.receive("objects", function()
|
||||||
self._objects = {}
|
self._objects = {}
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
-- @name koptilnya/mesh_loader/obj_parser
|
||||||
-- @client
|
-- @client
|
||||||
-- @include /koptilnya/libs/workers.txt
|
-- @include /koptilnya/libs/workers.txt
|
||||||
require("/koptilnya/libs/workers.txt")
|
require("/koptilnya/libs/workers.txt")
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
-- @name koptilnya/mesh_loader/sv_builder
|
||||||
-- @server
|
-- @server
|
||||||
-- @include /koptilnya/libs/workers.txt
|
-- @include /koptilnya/libs/workers.txt
|
||||||
require("/koptilnya/libs/workers.txt")
|
require("/koptilnya/libs/workers.txt")
|
||||||
@ -11,24 +12,39 @@ function MeshBuilder:initialize(link, modelPlaceholder)
|
|||||||
self._objectsNames = {}
|
self._objectsNames = {}
|
||||||
self._objects = {}
|
self._objects = {}
|
||||||
self._objectsToSend = {}
|
self._objectsToSend = {}
|
||||||
|
self._playersWithAccess = {}
|
||||||
self._firstTimePlayers = find.allPlayers()
|
self._firstTimePlayers = find.allPlayers()
|
||||||
self._firstTimeSended = false
|
self._firstTimeSended = false
|
||||||
|
|
||||||
net.receive("obj_parsed", function(len, ply)
|
net.receive("obj_parsed", function(len, ply)
|
||||||
|
if DEBUG_MODE then
|
||||||
|
print(string.format("%s parsed the .obj", ply:getName()))
|
||||||
|
end
|
||||||
|
|
||||||
self:onPlayerParsedObj(ply)
|
self:onPlayerParsedObj(ply)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
net.receive("initialized", function(len, ply)
|
||||||
|
if DEBUG_MODE then
|
||||||
|
print(string.format("%s initialized", ply:getName()))
|
||||||
|
end
|
||||||
|
|
||||||
|
table.insert(self._playersWithAccess, ply)
|
||||||
|
|
||||||
|
if self._firstTimeSended then
|
||||||
|
self:_sendObjects(ply)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
hook.add("ClientInitialized", "MeshBuilder_ClientInitialized", function(ply)
|
hook.add("ClientInitialized", "MeshBuilder_ClientInitialized", function(ply)
|
||||||
if #self._firstTimePlayers > 0 then
|
if #self._firstTimePlayers > 0 then
|
||||||
table.removeByValue(self._firstTimePlayers, ply)
|
table.removeByValue(self._firstTimePlayers, ply)
|
||||||
|
|
||||||
if #self._firstTimePlayers == 0 then
|
if #self._firstTimePlayers == 0 then
|
||||||
self:_sendObjects(find.allPlayers())
|
self:_sendObjects(self._playersWithAccess)
|
||||||
|
|
||||||
self._firstTimeSended = true
|
self._firstTimeSended = true
|
||||||
end
|
end
|
||||||
else
|
|
||||||
self:_sendObjects(ply)
|
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
@ -73,10 +89,6 @@ function MeshBuilder:_sendObjects(target)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if type(target) == "table" and #target == 0 or type(target) == "Player" then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
net.start("objects")
|
net.start("objects")
|
||||||
for _, v in pairs(self._objectsToSend) do
|
for _, v in pairs(self._objectsToSend) do
|
||||||
net.writeBit(1)
|
net.writeBit(1)
|
||||||
@ -119,7 +131,7 @@ function MeshBuilder:getResult()
|
|||||||
table.copyFromTo(self._objects, self._objectsToSend)
|
table.copyFromTo(self._objects, self._objectsToSend)
|
||||||
|
|
||||||
if self._firstTimeSended then
|
if self._firstTimeSended then
|
||||||
self:_sendObjects()
|
self:_sendObjects(self._playersWithAccess)
|
||||||
end
|
end
|
||||||
|
|
||||||
return self._objectsToSend
|
return self._objectsToSend
|
||||||
|
|||||||
95
koptilnya/models/example.txt
Normal file
95
koptilnya/models/example.txt
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
--@name Mesh loader example
|
||||||
|
--@author Opti1337
|
||||||
|
--@shared
|
||||||
|
-- @include /koptilnya/mesh_loader/builder.txt
|
||||||
|
require("/koptilnya/mesh_loader/builder.txt")
|
||||||
|
|
||||||
|
local LINK = "https://www.dropbox.com/s/k4rte84qv0s3k1d/vaz_2101_wheel.obj?dl=1"
|
||||||
|
local SCALE = Vector(1)
|
||||||
|
|
||||||
|
local builder = {}
|
||||||
|
|
||||||
|
if SERVER then
|
||||||
|
-- Создаем экземпляр MeshBuilder на сервере
|
||||||
|
builder = MeshBuilder:new(LINK)
|
||||||
|
|
||||||
|
builder.onObjectLoaded = function(builder, objData)
|
||||||
|
--[[
|
||||||
|
Вызывается, когда .obj загружен на сервере
|
||||||
|
objData {string} - Внутренности .obj
|
||||||
|
]]
|
||||||
|
end
|
||||||
|
builder.onObjectParsed = function(builder, objectsName)
|
||||||
|
--[[
|
||||||
|
Вызывается, когда .obj разобран на сервере
|
||||||
|
objectsNames {table} - Таблица с названиями объектов в .obj
|
||||||
|
]]
|
||||||
|
end
|
||||||
|
|
||||||
|
builder.onPlayerParsedObj = function(builder, ply)
|
||||||
|
--[[
|
||||||
|
Вызывается, когда игрок разобрал .obj
|
||||||
|
ply {player} - Игрок, который разобрал .obj
|
||||||
|
]]
|
||||||
|
end
|
||||||
|
|
||||||
|
--[[
|
||||||
|
Настраиваем конкретный меш
|
||||||
|
(название_объекта, позиция, угол, размер, цвет, материал, парент, относительно_чего_позиционировать)
|
||||||
|
]]
|
||||||
|
builder:build("wheel", Vector(0), Angle(0), SCALE, Color(255, 255, 255), "sprops/textures/sprops_rubber", chip(), chip())
|
||||||
|
|
||||||
|
--[[
|
||||||
|
Получаем текущий результат и отправляем его по возможности клиентам. Обычно вызывается после всех вызовов build
|
||||||
|
]]
|
||||||
|
builder:getResult()
|
||||||
|
else -- CLIENT
|
||||||
|
function init()
|
||||||
|
-- Создаем экземпляр MeshBuilder на клиенте
|
||||||
|
builder = MeshBuilder:new(LINK)
|
||||||
|
|
||||||
|
builder.onObjLoaded = function(builder, objData)
|
||||||
|
--[[
|
||||||
|
Вызывается, когда .obj загружен на клиенте
|
||||||
|
objData {string} - Внутренности .obj
|
||||||
|
]]
|
||||||
|
end
|
||||||
|
|
||||||
|
builder.onObjParsed = function(builder, meshData, usedTriangles)
|
||||||
|
--[[
|
||||||
|
Вызывается, когда .obj разобран на клиенте
|
||||||
|
meshData {table} - Таблица с мешами
|
||||||
|
usedTriangles {int} - Сколько использовано треугольников
|
||||||
|
]]
|
||||||
|
end
|
||||||
|
|
||||||
|
builder.onHologramsReceived = function(builder, objects)
|
||||||
|
--[[
|
||||||
|
Вызывается, когда были получен список голограмм от сервера
|
||||||
|
objects {table} - Таблица объектов
|
||||||
|
name {string} - Имя объекта
|
||||||
|
holo {entity} - Голограмма
|
||||||
|
]]
|
||||||
|
end
|
||||||
|
|
||||||
|
builder.onMeshesApplied = function(builder)
|
||||||
|
--[[
|
||||||
|
Вызывается, когда меши были применены к голограммам
|
||||||
|
]]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if hasPermission("http.get") and hasPermission("mesh") and hasPermission("entities.setRenderProperty", chip()) then
|
||||||
|
init()
|
||||||
|
else
|
||||||
|
-- Настраиваем нужные права, если их нет
|
||||||
|
setupPermissionRequest({"http.get", "mesh", "entities.setRenderProperty"}, "", true)
|
||||||
|
|
||||||
|
-- Хук, который срабатывает при изменении прав
|
||||||
|
hook.add("permissionrequest", "_permissionrequest", function()
|
||||||
|
if permissionRequestSatisfied() then
|
||||||
|
init()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
||||||
@ -4,6 +4,8 @@
|
|||||||
-- @include /koptilnya/mesh_loader/builder.txt
|
-- @include /koptilnya/mesh_loader/builder.txt
|
||||||
require("/koptilnya/mesh_loader/builder.txt")
|
require("/koptilnya/mesh_loader/builder.txt")
|
||||||
|
|
||||||
|
DEBUG_MODE = true
|
||||||
|
|
||||||
local LINK = "https://drive.google.com/uc?id=1PvM_NNtdl43L_r2LZz_E9lO_JhWexFxW"
|
local LINK = "https://drive.google.com/uc?id=1PvM_NNtdl43L_r2LZz_E9lO_JhWexFxW"
|
||||||
local SCALE = Vector(0.9)
|
local SCALE = Vector(0.9)
|
||||||
|
|
||||||
@ -11,9 +13,6 @@ local builder = {}
|
|||||||
|
|
||||||
if SERVER then
|
if SERVER then
|
||||||
builder = MeshBuilder:new(LINK)
|
builder = MeshBuilder:new(LINK)
|
||||||
builder.onPlayerParsedObj = function(builder, ply)
|
|
||||||
print(ply)
|
|
||||||
end
|
|
||||||
|
|
||||||
builder:build("Podnojki", Vector(0), Angle(0), SCALE, Color(200, 200, 200), "sprops/textures/sprops_chrome", chip(), chip())
|
builder:build("Podnojki", Vector(0), Angle(0), SCALE, Color(200, 200, 200), "sprops/textures/sprops_chrome", chip(), chip())
|
||||||
builder:build("Kenguryatnik", Vector(0), Angle(0), SCALE, Color(200, 200, 200), "sprops/textures/sprops_chrome", chip(), chip())
|
builder:build("Kenguryatnik", Vector(0), Angle(0), SCALE, Color(200, 200, 200), "sprops/textures/sprops_chrome", chip(), chip())
|
||||||
@ -21,7 +20,7 @@ if SERVER then
|
|||||||
builder:build("Vihlop", Vector(0), Angle(0), SCALE, Color(200, 200, 200), "sprops/textures/sprops_chrome", chip(), chip())
|
builder:build("Vihlop", Vector(0), Angle(0), SCALE, Color(200, 200, 200), "sprops/textures/sprops_chrome", chip(), chip())
|
||||||
|
|
||||||
builder:build("Podtumanniki", Vector(0), Angle(0), SCALE, Color(100, 100, 100), "models/debug/debugwhite", chip(), chip())
|
builder:build("Podtumanniki", Vector(0), Angle(0), SCALE, Color(100, 100, 100), "models/debug/debugwhite", chip(), chip())
|
||||||
builder:build("Nomera", Vector(0), Angle(0), SCALE, Color(54, 225, 220), "models/debug/debugwhite", chip(), chip())
|
builder:build("Nomera", Vector(0), Angle(0), SCALE, Color(54, 225, 220), "sprops/sprops_grid_orange_12x12", chip(), chip())
|
||||||
builder:build("Okna", Vector(0), Angle(0), SCALE, Color(0, 0, 0, 200), "models/debug/debugwhite", chip(), chip())
|
builder:build("Okna", Vector(0), Angle(0), SCALE, Color(0, 0, 0, 200), "models/debug/debugwhite", chip(), chip())
|
||||||
builder:build("Skobi", Vector(0), Angle(0), SCALE, Color(55, 55, 55, 255), "models/debug/debugwhite", chip(), chip())
|
builder:build("Skobi", Vector(0), Angle(0), SCALE, Color(55, 55, 55, 255), "models/debug/debugwhite", chip(), chip())
|
||||||
builder:build("Nakladki", Vector(0), Angle(0), SCALE, Color(44, 44, 44, 255), "models/debug/debugwhite", chip(), chip())
|
builder:build("Nakladki", Vector(0), Angle(0), SCALE, Color(44, 44, 44, 255), "models/debug/debugwhite", chip(), chip())
|
||||||
|
|||||||
43
koptilnya/models/helicopter.txt
Normal file
43
koptilnya/models/helicopter.txt
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
--@name Helicopter
|
||||||
|
--@author Opti1337
|
||||||
|
--@shared
|
||||||
|
-- @include /koptilnya/mesh_loader/builder.txt
|
||||||
|
require("/koptilnya/mesh_loader/builder.txt")
|
||||||
|
|
||||||
|
DEBUG_MODE = true
|
||||||
|
|
||||||
|
local LINK = "https://drive.google.com/uc?id=171YCCoAebzS0y1WRLQ8FZ6lyG_aZZtUB"
|
||||||
|
local SCALE = Vector(0.5)
|
||||||
|
|
||||||
|
local builder = {}
|
||||||
|
|
||||||
|
if SERVER then
|
||||||
|
builder = MeshBuilder:new(LINK)
|
||||||
|
|
||||||
|
builder:build("heli.016", Vector(0), Angle(0), SCALE, Color(0, 203, 0), "models/debug/debugwhite", chip(), chip())
|
||||||
|
builder:build("heli.001_heli.017", Vector(0), Angle(0), SCALE, Color(255, 225, 255, 90), "models/debug/debugwhite", chip(), chip())
|
||||||
|
builder:build("heli.002_heli.018", Vector(0), Angle(0), SCALE, Color(255, 225, 255), "models/debug/debugwhite", chip(), chip())
|
||||||
|
builder:build("heli.003_heli.019", Vector(0), Angle(0), SCALE, Color(231, 0, 0), "models/debug/debugwhite", chip(), chip())
|
||||||
|
builder:build("heli.004_heli.020", Vector(0), Angle(0), SCALE, Color(96, 96, 203), "models/debug/debugwhite", chip(), chip())
|
||||||
|
builder:build("heli.005_heli.021", Vector(0), Angle(0), SCALE, Color(130, 130, 130), "models/debug/debugwhite", chip(), chip())
|
||||||
|
builder:build("heli.006_heli.022", Vector(0), Angle(0), SCALE, Color(255, 224, 0), "models/debug/debugwhite", chip(), chip())
|
||||||
|
builder:build("heli.007_heli.023", Vector(0), Angle(0), SCALE, Color(255, 225, 255), "models/debug/debugwhite", chip(), chip())
|
||||||
|
|
||||||
|
builder:getResult()
|
||||||
|
else
|
||||||
|
function init()
|
||||||
|
builder = MeshBuilder:new(LINK)
|
||||||
|
end
|
||||||
|
|
||||||
|
if hasPermission("http.get") and hasPermission("mesh") and hasPermission("entities.setRenderProperty", chip()) then
|
||||||
|
init()
|
||||||
|
else
|
||||||
|
setupPermissionRequest({"http.get", "mesh", "entities.setRenderProperty"}, "", true)
|
||||||
|
|
||||||
|
hook.add("permissionrequest", "_permissionrequest", function()
|
||||||
|
if permissionRequestSatisfied() then
|
||||||
|
init()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
||||||
@ -4,6 +4,8 @@
|
|||||||
-- @include /koptilnya/mesh_loader/builder.txt
|
-- @include /koptilnya/mesh_loader/builder.txt
|
||||||
require("/koptilnya/mesh_loader/builder.txt")
|
require("/koptilnya/mesh_loader/builder.txt")
|
||||||
|
|
||||||
|
DEBUG_MODE = true
|
||||||
|
|
||||||
local LINK = "https://www.dropbox.com/s/ovw7f8q65tlcdy5/is300.obj?dl=1"
|
local LINK = "https://www.dropbox.com/s/ovw7f8q65tlcdy5/is300.obj?dl=1"
|
||||||
local SCALE = Vector(0.8, 0.79, 0.8)
|
local SCALE = Vector(0.8, 0.79, 0.8)
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
-- @shared
|
|
||||||
-- @name VAZ 2106
|
-- @name VAZ 2106
|
||||||
-- @author Opti1337, DarkSupah
|
-- @author Opti1337, DarkSupah
|
||||||
-- @include /koptilnya/mesh_loader/builder.txt
|
-- @include /koptilnya/mesh_loader/builder.txt
|
||||||
@ -68,6 +67,7 @@ local builder = {}
|
|||||||
|
|
||||||
if SERVER then
|
if SERVER then
|
||||||
builder = MeshBuilder:new(LINK)
|
builder = MeshBuilder:new(LINK)
|
||||||
|
|
||||||
builder:build("Body__Exterior", Vector(0), Angle(0), SCALE, COLORS.Exterior, MATERIALS.Exterior, chip(), chip())
|
builder:build("Body__Exterior", Vector(0), Angle(0), SCALE, COLORS.Exterior, MATERIALS.Exterior, chip(), chip())
|
||||||
|
|
||||||
builder:build("Glass", Vector(0), Angle(0), SCALE, COLORS.Glass, MATERIALS.Glass, chip(), chip())
|
builder:build("Glass", Vector(0), Angle(0), SCALE, COLORS.Glass, MATERIALS.Glass, chip(), chip())
|
||||||
@ -91,11 +91,11 @@ if SERVER then
|
|||||||
|
|
||||||
builder:build("Body__DoorsFrame__Chrome", Vector(0), Angle(0), SCALE, COLORS.Chrome, MATERIALS.Chrome, chip(), chip())
|
builder:build("Body__DoorsFrame__Chrome", Vector(0), Angle(0), SCALE, COLORS.Chrome, MATERIALS.Chrome, chip(), chip())
|
||||||
|
|
||||||
-- builder:build("Body__FrontBumper__Chrome", Vector(0), Angle(0), SCALE, COLORS.Chrome, MATERIALS.Chrome, chip(), chip())
|
builder:build("Body__FrontBumper__Chrome", Vector(0), Angle(0), SCALE, COLORS.Chrome, MATERIALS.Chrome, chip(), chip())
|
||||||
-- builder:build("Body__FrontBumper__Plastic", Vector(0), Angle(0), SCALE, COLORS.Plastic, MATERIALS.Plastic, chip(), chip())
|
builder:build("Body__FrontBumper__Plastic", Vector(0), Angle(0), SCALE, COLORS.Plastic, MATERIALS.Plastic, chip(), chip())
|
||||||
|
|
||||||
-- builder:build("Body__RearBumper__Chrome", Vector(0), Angle(0), SCALE, COLORS.Chrome, MATERIALS.Chrome, chip(), chip())
|
builder:build("Body__RearBumper__Chrome", Vector(2, 0, 0), Angle(0), SCALE, COLORS.Chrome, MATERIALS.Chrome, chip(), chip())
|
||||||
-- builder:build("Body__RearBumper__Plastic", Vector(0), Angle(0), SCALE, COLORS.Plastic, MATERIALS.Plastic, chip(), chip())
|
builder:build("Body__RearBumper__Plastic", Vector(2, 0, 0), Angle(0), SCALE, COLORS.Plastic, MATERIALS.Plastic, chip(), chip())
|
||||||
|
|
||||||
builder:build("Interior__Floor__InteriorFloor", Vector(0), Angle(0), SCALE, COLORS.InteriorFloor, MATERIALS.InteriorFloor, chip(), chip())
|
builder:build("Interior__Floor__InteriorFloor", Vector(0), Angle(0), SCALE, COLORS.InteriorFloor, MATERIALS.InteriorFloor, chip(), chip())
|
||||||
builder:build("Interior__DashBase__Dashboard", Vector(0), Angle(0), SCALE, COLORS.DashboardBase, MATERIALS.DashboardBase, chip(), chip())
|
builder:build("Interior__DashBase__Dashboard", Vector(0), Angle(0), SCALE, COLORS.DashboardBase, MATERIALS.DashboardBase, chip(), chip())
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user