add sborka
This commit is contained in:
@@ -0,0 +1,319 @@
|
||||
TOOL.Category = "Construction"
|
||||
TOOL.Name = "LED screens"
|
||||
TOOL.Command = nil
|
||||
TOOL.ConfigName = ""
|
||||
|
||||
local TextBox = {}
|
||||
local slider = {}
|
||||
local slider2 = {}
|
||||
local slider3 = {}
|
||||
local frame = {}
|
||||
TOOL.ClientConVar[ "text" ] = ""
|
||||
TOOL.ClientConVar[ "type" ] = 1
|
||||
TOOL.ClientConVar[ "speed" ] = 1.5
|
||||
TOOL.ClientConVar[ "wide" ] = 6
|
||||
TOOL.ClientConVar[ "fx" ] = 0
|
||||
TOOL.ClientConVar[ "wire" ] = 0
|
||||
TOOL.ClientConVar[ "r"] = 255
|
||||
TOOL.ClientConVar[ "g" ] = 200
|
||||
TOOL.ClientConVar[ "b" ] = 0
|
||||
|
||||
if (SERVER) then
|
||||
CreateConVar('sbox_maxledscreens', 5)
|
||||
end
|
||||
|
||||
cleanup.Register("ledscreens")
|
||||
|
||||
TOOL.Information = {
|
||||
{ name = "left" },
|
||||
{ name = "right" }
|
||||
}
|
||||
|
||||
if (CLIENT) then
|
||||
language.Add("Tool.ledscreen.name", "LED screen")
|
||||
language.Add("Tool.ledscreen.desc", "Create a LED panel")
|
||||
|
||||
language.Add("Tool.ledscreen.left", "Spawn a LED panel");
|
||||
language.Add("Tool.ledscreen.right", "Update LED panel");
|
||||
language.Add("Tool.ledscreen.reload", "Copy LED panel's settings");
|
||||
|
||||
language.Add("Undone.ledscreens", "Undone ledscreen")
|
||||
language.Add("Undone_ledscreens", "Undone ledscreen")
|
||||
language.Add("Cleanup.ledscreens", "ledscreens")
|
||||
language.Add("Cleanup_ledscreens", "ledscreens")
|
||||
language.Add("Cleaned.ledscreens", "Cleaned up all ledscreens")
|
||||
language.Add("Cleaned_ledscreens", "Cleaned up all ledscreens")
|
||||
|
||||
language.Add("SBoxLimit.ledscreens", "You've hit the ledscreen limit!")
|
||||
language.Add("SBoxLimit_ledscreens", "You've hit the ledscreen limit!")
|
||||
end
|
||||
|
||||
local function GetConvars(self)
|
||||
local type = tonumber(self:GetClientInfo("type"))
|
||||
if !isnumber(type) then type = 1 end
|
||||
|
||||
local speed = tonumber(self:GetClientInfo("speed"))
|
||||
if !isnumber(speed) then speed = 1.5 end
|
||||
|
||||
local wide = tonumber(self:GetClientInfo("wide"))
|
||||
if !isnumber(wide) then wide = 6 end
|
||||
|
||||
local fx = tonumber(self:GetClientInfo("fx"))
|
||||
if !isnumber(fx) then fx = 0 end
|
||||
|
||||
local r, g, b = tonumber(self:GetClientInfo("r")), tonumber(self:GetClientInfo("g")), tonumber(self:GetClientInfo("b"))
|
||||
if !isnumber(r) or !isnumber(g) or !isnumber(b) then r, g, b = 255, 200, 100 end
|
||||
|
||||
return math.Clamp(type, 1, 4), math.Clamp(speed, 1, 10), math.Clamp(wide, 3, 8), math.Clamp(fx, 0, 1), r, g, b
|
||||
end
|
||||
|
||||
function TOOL:LeftClick(tr)
|
||||
if (tr.Entity:GetClass() == "player") then return false end
|
||||
if (CLIENT) then return true end
|
||||
|
||||
local Ply = self:GetOwner()
|
||||
local centerpos = {
|
||||
[3] = {18, 0},
|
||||
[4] = {11.5, 6},
|
||||
[5] = {18, 6},
|
||||
[6] = {36, 6},
|
||||
[7] = {42, 6},
|
||||
[8] = {48, 6},
|
||||
}
|
||||
|
||||
local type, speed, wide, fx, r, g, b = GetConvars(self)
|
||||
|
||||
local angle = tr.HitNormal:Angle()
|
||||
local SpawnPos = tr.HitPos + angle:Right() * centerpos[wide][1] - angle:Up() * centerpos[wide][2]
|
||||
|
||||
if not (self:GetWeapon():CheckLimit("ledscreens")) then return false end
|
||||
|
||||
local TextScreen
|
||||
if tonumber(self:GetClientInfo("wire")) > 0 then
|
||||
TextScreen = ents.Create("gb_rp_sign_wire")
|
||||
else
|
||||
TextScreen = ents.Create("gb_rp_sign")
|
||||
end
|
||||
TextScreen:SetPos(SpawnPos)
|
||||
TextScreen:Spawn()
|
||||
|
||||
angle:RotateAroundAxis(tr.HitNormal:Angle():Right(), -90)
|
||||
angle:RotateAroundAxis(tr.HitNormal:Angle():Forward(), 90)
|
||||
TextScreen:SetAngles(angle)
|
||||
TextScreen:SetText(self:GetClientInfo("text"))
|
||||
TextScreen:SetType(type)
|
||||
TextScreen:SetSpeed(speed)
|
||||
TextScreen:SetWide(wide)
|
||||
TextScreen:SetModel("models/squad/sf_plates/sf_plate1x"..wide..".mdl")
|
||||
TextScreen:SetTColor(Vector(r/100, g/100, b/100))
|
||||
TextScreen:SetFX(fx)
|
||||
TextScreen:Activate()
|
||||
local Phys = TextScreen:GetPhysicsObject()
|
||||
Phys:EnableMotion( false )
|
||||
|
||||
undo.Create("ledscreens")
|
||||
|
||||
undo.AddEntity(TextScreen)
|
||||
undo.SetPlayer(Ply)
|
||||
undo.Finish()
|
||||
|
||||
Ply:AddCount("ledscreens", TextScreen)
|
||||
Ply:AddCleanup("ledscreens", TextScreen)
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function TOOL:RightClick(tr)
|
||||
if (tr.Entity:GetClass() == "player") then return false end
|
||||
if (CLIENT) then return true end
|
||||
|
||||
local TraceEnt = tr.Entity
|
||||
|
||||
local type, speed, wide, fx, r, g, b = GetConvars(self)
|
||||
|
||||
if (TraceEnt:IsValid() and TraceEnt:GetClass() == "gb_rp_sign") then
|
||||
TraceEnt:SetText(self:GetClientInfo("text"))
|
||||
TraceEnt:SetType(type)
|
||||
TraceEnt:SetSpeed(speed)
|
||||
TraceEnt:SetWide(wide)
|
||||
TraceEnt:SetFX(fx)
|
||||
TraceEnt:SetModel("models/squad/sf_plates/sf_plate1x"..wide..".mdl")
|
||||
TraceEnt:SetTColor(Vector(r/100, g/100, b/100))
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
function TOOL:Reload(tr)
|
||||
|
||||
if !IsValid(tr.Entity) then return false end
|
||||
local TraceEnt = tr.Entity
|
||||
|
||||
if (TraceEnt:IsValid() and TraceEnt:GetClass() == "gb_rp_sign") then
|
||||
if CLIENT or game.SinglePlayer() then
|
||||
local color = TraceEnt:GetTColor()
|
||||
RunConsoleCommand("ledscreen_text", TraceEnt:GetText())
|
||||
RunConsoleCommand("ledscreen_type", TraceEnt:GetType())
|
||||
RunConsoleCommand("ledscreen_r", color.x*100)
|
||||
RunConsoleCommand("ledscreen_g", color.y*100)
|
||||
RunConsoleCommand("ledscreen_b", color.z*100)
|
||||
RunConsoleCommand("ledscreen_speed", TraceEnt:GetSpeed())
|
||||
RunConsoleCommand("ledscreen_wide", TraceEnt:GetWide())
|
||||
RunConsoleCommand("ledscreen_fx", TraceEnt:GetFX())
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
return true
|
||||
|
||||
end
|
||||
|
||||
|
||||
function TOOL.BuildCPanel(CPanel)
|
||||
CPanel:AddControl("Header", { Text = "#Tool.ledscreen.name" } )
|
||||
resetall = vgui.Create("DButton", resetbuttons)
|
||||
resetall:SetSize(100, 25)
|
||||
resetall:SetText("Reset all")
|
||||
resetall.DoClick = function()
|
||||
RunConsoleCommand("ledscreen_text", "")
|
||||
RunConsoleCommand("ledscreen_type", 1)
|
||||
RunConsoleCommand("ledscreen_r", 255)
|
||||
RunConsoleCommand("ledscreen_g", 200)
|
||||
RunConsoleCommand("ledscreen_b", 0)
|
||||
RunConsoleCommand("ledscreen_speed", 1.5)
|
||||
RunConsoleCommand("ledscreen_wide", 6)
|
||||
RunConsoleCommand("ledscreen_fx", 0)
|
||||
RunConsoleCommand("ledscreen_wire", 0)
|
||||
slider:SetValue(1)
|
||||
slider2:SetValue(1.5)
|
||||
slider3:SetValue(6)
|
||||
TextBox:SetValue("")
|
||||
|
||||
end
|
||||
CPanel:AddItem(resetall)
|
||||
local font = "InfoRUS3"
|
||||
frame = vgui.Create( "DPanel" )
|
||||
frame:SetSize( CPanel:GetWide(), 50 )
|
||||
frame.appr = nil
|
||||
frame.Paint = function(self,w,h)
|
||||
draw.RoundedBox(0,0,0,w,h,Color(0,0,0))
|
||||
surface.SetFont(font)
|
||||
local alfa
|
||||
if GetConVarNumber("ledscreen_fx") > 0 then
|
||||
alfa = math.random(100,220)
|
||||
else
|
||||
alfa = 255
|
||||
end
|
||||
self.Text = GetConVarString("ledscreen_text")
|
||||
self.Type = GetConVarNumber("ledscreen_type")
|
||||
self.Speed = GetConVarNumber("ledscreen_speed")
|
||||
self.static = false
|
||||
local ww,hh = surface.GetTextSize(self.Text)
|
||||
local multiplier = self.Speed * 100
|
||||
self.Color = Color(GetConVarNumber("ledscreen_r"),GetConVarNumber("ledscreen_g"),GetConVarNumber("ledscreen_b"), alfa)
|
||||
if self.Type == 1 then
|
||||
|
||||
local xs = (math.fmod(SysTime() * multiplier,w+ww)) - ww
|
||||
draw.DrawText(self.Text,font,xs,0,self.Color,0)
|
||||
|
||||
elseif self.Type == 2 then
|
||||
|
||||
if !self.appr or self.appr > ww then
|
||||
self.appr = -w
|
||||
else
|
||||
self.appr = math.Approach(self.appr, ww+w, FrameTime() * multiplier)
|
||||
end
|
||||
|
||||
draw.DrawText(self.Text,font,self.appr * -1,0,self.Color,0)
|
||||
|
||||
else
|
||||
if !self.appr then
|
||||
self.appr = 0
|
||||
end
|
||||
|
||||
if w > ww then
|
||||
if self.Type == 3 then
|
||||
if self.appr < w-ww and !self.refl then
|
||||
self.appr = math.Approach(self.appr, ww+w, FrameTime() * multiplier)
|
||||
else
|
||||
if self.appr <= 0 then
|
||||
self.refl = nil
|
||||
else
|
||||
self.refl = true
|
||||
self.appr = math.Approach(self.appr, 0, FrameTime() * multiplier)
|
||||
end
|
||||
end
|
||||
else
|
||||
self.static = true
|
||||
end
|
||||
else
|
||||
if self.appr > w-ww-50 and !self.refl then
|
||||
self.appr = math.Approach(self.appr, w-ww-50, FrameTime() * multiplier)
|
||||
else
|
||||
if self.appr >= 50 then
|
||||
self.refl = nil
|
||||
else
|
||||
self.refl = true
|
||||
self.appr = math.Approach(self.appr, 50, FrameTime() * multiplier)
|
||||
end
|
||||
end
|
||||
end
|
||||
if self.static then
|
||||
draw.DrawText(self.Text,font,w/2,0,self.Color,1)
|
||||
else
|
||||
draw.DrawText(self.Text,font,self.appr,0,self.Color,0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
CPanel:AddItem(frame)
|
||||
|
||||
|
||||
slider = vgui.Create("DNumSlider")
|
||||
slider:SetText("Type")
|
||||
slider:SetMinMax(1, 4)
|
||||
slider:SetDecimals(0)
|
||||
slider:SetValue(1)
|
||||
slider:SetConVar("ledscreen_type")
|
||||
CPanel:AddItem(slider)
|
||||
|
||||
slider2 = vgui.Create("DNumSlider")
|
||||
slider2:SetText("Speed")
|
||||
slider2:SetMinMax(1, 10)
|
||||
slider2:SetDecimals(1)
|
||||
slider2:SetValue(1)
|
||||
slider2:SetConVar("ledscreen_speed")
|
||||
CPanel:AddItem(slider2)
|
||||
|
||||
slider3 = vgui.Create("DNumSlider")
|
||||
slider3:SetText("Wide")
|
||||
slider3:SetMinMax(3, 8)
|
||||
slider3:SetDecimals(0)
|
||||
slider3:SetValue(6)
|
||||
slider3:SetConVar("ledscreen_wide")
|
||||
CPanel:AddItem(slider3)
|
||||
|
||||
TextBox = vgui.Create("DTextEntry")
|
||||
TextBox:SetUpdateOnType(true)
|
||||
TextBox:SetEnterAllowed(true)
|
||||
TextBox:SetConVar("ledscreen_text")
|
||||
TextBox:SetValue(GetConVarString("ledscreen_text"))
|
||||
CPanel:AddItem(TextBox)
|
||||
|
||||
CPanel:AddControl( "CheckBox", { Label = "Flicker effect", Description = "", Command = "ledscreen_fx" } )
|
||||
CPanel:AddControl( "CheckBox", { Label = "WireMod support", Description = "", Command = "ledscreen_wire" } )
|
||||
|
||||
CPanel:AddControl("Color", {
|
||||
Label = "LED color",
|
||||
Red = "ledscreen_r",
|
||||
Green = "ledscreen_g",
|
||||
Blue = "ledscreen_b",
|
||||
ShowHSV = 1,
|
||||
ShowRGB = 1,
|
||||
Multiplier = 255
|
||||
})
|
||||
|
||||
CPanel:AddControl("Label", { Text = "Gmod-Best.Ru ©2013-2019\nWith <3 from Mac" } )
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user