mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-18 22:23:46 +03:00
Upload
This commit is contained in:
123
lua/pac3/core/client/parts/light.lua
Normal file
123
lua/pac3/core/client/parts/light.lua
Normal file
@@ -0,0 +1,123 @@
|
||||
--[[
|
||||
| This file was obtained through the combined efforts
|
||||
| of Madbluntz & Plymouth Antiquarian Society.
|
||||
|
|
||||
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||||
| Maloy, DrPepper10 @ RIP, Atle!
|
||||
|
|
||||
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||||
--]]
|
||||
|
||||
local DynamicLight = DynamicLight
|
||||
|
||||
local BUILDER, PART = pac.PartTemplate("base_drawable")
|
||||
|
||||
PART.FriendlyName = "light"
|
||||
PART.ClassName = "light2"
|
||||
PART.Group = 'effects'
|
||||
PART.Icon = 'icon16/lightbulb.png'
|
||||
PART.ProperColorRange = true
|
||||
|
||||
BUILDER:StartStorableVars()
|
||||
BUILDER:GetSet("InnerAngle", 0)
|
||||
BUILDER:GetSet("OuterAngle", 0)
|
||||
BUILDER:GetSet("NoModel", false)
|
||||
BUILDER:GetSet("NoWorld", false)
|
||||
|
||||
BUILDER:SetPropertyGroup("appearance")
|
||||
BUILDER:GetSet("Brightness", 8)
|
||||
BUILDER:GetSet("Size", 100, {editor_sensitivity = 0.25})
|
||||
BUILDER:GetSet("Color", Vector(1, 1, 1), {editor_panel = "color2"})
|
||||
BUILDER:EndStorableVars()
|
||||
|
||||
function PART:GetLight()
|
||||
if not self.light then
|
||||
self.light = DynamicLight(tonumber(self:GetPrintUniqueID(), 16))
|
||||
end
|
||||
self.light.decay = 0
|
||||
self.light.dietime = math.huge
|
||||
|
||||
return self.light
|
||||
end
|
||||
|
||||
function PART:RemoveLight()
|
||||
if not self.light then return end
|
||||
local light = self.light
|
||||
self.light = nil
|
||||
-- this prevents fade out when removing the light
|
||||
light.pos = Vector(9999, 9999, 9999)
|
||||
timer.Simple(0, function()
|
||||
light.dietime = 0
|
||||
end)
|
||||
end
|
||||
|
||||
function PART:GetNiceName()
|
||||
local color = self:GetColor()
|
||||
local hue = pac.ColorToNames({r = color[1] * 255, g = color[2] * 255, b = color[3] * 255})
|
||||
return hue .. " light"
|
||||
end
|
||||
|
||||
local vars = {
|
||||
"InnerAngle",
|
||||
"OuterAngle",
|
||||
"NoWorld",
|
||||
"NoModel",
|
||||
"Brightness",
|
||||
"Color",
|
||||
"Size",
|
||||
}
|
||||
|
||||
function PART:OnShow()
|
||||
for _, v in ipairs(vars) do
|
||||
self["Set" .. v](self, self["Get" .. v](self))
|
||||
end
|
||||
end
|
||||
|
||||
function PART:OnDraw()
|
||||
local pos, ang = self:GetDrawPosition()
|
||||
self:GetLight().pos = pos
|
||||
self:GetLight().dir = ang:Forward()
|
||||
end
|
||||
|
||||
function PART:SetSize(val)
|
||||
self.Size = val
|
||||
self:GetLight().size = val
|
||||
end
|
||||
|
||||
function PART:SetColor(val)
|
||||
self.Color = val
|
||||
self:GetLight().r = math.Clamp(val.r * 255, 0, 255)
|
||||
self:GetLight().g = math.Clamp(val.g * 255, 0, 255)
|
||||
self:GetLight().b = math.Clamp(val.b * 255, 0, 255)
|
||||
end
|
||||
|
||||
function PART:SetBrightness(val)
|
||||
self.Brightness = val
|
||||
self:GetLight().brightness = val
|
||||
end
|
||||
|
||||
function PART:SetNoModel(val)
|
||||
self.NoModel = val
|
||||
self:GetLight().nomodel = val
|
||||
end
|
||||
|
||||
function PART:SetNoWorld(val)
|
||||
self.NoWorld = val
|
||||
self:GetLight().noworld = val
|
||||
end
|
||||
|
||||
function PART:SetInnerAngle(val)
|
||||
self.InnerAngle = val
|
||||
self:GetLight().innerangle = val
|
||||
end
|
||||
|
||||
function PART:SetOuterAngle(val)
|
||||
self.OuterAngle = val
|
||||
self:GetLight().outerangle = val
|
||||
end
|
||||
|
||||
function PART:OnHide()
|
||||
self:RemoveLight()
|
||||
end
|
||||
|
||||
BUILDER:Register()
|
||||
Reference in New Issue
Block a user