mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
146 lines
3.4 KiB
Lua
146 lines
3.4 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 render_SetMaterial = render.SetMaterial
|
|
local render_DrawSprite = render.DrawSprite
|
|
local Color = Color
|
|
local Vector = Vector
|
|
local cam_IgnoreZ = cam.IgnoreZ
|
|
|
|
local BUILDER, PART = pac.PartTemplate("base_drawable")
|
|
|
|
PART.ClassName = "sprite"
|
|
PART.Group = 'effects'
|
|
PART.Icon = 'icon16/layers.png'
|
|
|
|
BUILDER:StartStorableVars()
|
|
BUILDER:SetPropertyGroup("generic")
|
|
BUILDER:GetSet("IgnoreZ", false)
|
|
BUILDER:GetSet("SizeX", 1, {editor_sensitivity = 0.25})
|
|
BUILDER:GetSet("SizeY", 1, {editor_sensitivity = 0.25})
|
|
BUILDER:GetSet("SpritePath", "sprites/grip", {editor_panel = "material"})
|
|
|
|
BUILDER:SetPropertyGroup("orientation")
|
|
BUILDER:GetSet("Size", 1, {editor_sensitivity = 0.25})
|
|
|
|
BUILDER:SetPropertyGroup("appearance")
|
|
BUILDER:GetSet("Color", Vector(255, 255, 255), {editor_panel = "color"})
|
|
BUILDER:GetSet("Alpha", 1, {editor_sensitivity = 0.25, editor_clamp = {0, 1}})
|
|
BUILDER:GetSet("Translucent", true)
|
|
BUILDER:EndStorableVars()
|
|
|
|
function PART:GetNiceName()
|
|
if not self:GetSpritePath() then
|
|
return "error"
|
|
end
|
|
|
|
local match = pac.PrettifyName("/" .. self:GetSpritePath()):match(".+/(.+)")
|
|
return match and match:gsub("%..+", "") or "error"
|
|
end
|
|
|
|
function PART:SetColor(v)
|
|
self.ColorC = self.ColorC or Color(255, 255, 255, 255)
|
|
|
|
self.ColorC.r = v.r
|
|
self.ColorC.g = v.g
|
|
self.ColorC.b = v.b
|
|
|
|
self.Color = v
|
|
end
|
|
|
|
function PART:SetAlpha(n)
|
|
self.ColorC = self.ColorC or Color(255, 255, 255, 255)
|
|
|
|
self.ColorC.a = n * 255
|
|
|
|
self.Alpha = n
|
|
end
|
|
|
|
function PART:Initialize()
|
|
self:SetSpritePath(self.SpritePath)
|
|
end
|
|
|
|
function PART:SetSpritePath(var)
|
|
self:SetMaterial(var)
|
|
end
|
|
|
|
function PART:FixMaterial()
|
|
local mat = self.Materialm
|
|
|
|
if not mat then return end
|
|
|
|
local shader = mat:GetShader()
|
|
|
|
if shader == "VertexLitGeneric" or shader == "Cable" then
|
|
local tex_path = mat:GetTexture("$basetexture")
|
|
|
|
if tex_path then
|
|
local params = {}
|
|
|
|
params["$basetexture"] = tex_path:GetName()
|
|
params["$vertexcolor"] = 1
|
|
params["$vertexalpha"] = 1
|
|
|
|
self.Materialm = CreateMaterial("pac_fixmat_" .. os.clock(), "UnlitGeneric", params)
|
|
self.Materialm:SetTexture("$basetexture", tex_path)
|
|
end
|
|
end
|
|
end
|
|
|
|
function PART:SetMaterial(var)
|
|
var = var or ""
|
|
|
|
if not pac.Handleurltex(self, var, nil, "UnlitGeneric", {["$translucent"] = "1"}) then
|
|
if isstring(var) then
|
|
self.Materialm = pac.Material(var, self)
|
|
self:CallRecursive("OnMaterialChanged")
|
|
elseif type(var) == "IMaterial" then
|
|
self.Materialm = var
|
|
self:CallRecursive("OnMaterialChanged")
|
|
end
|
|
end
|
|
|
|
self:FixMaterial()
|
|
|
|
self.SpritePath = var
|
|
end
|
|
|
|
function PART:OnDraw()
|
|
local mat = self.MaterialOverride or self.Materialm
|
|
if mat then
|
|
if self.IgnoreZ then
|
|
cam_IgnoreZ(true)
|
|
end
|
|
|
|
local old_alpha
|
|
if pac.drawing_motionblur_alpha then
|
|
if not self.ColorC then self:SetColor(self:GetColor()) end
|
|
old_alpha = self.ColorC.a
|
|
self.ColorC.a = pac.drawing_motionblur_alpha*255
|
|
--print(self.ColorC, pac.drawing_motionblur_alpha*255)
|
|
end
|
|
|
|
local pos = self:GetDrawPosition()
|
|
|
|
render_SetMaterial(mat)
|
|
render_DrawSprite(pos, self.SizeX * self.Size, self.SizeY * self.Size, self.ColorC)
|
|
|
|
if self.IgnoreZ then
|
|
cam_IgnoreZ(false)
|
|
end
|
|
|
|
if pac.drawing_motionblur_alpha then
|
|
self.ColorC.a = old_alpha
|
|
end
|
|
end
|
|
end
|
|
|
|
BUILDER:Register()
|