:)
This commit is contained in:
parent
cb9c7b73bb
commit
a47d2b43f7
@ -75,7 +75,17 @@ if SERVER then
|
|||||||
builder:build("DoorPanels_body1_model0.003", Vector(0), Angle(0), SCALE, COLORS.Interior, MATERIALS.Interior, chip(), chip())
|
builder:build("DoorPanels_body1_model0.003", Vector(0), Angle(0), SCALE, COLORS.Interior, MATERIALS.Interior, chip(), chip())
|
||||||
|
|
||||||
-- Lights
|
-- Lights
|
||||||
local StopLights = builder:build("StopLights_body1_model0.016", Vector(0), Angle(0), SCALE, COLORS.LightsBase, MATERIALS.LightsBase, chip(), chip())
|
local LeftStopLight1 = builder:build("LR_TurnLight_1_body1_model0.019", Vector(0), Angle(0), SCALE, COLORS.LightsBase, MATERIALS.LightsBase, chip(), chip())
|
||||||
|
local LeftStopLight2 = builder:build("LR_TurnLight_2_body1_model0.020", Vector(0), Angle(0), SCALE, COLORS.LightsBase, MATERIALS.LightsBase, chip(), chip())
|
||||||
|
local LeftStopLight3 = builder:build("LR_TurnLight_3_body1_model0.021", Vector(0), Angle(0), SCALE, COLORS.LightsBase, MATERIALS.LightsBase, chip(), chip())
|
||||||
|
local RightStopLight1 = builder:build("RR_TurnLight_1_body1_model0.016", Vector(0), Angle(0), SCALE, COLORS.LightsBase, MATERIALS.LightsBase, chip(), chip())
|
||||||
|
local RightStopLight2 = builder:build("RR_TurnLight_2_body1_model0.023", Vector(0), Angle(0), SCALE, COLORS.LightsBase, MATERIALS.LightsBase, chip(), chip())
|
||||||
|
local RightStopLight3 = builder:build("RR_TurnLight_3_body1_model0.022", Vector(0), Angle(0), SCALE, COLORS.LightsBase, MATERIALS.LightsBase, chip(), chip())
|
||||||
|
local LeftMirrorTurnLight = builder:build("LeftMirrorTurnLight_body1_model0.024", Vector(0), Angle(0), SCALE, COLORS.LightsBase, MATERIALS.LightsBase, chip(), chip())
|
||||||
|
local RightMirrorTurnLight = builder:build("RightMirrorTurnLight_body1_model0.025", Vector(0), Angle(0), SCALE, COLORS.LightsBase, MATERIALS.LightsBase, chip(), chip())
|
||||||
|
local LeftBumperTurnLight = builder:build("LeftBumperTurnLight_body1_model0.027", Vector(0), Angle(0), SCALE, COLORS.LightsBase, MATERIALS.LightsBase, chip(), chip())
|
||||||
|
local RightMirrorTurnLight = builder:build("RightBumperTurnLight_body1_model0.026", Vector(0), Angle(0), SCALE, COLORS.LightsBase, MATERIALS.LightsBase, chip(), chip())
|
||||||
|
|
||||||
local ReverseLights = builder:build("ReverseLight_body1_model0.015", Vector(0), Angle(0), SCALE, COLORS.LightsBase, MATERIALS.LightsBase, chip(), chip())
|
local ReverseLights = builder:build("ReverseLight_body1_model0.015", Vector(0), Angle(0), SCALE, COLORS.LightsBase, MATERIALS.LightsBase, chip(), chip())
|
||||||
local LowBeamLights = builder:build("LowBeamLights_body1_model0.006", Vector(0), Angle(0), SCALE, COLORS.LightsBase, MATERIALS.LightsBase, chip(), chip())
|
local LowBeamLights = builder:build("LowBeamLights_body1_model0.006", Vector(0), Angle(0), SCALE, COLORS.LightsBase, MATERIALS.LightsBase, chip(), chip())
|
||||||
local HighBeamLights = builder:build("HighBeamLights_body1_model0.017", Vector(0), Angle(0), SCALE, COLORS.LightsBase, MATERIALS.LightsBase, chip(), chip())
|
local HighBeamLights = builder:build("HighBeamLights_body1_model0.017", Vector(0), Angle(0), SCALE, COLORS.LightsBase, MATERIALS.LightsBase, chip(), chip())
|
||||||
@ -84,11 +94,12 @@ if SERVER then
|
|||||||
local result = builder:getResult()
|
local result = builder:getResult()
|
||||||
|
|
||||||
local lights = {
|
local lights = {
|
||||||
StopLights = {Entities = {StopLights}, LerpSpeed = 0.2, Colors = {On = Color(250, 0, 0), Off = Color(30, 0, 0), Active = Color(90, 0, 0)}},
|
StopLights = {Entities = {LeftStopLight1, LeftStopLight2, LeftStopLight3, RightStopLight1, RightStopLight2, RightStopLight3}, LerpSpeed = 0.2, Colors = {On = Color(250, 0, 0), Off = Color(30, 0, 0), Active = Color(90, 0, 0)}},
|
||||||
ReverseLights = {Entities = {ReverseLights}, LerpSpeed = 0.1, Colors = {On = Color(255, 255, 255), Off = Color(20, 20, 20)}},
|
ReverseLights = {Entities = {ReverseLights}, LerpSpeed = 0.1, Colors = {On = Color(255, 255, 255), Off = Color(20, 20, 20)}},
|
||||||
LowBeamLights = {Entities = {LowBeamLights}, LerpSpeed = 0.1, Colors = {On = Color(255, 255, 255), Off = Color(20, 20, 20)}},
|
LowBeamLights = {Entities = {LowBeamLights}, LerpSpeed = 0.1, Colors = {On = Color(255, 255, 255), Off = Color(20, 20, 20)}},
|
||||||
HighBeamLights = {Entities = {HighBeamLights}, LerpSpeed = 0.1, Colors = {On = Color(255, 255, 255), Off = Color(20, 20, 20)}},
|
HighBeamLights = {Entities = {HighBeamLights}, LerpSpeed = 0.1, Colors = {On = Color(255, 255, 255), Off = Color(20, 20, 20)}},
|
||||||
FogLights = {Entities = {FogLights}, LerpSpeed = 0.1, Colors = {On = Color(255, 255, 255), Off = Color(20, 20, 20)}}
|
FogLights = {Entities = {FogLights}, LerpSpeed = 0.1, Colors = {On = Color(255, 255, 255), Off = Color(20, 20, 20)}}
|
||||||
|
TurnLights = {LeftEntities = {LeftStopLight1, LeftStopLight2, LeftStopLight3}, RightEntities = {RightStopLight1, RightStopLight2, RightStopLight3}, LerpSpeed = 0.2, Colors = {On = Color(250, 120, 0), Off = Color(30, 0, 0)}}
|
||||||
}
|
}
|
||||||
|
|
||||||
-- local lightsEntities = {StopLights = {StopLights}, ReverseLights = {ReverseLights}, LowBeamLights = {LowBeamLights}, HighBeamLights = {HighBeamLights}}
|
-- local lightsEntities = {StopLights = {StopLights}, ReverseLights = {ReverseLights}, LowBeamLights = {LowBeamLights}, HighBeamLights = {HighBeamLights}}
|
||||||
@ -6,7 +6,8 @@ require("/koptilnya/mesh_loader/builder.txt")
|
|||||||
|
|
||||||
DEBUG_MODE = true
|
DEBUG_MODE = true
|
||||||
|
|
||||||
local LINK = "https://drive.google.com/uc?id=1PvM_NNtdl43L_r2LZz_E9lO_JhWexFxW"
|
--local LINK = "https://drive.google.com/uc?id=1Z15GAuNhRU3GQ15J9YOSQHk3KrwrOzGE"
|
||||||
|
local LINK = "http://217.25.221.225/asd.obj"
|
||||||
local SCALE = Vector(0.9)
|
local SCALE = Vector(0.9)
|
||||||
|
|
||||||
local builder = {}
|
local builder = {}
|
||||||
@ -15,7 +16,7 @@ if SERVER then
|
|||||||
builder = MeshBuilder:new(LINK)
|
builder = MeshBuilder:new(LINK)
|
||||||
|
|
||||||
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())
|
||||||
builder:build("AntennaSerebro", Vector(0), Angle(0), SCALE, Color(200, 200, 200), "sprops/textures/sprops_chrome", chip(), chip())
|
builder:build("AntennaSerebro", 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("Vihlop", Vector(0), Angle(0), SCALE, Color(200, 200, 200), "sprops/textures/sprops_chrome", chip(), chip())
|
||||||
|
|
||||||
@ -26,9 +27,9 @@ if SERVER then
|
|||||||
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())
|
||||||
builder:build("Black", Vector(0), Angle(0), SCALE, Color(0, 0, 0), "models/debug/debugwhite", chip(), chip())
|
builder:build("Black", Vector(0), Angle(0), SCALE, Color(0, 0, 0), "models/debug/debugwhite", chip(), chip())
|
||||||
builder:build("SalonKraskiyCvet", Vector(0), Angle(0), SCALE, Color(225, 55, 55), "models/debug/debugwhite", chip(), chip())
|
builder:build("SalonKraskiyCvet", Vector(0), Angle(0), SCALE, Color(225, 55, 55), "models/debug/debugwhite", chip(), chip())
|
||||||
builder:build("Korpus", Vector(0), Angle(0), SCALE, Color(155, 0, 0), "models/debug/debugwhite", chip(), chip())
|
builder:build("Korpus", Vector(0), Angle(0), SCALE, Color(0, 0, 195), "models/shiny", chip(), chip())
|
||||||
builder:build("Salon", Vector(0), Angle(0), SCALE, Color(110, 100, 100), "models/debug/debugwhite", chip(), chip())
|
builder:build("Salon", Vector(0), Angle(0), SCALE, Color(110, 100, 100), "models/debug/debugwhite", chip(), chip())
|
||||||
builder:build("Sidushki", Vector(0), Angle(0), SCALE, Color(110, 100, 100), "models/debug/debugwhite", chip(), chip())
|
builder:build("Sidushki", Vector(0), Angle(0), SCALE, Color(110, 100, 100), "WTP/cloth_1", chip(), chip())
|
||||||
builder:build("Vozduhovodi", Vector(0), Angle(0), SCALE, Color(50, 50, 50), "models/debug/debugwhite", chip(), chip())
|
builder:build("Vozduhovodi", Vector(0), Angle(0), SCALE, Color(50, 50, 50), "models/debug/debugwhite", chip(), chip())
|
||||||
builder:build("Lampochki", Vector(0), Angle(0), SCALE, Color(255, 255, 255), "models/debug/debugwhite", chip(), chip())
|
builder:build("Lampochki", Vector(0), Angle(0), SCALE, Color(255, 255, 255), "models/debug/debugwhite", chip(), chip())
|
||||||
builder:build("Rama", Vector(0), Angle(0), SCALE, Color(80, 80, 80), "models/debug/debugwhite", chip(), chip())
|
builder:build("Rama", Vector(0), Angle(0), SCALE, Color(80, 80, 80), "models/debug/debugwhite", chip(), chip())
|
||||||
@ -38,7 +39,7 @@ if SERVER then
|
|||||||
builder:build("StekloZadneiFari", Vector(0), Angle(0), SCALE, Color(255, 0, 0), "models/debug/debugwhite", chip(), chip())
|
builder:build("StekloZadneiFari", Vector(0), Angle(0), SCALE, Color(255, 0, 0), "models/debug/debugwhite", chip(), chip())
|
||||||
builder:build("StekloZadneiFari2", Vector(0), Angle(0), SCALE, Color(225, 55, 55), "models/debug/debugwhite", chip(), chip())
|
builder:build("StekloZadneiFari2", Vector(0), Angle(0), SCALE, Color(225, 55, 55), "models/debug/debugwhite", chip(), chip())
|
||||||
builder:build("KorpusZadneiFari", Vector(0), Angle(0), SCALE, Color(225, 55, 55), "models/debug/debugwhite", chip(), chip())
|
builder:build("KorpusZadneiFari", Vector(0), Angle(0), SCALE, Color(225, 55, 55), "models/debug/debugwhite", chip(), chip())
|
||||||
builder:build("Multimedia", Vector(0), Angle(0), SCALE, Color(225, 255, 255), "models/debug/debugwhite", chip(), chip())
|
builder:build("Multimedia", Vector(0), Angle(0), SCALE, Color(225, 255, 255), "WTP/cloth_1", chip(), chip())
|
||||||
|
|
||||||
builder:build("KorpusAntenni", Vector(0), Angle(0), SCALE, Color(255, 255, 255), "sprops/textures/sprops_rubber2", chip(), chip())
|
builder:build("KorpusAntenni", Vector(0), Angle(0), SCALE, Color(255, 255, 255), "sprops/textures/sprops_rubber2", chip(), chip())
|
||||||
builder:build("Shnorkel", Vector(0), Angle(0), SCALE, Color(255, 255, 255), "sprops/textures/sprops_rubber2", chip(), chip())
|
builder:build("Shnorkel", Vector(0), Angle(0), SCALE, Color(255, 255, 255), "sprops/textures/sprops_rubber2", chip(), chip())
|
||||||
@ -14,14 +14,14 @@ local builder = {}
|
|||||||
if SERVER then
|
if SERVER then
|
||||||
builder = MeshBuilder:new(LINK)
|
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.016", Vector(0), Angle(0), SCALE, Color(0, 203, 0), "WTP/camoflage_4", 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.001_heli.017", Vector(0), Angle(0), SCALE, Color(255, 225, 255, 90), "WTP/camoflage_4", 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.002_heli.018", Vector(0), Angle(0), SCALE, Color(255, 225, 255), "https://i.imgur.com/uLC5dBA.png", 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.003_heli.019", Vector(0), Angle(0), SCALE, Color(231, 0, 0), "https://i.imgur.com/uLC5dBA.png", 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.004_heli.020", Vector(0), Angle(0), SCALE, Color(96, 96, 203), "https://i.imgur.com/uLC5dBA.png", 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.005_heli.021", Vector(0), Angle(0), SCALE, Color(130, 130, 130), "https://i.imgur.com/f2tbMe7.png", 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.006_heli.022", Vector(0), Angle(0), SCALE, Color(255, 224, 0), "https://i.imgur.com/FQHnxqZ.jpeg", chip(), chip())
|
||||||
builder:build("heli.007_heli.023", Vector(0), Angle(0), SCALE, Color(255, 225, 255), "models/debug/debugwhite", chip(), chip())
|
builder:build("heli.007_heli.023", Vector(0), Angle(0), SCALE, Color(255, 225, 255), "https://i.imgur.com/uLC5dBA.png", chip(), chip())
|
||||||
|
|
||||||
builder:getResult()
|
builder:getResult()
|
||||||
else
|
else
|
||||||
@ -6,7 +6,7 @@ require("/koptilnya/mesh_loader/builder.txt")
|
|||||||
|
|
||||||
DEBUG_MODE = true
|
DEBUG_MODE = true
|
||||||
|
|
||||||
local LINK = "https://www.dropbox.com/s/ovw7f8q65tlcdy5/is300.obj?dl=1"
|
local LINK = "https://www.dropbox.com/s/0vnd3nir8cyolz5/is300_3.obj?dl=1"
|
||||||
local SCALE = Vector(0.8, 0.79, 0.8)
|
local SCALE = Vector(0.8, 0.79, 0.8)
|
||||||
|
|
||||||
local builder = {}
|
local builder = {}
|
||||||
@ -5,9 +5,9 @@ require("render_device.txt")
|
|||||||
RenderDeviceHUD = class("RenderDeviceHUD", RenderDevice)
|
RenderDeviceHUD = class("RenderDeviceHUD", RenderDevice)
|
||||||
|
|
||||||
function RenderDeviceHUD:initialize()
|
function RenderDeviceHUD:initialize()
|
||||||
--if player() == owner() then
|
if player() == owner() then
|
||||||
-- enableHud(player(), true)
|
enableHud(player(), true)
|
||||||
--end
|
end
|
||||||
|
|
||||||
self:setSize(render.getResolution())
|
self:setSize(render.getResolution())
|
||||||
|
|
||||||
|
|||||||
@ -13,26 +13,26 @@ local CONFIG = {
|
|||||||
},
|
},
|
||||||
Clutch = {
|
Clutch = {
|
||||||
DeviceId = 0,
|
DeviceId = 0,
|
||||||
InputId = 4,
|
InputId = 2,
|
||||||
Type = JOYSTICK_INPUT_TYPE.Button,
|
Type = JOYSTICK_INPUT_TYPE.Axis,
|
||||||
Handler = function(value)
|
Handler = function(value)
|
||||||
return math.remap(value, 0, 128, 0, 1)
|
return math.remap(value, 0, 65535, 0, 1)
|
||||||
end
|
end
|
||||||
},
|
},
|
||||||
Throttle = {
|
Throttle = {
|
||||||
DeviceId = 0,
|
DeviceId = 0,
|
||||||
InputId = 5,
|
InputId = 1,
|
||||||
Type = JOYSTICK_INPUT_TYPE.Button,
|
Type = JOYSTICK_INPUT_TYPE.Axis,
|
||||||
Handler = function(value)
|
Handler = function(value)
|
||||||
return math.remap(value, 0, 128, 0, 1)
|
return math.remap(value, 0, 65535, 0, 1)
|
||||||
end
|
end
|
||||||
},
|
},
|
||||||
Brake = {
|
Brake = {
|
||||||
DeviceId = 0,
|
DeviceId = 0,
|
||||||
InputId = 2,
|
InputId = 5,
|
||||||
Type = JOYSTICK_INPUT_TYPE.Button,
|
Type = JOYSTICK_INPUT_TYPE.Axis,
|
||||||
Handler = function(value)
|
Handler = function(value)
|
||||||
return math.remap(value, 0, 128, 0, 1)
|
return math.remap(value, 0, 65535, 0, 1)
|
||||||
end
|
end
|
||||||
},
|
},
|
||||||
Handbrake = {
|
Handbrake = {
|
||||||
@ -45,7 +45,7 @@ local CONFIG = {
|
|||||||
},
|
},
|
||||||
GearUp = {
|
GearUp = {
|
||||||
DeviceId = 0,
|
DeviceId = 0,
|
||||||
InputId = 1,
|
InputId = 3,
|
||||||
Type = JOYSTICK_INPUT_TYPE.Button,
|
Type = JOYSTICK_INPUT_TYPE.Button,
|
||||||
Handler = function(value)
|
Handler = function(value)
|
||||||
return math.remap(value, 0, 128, 0, 1)
|
return math.remap(value, 0, 128, 0, 1)
|
||||||
@ -53,7 +53,7 @@ local CONFIG = {
|
|||||||
},
|
},
|
||||||
GearDown = {
|
GearDown = {
|
||||||
DeviceId = 0,
|
DeviceId = 0,
|
||||||
InputId = 3,
|
InputId = 0,
|
||||||
Type = JOYSTICK_INPUT_TYPE.Button,
|
Type = JOYSTICK_INPUT_TYPE.Button,
|
||||||
Handler = function(value)
|
Handler = function(value)
|
||||||
return math.remap(value, 0, 128, 0, 1)
|
return math.remap(value, 0, 128, 0, 1)
|
||||||
|
|||||||
220
koptilnya/libs/flux.txt
Normal file
220
koptilnya/libs/flux.txt
Normal file
@ -0,0 +1,220 @@
|
|||||||
|
--
|
||||||
|
-- flux
|
||||||
|
--
|
||||||
|
-- Copyright (c) 2016 rxi
|
||||||
|
--
|
||||||
|
-- This library is free software; you can redistribute it and/or modify it
|
||||||
|
-- under the terms of the MIT license. See LICENSE for details.
|
||||||
|
--
|
||||||
|
|
||||||
|
local flux = { _version = "0.1.5" }
|
||||||
|
flux.__index = flux
|
||||||
|
|
||||||
|
flux.tweens = {}
|
||||||
|
flux.easing = { linear = function(p) return p end }
|
||||||
|
|
||||||
|
local easing = {
|
||||||
|
quad = "p * p",
|
||||||
|
cubic = "p * p * p",
|
||||||
|
quart = "p * p * p * p",
|
||||||
|
quint = "p * p * p * p * p",
|
||||||
|
expo = "2 ^ (10 * (p - 1))",
|
||||||
|
sine = "-math.cos(p * (math.pi * .5)) + 1",
|
||||||
|
circ = "-(math.sqrt(1 - (p * p)) - 1)",
|
||||||
|
back = "p * p * (2.7 * p - 1.7)",
|
||||||
|
elastic = "-(2^(10 * (p - 1)) * math.sin((p - 1.075) * (math.pi * 2) / .3))"
|
||||||
|
}
|
||||||
|
|
||||||
|
local makefunc = function(str, expr)
|
||||||
|
local load = loadstring or load
|
||||||
|
return load("return function(p) " .. str:gsub("%$e", expr) .. " end")()
|
||||||
|
end
|
||||||
|
|
||||||
|
for k, v in pairs(easing) do
|
||||||
|
flux.easing[k .. "in"] = makefunc("return $e", v)
|
||||||
|
flux.easing[k .. "out"] = makefunc([[
|
||||||
|
p = 1 - p
|
||||||
|
return 1 - ($e)
|
||||||
|
]], v)
|
||||||
|
flux.easing[k .. "inout"] = makefunc([[
|
||||||
|
p = p * 2
|
||||||
|
if p < 1 then
|
||||||
|
return .5 * ($e)
|
||||||
|
else
|
||||||
|
p = 2 - p
|
||||||
|
return .5 * (1 - ($e)) + .5
|
||||||
|
end
|
||||||
|
]], v)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
local tween = {}
|
||||||
|
tween.__index = tween
|
||||||
|
|
||||||
|
local function makefsetter(field)
|
||||||
|
return function(self, x)
|
||||||
|
local old = self[field]
|
||||||
|
self[field] = old and function() old() x() end or x
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function makesetter(field, checkfn, errmsg)
|
||||||
|
return function(self, x)
|
||||||
|
if checkfn and not checkfn(x) then
|
||||||
|
error(errmsg:gsub("%$x", tostring(x)), 2)
|
||||||
|
end
|
||||||
|
self[field] = x
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
tween.ease = makesetter("_ease",
|
||||||
|
function(x) return flux.easing[x] end,
|
||||||
|
"bad easing type '$x'")
|
||||||
|
tween.delay = makesetter("_delay",
|
||||||
|
function(x) return type(x) == "number" end,
|
||||||
|
"bad delay time; expected number")
|
||||||
|
tween.onstart = makefsetter("_onstart")
|
||||||
|
tween.onupdate = makefsetter("_onupdate")
|
||||||
|
tween.oncomplete = makefsetter("_oncomplete")
|
||||||
|
|
||||||
|
|
||||||
|
function tween.new(obj, time, vars)
|
||||||
|
local self = setmetatable({}, tween)
|
||||||
|
self.obj = obj
|
||||||
|
self.rate = time > 0 and 1 / time or 0
|
||||||
|
self.progress = time > 0 and 0 or 1
|
||||||
|
self._delay = 0
|
||||||
|
self._ease = "quadout"
|
||||||
|
self.vars = {}
|
||||||
|
for k, v in pairs(vars) do
|
||||||
|
if type(v) ~= "number" then
|
||||||
|
error("bad value for key '" .. k .. "'; expected number")
|
||||||
|
end
|
||||||
|
self.vars[k] = v
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function tween:init()
|
||||||
|
for k, v in pairs(self.vars) do
|
||||||
|
local x = self.obj[k]
|
||||||
|
if type(x) ~= "number" then
|
||||||
|
error("bad value on object key '" .. k .. "'; expected number")
|
||||||
|
end
|
||||||
|
self.vars[k] = { start = x, diff = v - x }
|
||||||
|
end
|
||||||
|
self.inited = true
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function tween:after(...)
|
||||||
|
local t
|
||||||
|
if select("#", ...) == 2 then
|
||||||
|
t = tween.new(self.obj, ...)
|
||||||
|
else
|
||||||
|
t = tween.new(...)
|
||||||
|
end
|
||||||
|
t.parent = self.parent
|
||||||
|
self:oncomplete(function() flux.add(self.parent, t) end)
|
||||||
|
return t
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function tween:stop()
|
||||||
|
flux.remove(self.parent, self)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function flux.group()
|
||||||
|
return setmetatable({}, flux)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function flux:to(obj, time, vars)
|
||||||
|
return flux.add(self, tween.new(obj, time, vars))
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function flux:update(deltatime)
|
||||||
|
for i = #self, 1, -1 do
|
||||||
|
local t = self[i]
|
||||||
|
if t._delay > 0 then
|
||||||
|
t._delay = t._delay - deltatime
|
||||||
|
else
|
||||||
|
if not t.inited then
|
||||||
|
flux.clear(self, t.obj, t.vars)
|
||||||
|
t:init()
|
||||||
|
end
|
||||||
|
if t._onstart then
|
||||||
|
t._onstart()
|
||||||
|
t._onstart = nil
|
||||||
|
end
|
||||||
|
t.progress = t.progress + t.rate * deltatime
|
||||||
|
local p = t.progress
|
||||||
|
local x = p >= 1 and 1 or flux.easing[t._ease](p)
|
||||||
|
for k, v in pairs(t.vars) do
|
||||||
|
t.obj[k] = v.start + x * v.diff
|
||||||
|
end
|
||||||
|
if t._onupdate then t._onupdate() end
|
||||||
|
if p >= 1 then
|
||||||
|
flux.remove(self, i)
|
||||||
|
if t._oncomplete then t._oncomplete() end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function flux:clear(obj, vars)
|
||||||
|
for t in pairs(self[obj]) do
|
||||||
|
if t.inited then
|
||||||
|
for k in pairs(vars) do t.vars[k] = nil end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function flux:add(tween)
|
||||||
|
-- Add to object table, create table if it does not exist
|
||||||
|
local obj = tween.obj
|
||||||
|
self[obj] = self[obj] or {}
|
||||||
|
self[obj][tween] = true
|
||||||
|
-- Add to array
|
||||||
|
table.insert(self, tween)
|
||||||
|
tween.parent = self
|
||||||
|
return tween
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function flux:remove(x)
|
||||||
|
if type(x) == "number" then
|
||||||
|
-- Remove from object table, destroy table if it is empty
|
||||||
|
local obj = self[x].obj
|
||||||
|
self[obj][self[x]] = nil
|
||||||
|
if not next(self[obj]) then self[obj] = nil end
|
||||||
|
-- Remove from array
|
||||||
|
self[x] = self[#self]
|
||||||
|
return table.remove(self)
|
||||||
|
end
|
||||||
|
for i, v in ipairs(self) do
|
||||||
|
if v == x then
|
||||||
|
return flux.remove(self, i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
local bound = {
|
||||||
|
to = function(...) return flux.to(flux.tweens, ...) end,
|
||||||
|
update = function(...) return flux.update(flux.tweens, ...) end,
|
||||||
|
remove = function(...) return flux.remove(flux.tweens, ...) end,
|
||||||
|
}
|
||||||
|
setmetatable(bound, flux)
|
||||||
|
|
||||||
|
return bound
|
||||||
60
koptilnya/libs/permissions_builder.txt
Normal file
60
koptilnya/libs/permissions_builder.txt
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
-- @shared
|
||||||
|
|
||||||
|
local PERMISSIONS_BUILDER = PERMISSIONS_BUILDER or {}
|
||||||
|
|
||||||
|
if CLIENT then
|
||||||
|
PERMISSIONS_BUILDER.list = PERMISSIONS_BUILDER.list or {}
|
||||||
|
|
||||||
|
local function onPermissionsGained()
|
||||||
|
PERMISSIONS_BUILDER:onPermissionsGained()
|
||||||
|
|
||||||
|
net.start("onPermissionsGained")
|
||||||
|
net.send()
|
||||||
|
end
|
||||||
|
|
||||||
|
function PERMISSIONS_BUILDER:add(permission)
|
||||||
|
if not table.hasValue(self.list, permission) then
|
||||||
|
table.insert(self.list, permission)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function PERMISSIONS_BUILDER:build(description)
|
||||||
|
description = description or ""
|
||||||
|
|
||||||
|
local allPermissionsGained = true
|
||||||
|
for k, v in pairs(self.list) do
|
||||||
|
if not hasPermission(v) then
|
||||||
|
allPermissionsGained = false
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if allPermissionsGained then
|
||||||
|
onPermissionsGained()
|
||||||
|
else
|
||||||
|
setupPermissionRequest(self.list, description, true)
|
||||||
|
|
||||||
|
hook.add("permissionrequest", "PERMISSIONS_BUILDER_permissionrequest", function()
|
||||||
|
if permissionRequestSatisfied() then
|
||||||
|
onPermissionsGained()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- STUB
|
||||||
|
|
||||||
|
function PERMISSIONS_BUILDER:onPermissionsGained()
|
||||||
|
end
|
||||||
|
else
|
||||||
|
net.receive("onPermissionsGained", function(len, ply)
|
||||||
|
PERMISSIONS_BUILDER:onPermissionsGained(ply)
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- STUB
|
||||||
|
|
||||||
|
function PERMISSIONS_BUILDER:onPermissionsGained(ply)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return PERMISSIONS_BUILDER
|
||||||
@ -68,3 +68,6 @@ function byteTable(str, start, length)
|
|||||||
return result
|
return result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function isURL(str)
|
||||||
|
return string.match(str, "^https?://") ~= nil
|
||||||
|
end
|
||||||
@ -2,8 +2,10 @@
|
|||||||
-- @client
|
-- @client
|
||||||
-- @include /koptilnya/libs/table.txt
|
-- @include /koptilnya/libs/table.txt
|
||||||
-- @include obj_parser.txt
|
-- @include obj_parser.txt
|
||||||
|
-- @include /koptilnya/libs/utils.txt
|
||||||
require("/koptilnya/libs/table.txt")
|
require("/koptilnya/libs/table.txt")
|
||||||
require("obj_parser.txt")
|
require("obj_parser.txt")
|
||||||
|
require("/koptilnya/libs/utils.txt")
|
||||||
|
|
||||||
MeshBuilder = class("MeshBuilder")
|
MeshBuilder = class("MeshBuilder")
|
||||||
|
|
||||||
@ -26,6 +28,21 @@ function MeshBuilder:initialize(link)
|
|||||||
|
|
||||||
self:_applyMeshes()
|
self:_applyMeshes()
|
||||||
end
|
end
|
||||||
|
self._cachedMaterials = {}
|
||||||
|
|
||||||
|
if player() == owner() then
|
||||||
|
net.receive("initialized", function()
|
||||||
|
net.readEntity(function(ply)
|
||||||
|
notification.addProgress(tostring(ply:getUserID()), string.format("%s is loading mesh", ply:getName()))
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
|
||||||
|
net.receive("obj_parsed", function()
|
||||||
|
net.readEntity(function(ply)
|
||||||
|
notification.kill(tostring(ply:getUserID()))
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
net.start("initialized")
|
net.start("initialized")
|
||||||
net.send()
|
net.send()
|
||||||
@ -37,10 +54,18 @@ function MeshBuilder:initialize(link)
|
|||||||
|
|
||||||
while hasNext == 1 do
|
while hasNext == 1 do
|
||||||
local name = net.readString()
|
local name = net.readString()
|
||||||
|
local mat = net.readTable()
|
||||||
|
|
||||||
net.readEntity(function(ent)
|
net.readEntity(function(ent)
|
||||||
local holo = ent:toHologram()
|
local holo = ent:toHologram()
|
||||||
local object = {name = name, holo = holo}
|
|
||||||
|
if (isURL(mat.basetexture)) then
|
||||||
|
mat = self:_createMaterial(mat.shader, mat.basetexture, mat.bumpmap, mat.options)
|
||||||
|
else
|
||||||
|
mat = material.load(mat.basetexture)
|
||||||
|
end
|
||||||
|
|
||||||
|
local object = {name = name, mat = mat, holo = holo}
|
||||||
|
|
||||||
table.insert(self._objects, object)
|
table.insert(self._objects, object)
|
||||||
end)
|
end)
|
||||||
@ -59,6 +84,7 @@ function MeshBuilder:_applyMeshes()
|
|||||||
for _, v in pairs(self._objects) do
|
for _, v in pairs(self._objects) do
|
||||||
if self.meshData[v.name] ~= nil then
|
if self.meshData[v.name] ~= nil then
|
||||||
v.holo:setMesh(self.meshData[v.name])
|
v.holo:setMesh(self.meshData[v.name])
|
||||||
|
v.holo:setMeshMaterial(v.mat)
|
||||||
v.holo:setRenderBounds(Vector(-200), Vector(200))
|
v.holo:setRenderBounds(Vector(-200), Vector(200))
|
||||||
v.meshApplied = true
|
v.meshApplied = true
|
||||||
end
|
end
|
||||||
@ -69,6 +95,57 @@ function MeshBuilder:_applyMeshes()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function MeshBuilder:_setTexture(mat, name, texture)
|
||||||
|
if isURL(texture) then
|
||||||
|
mat:setTextureURL(name, texture, function(_, _, _, _, layout)
|
||||||
|
layout(0, 0, 1024, 1024)
|
||||||
|
end)
|
||||||
|
else
|
||||||
|
mat:setTexture(name, texture)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function MeshBuilder:_createMaterial(shader, basetexture, bumpmap, options)
|
||||||
|
shader = shader or "VertexLitGeneric"
|
||||||
|
basetexture = basetexture or "models/debug/debugwhite"
|
||||||
|
bumpmap = bumpmap or ""
|
||||||
|
options = options or {}
|
||||||
|
|
||||||
|
local checksum = crc(shader .. basetexture .. bumpmap .. json.encode(options))
|
||||||
|
|
||||||
|
if self._cachedMaterials[checksum] ~= nil then
|
||||||
|
return self._cachedMaterials[checksum]
|
||||||
|
end
|
||||||
|
|
||||||
|
local mat = material.create(shader)
|
||||||
|
|
||||||
|
self:_setTexture(mat, "$basetexture", basetexture)
|
||||||
|
|
||||||
|
if bumpmap ~= "" then
|
||||||
|
self:_setTexture(mat, "$bumpmap", bumpmap)
|
||||||
|
end
|
||||||
|
|
||||||
|
for k, v in pairs(options) do
|
||||||
|
if type(v) == "string" then
|
||||||
|
mat:setString("$" .. k, v)
|
||||||
|
elseif type(v) == "number" then
|
||||||
|
if string.match(tostring(v), "%.") then
|
||||||
|
mat:setFloat("$" .. k, v)
|
||||||
|
else
|
||||||
|
mat:setInt("$" .. k, v)
|
||||||
|
end
|
||||||
|
elseif type(v) == "nil" then
|
||||||
|
mat:setUndefined("$" .. k, v)
|
||||||
|
elseif type(v) == "Vector" then
|
||||||
|
mat:setVector("$" .. k, tostring(v))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
self._cachedMaterials[checksum] = mat
|
||||||
|
|
||||||
|
return mat
|
||||||
|
end
|
||||||
|
|
||||||
-- STUB
|
-- STUB
|
||||||
|
|
||||||
function MeshBuilder:onObjLoaded(objData)
|
function MeshBuilder:onObjLoaded(objData)
|
||||||
|
|||||||
@ -21,7 +21,6 @@ function ObjParser:initialize(link)
|
|||||||
local objData
|
local objData
|
||||||
http.get(link, function(response)
|
http.get(link, function(response)
|
||||||
objData = response
|
objData = response
|
||||||
objData = string.gsub(response, "\nl%s%d+%s%d+", "")
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
while not objData do
|
while not objData do
|
||||||
|
|||||||
@ -17,17 +17,17 @@ function MeshBuilder:initialize(link, modelPlaceholder)
|
|||||||
self._firstTimeSended = false
|
self._firstTimeSended = false
|
||||||
|
|
||||||
net.receive("obj_parsed", function(len, ply)
|
net.receive("obj_parsed", function(len, ply)
|
||||||
if DEBUG_MODE then
|
net.start("obj_parsed")
|
||||||
print(string.format("%s parsed the .obj", ply:getName()))
|
net.writeEntity(ply)
|
||||||
end
|
net.send(owner())
|
||||||
|
|
||||||
self:onPlayerParsedObj(ply)
|
self:onPlayerParsedObj(ply)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
net.receive("initialized", function(len, ply)
|
net.receive("initialized", function(len, ply)
|
||||||
if DEBUG_MODE then
|
net.start("initialized")
|
||||||
print(string.format("%s initialized", ply:getName()))
|
net.writeEntity(ply)
|
||||||
end
|
net.send(owner())
|
||||||
|
|
||||||
table.insert(self._playersWithAccess, ply)
|
table.insert(self._playersWithAccess, ply)
|
||||||
|
|
||||||
@ -74,10 +74,6 @@ function MeshBuilder:initialize(link, modelPlaceholder)
|
|||||||
|
|
||||||
self:onObjectLoaded(objData)
|
self:onObjectLoaded(objData)
|
||||||
|
|
||||||
for object in string.gmatch(objData, "^?\n?o%s([%w_%.%-]+)") do
|
|
||||||
table.insert(self._objectsNames, object)
|
|
||||||
end
|
|
||||||
|
|
||||||
self:onObjectParsed(self._objectsNames)
|
self:onObjectParsed(self._objectsNames)
|
||||||
|
|
||||||
return 2
|
return 2
|
||||||
@ -93,6 +89,7 @@ function MeshBuilder:_sendObjects(target)
|
|||||||
for _, v in pairs(self._objectsToSend) do
|
for _, v in pairs(self._objectsToSend) do
|
||||||
net.writeBit(1)
|
net.writeBit(1)
|
||||||
net.writeString(v.name)
|
net.writeString(v.name)
|
||||||
|
net.writeTable(type(v.mat) == "table" and v.mat or { basetexture = tostring(v.mat) })
|
||||||
net.writeEntity(v.holo)
|
net.writeEntity(v.holo)
|
||||||
end
|
end
|
||||||
net.writeBit(0)
|
net.writeBit(0)
|
||||||
@ -116,14 +113,13 @@ function MeshBuilder:build(name, pos, ang, scale, color, mat, parent, relativeTo
|
|||||||
|
|
||||||
local holo = holograms.create(pos, ang, self.modelPlaceholder, scale)
|
local holo = holograms.create(pos, ang, self.modelPlaceholder, scale)
|
||||||
holo:setColor(color)
|
holo:setColor(color)
|
||||||
holo:setMaterial(mat)
|
|
||||||
|
|
||||||
if isValid(parent) then
|
if isValid(parent) then
|
||||||
holo:setParent(parent)
|
holo:setParent(parent)
|
||||||
end
|
end
|
||||||
|
|
||||||
table.insert(self._objects, {name = name, holo = holo})
|
table.insert(self._objects, {name = name, mat = mat, holo = holo})
|
||||||
|
|
||||||
return holo
|
return holo
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,10 @@
|
|||||||
-- @include /koptilnya/gui/elements/shape.txt
|
-- @include /koptilnya/gui/elements/shape.txt
|
||||||
-- @include /koptilnya/gui/elements/button.txt
|
-- @include /koptilnya/gui/elements/button.txt
|
||||||
-- @include /koptilnya/gui/segoe_mdl2_assets_icons.txt
|
-- @include /koptilnya/gui/segoe_mdl2_assets_icons.txt
|
||||||
local points = {Vector(0, 0), Vector(100, 0)}
|
local points = {
|
||||||
|
Vector(0, 0),
|
||||||
|
Vector(100, 0)
|
||||||
|
}
|
||||||
local zoom = 1
|
local zoom = 1
|
||||||
local zoomBase = 100
|
local zoomBase = 100
|
||||||
local scroll = 0
|
local scroll = 0
|
||||||
@ -458,7 +461,7 @@ hook.add("render", "_render", function()
|
|||||||
x, y = fromWorkspacePos(segmentSize * i, 0)
|
x, y = fromWorkspacePos(segmentSize * i, 0)
|
||||||
|
|
||||||
local length = 20
|
local length = 20
|
||||||
local text = tostring(math.remap(i, 0, 10, 1000, 6000)) -- tostring(i * 10)
|
local text = tostring(math.remap(i, 0, 10, 1000, 7000)) -- tostring(i * 10)
|
||||||
|
|
||||||
render.drawRect(x, y - 20, 1, 20)
|
render.drawRect(x, y - 20, 1, 20)
|
||||||
render.drawRect(x - segmentSize / 2, y - 10, 1, 10)
|
render.drawRect(x - segmentSize / 2, y - 10, 1, 10)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user