mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
123 lines
2.6 KiB
Lua
123 lines
2.6 KiB
Lua
|
|
--[[
|
||
|
|
| 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()
|