mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
240
lua/pac3/editor/client/util.lua
Normal file
240
lua/pac3/editor/client/util.lua
Normal file
@@ -0,0 +1,240 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
pace.util = {}
|
||||
|
||||
local surface = surface
|
||||
local math = math
|
||||
|
||||
local white = surface.GetTextureID("gui/center_gradient.vtf")
|
||||
|
||||
function pace.util.DrawLine(x1, y1, x2, y2, w, skip_tex)
|
||||
w = w or 1
|
||||
if not skip_tex then surface.SetTexture(white) end
|
||||
|
||||
local dx,dy = x1-x2, y1 - y2
|
||||
local ang = math.atan2(dx, dy)
|
||||
local dst = math.sqrt((dx * dx) + (dy * dy))
|
||||
|
||||
x1 = x1 - dx * 0.5
|
||||
y1 = y1 - dy * 0.5
|
||||
|
||||
surface.DrawTexturedRectRotated(x1, y1, w, dst, math.deg(ang))
|
||||
end
|
||||
|
||||
function pace.util.FastDistance(x1, y1, z1, x2, y2, z2)
|
||||
return math.sqrt((x2 - x1) ^ 2 + (y2 - y1) ^ 2 + (z2 - z1) ^ 2)
|
||||
end
|
||||
|
||||
function pace.util.FastDistance2D(x1, y1, x2, y2)
|
||||
return math.sqrt((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
|
||||
end
|
||||
|
||||
local function isUpperCase(charIn)
|
||||
return
|
||||
charIn == 'A' or
|
||||
charIn == 'B' or
|
||||
charIn == 'C' or
|
||||
charIn == 'D' or
|
||||
charIn == 'E' or
|
||||
charIn == 'F' or
|
||||
charIn == 'G' or
|
||||
charIn == 'H' or
|
||||
charIn == 'I' or
|
||||
charIn == 'J' or
|
||||
charIn == 'K' or
|
||||
charIn == 'L' or
|
||||
charIn == 'M' or
|
||||
charIn == 'N' or
|
||||
charIn == 'O' or
|
||||
charIn == 'P' or
|
||||
charIn == 'Q' or
|
||||
charIn == 'R' or
|
||||
charIn == 'S' or
|
||||
charIn == 'T' or
|
||||
charIn == 'U' or
|
||||
charIn == 'V' or
|
||||
charIn == 'W' or
|
||||
charIn == 'X' or
|
||||
charIn == 'Y' or
|
||||
charIn == 'Z'
|
||||
end
|
||||
|
||||
function pace.util.FriendlyName(strIn)
|
||||
local prevChar
|
||||
local outputTab = {}
|
||||
local iterableArray = string.Explode('', strIn)
|
||||
|
||||
for i, charIn in ipairs(iterableArray) do
|
||||
if not prevChar and not isUpperCase(charIn) or prevChar == ' ' and not isUpperCase(charIn) then
|
||||
prevChar = string.upper(charIn)
|
||||
table.insert(outputTab, prevChar)
|
||||
elseif charIn == '_' then
|
||||
iterableArray[i] = ' '
|
||||
prevChar = ' '
|
||||
table.insert(outputTab, ' ')
|
||||
elseif isUpperCase(charIn) then
|
||||
if prevChar == '_' and (not iterableArray[i + 1] or isUpperCase(iterableArray[i + 1])) then
|
||||
if charIn == 'L' then
|
||||
prevChar = ' '
|
||||
table.insert(outputTab, 'Left ')
|
||||
elseif charIn == 'R' then
|
||||
prevChar = ' '
|
||||
table.insert(outputTab, 'Right ')
|
||||
-- elseif charIn == 'O' then
|
||||
-- prevChar = ' '
|
||||
-- table.insert(outputTab, 'Open ') -- i guess?
|
||||
else
|
||||
prevChar = charIn
|
||||
table.insert(outputTab, charIn)
|
||||
end
|
||||
elseif not isUpperCase(prevChar) then
|
||||
prevChar = charIn
|
||||
table.insert(outputTab, ' ')
|
||||
table.insert(outputTab, charIn)
|
||||
else
|
||||
prevChar = charIn
|
||||
table.insert(outputTab, charIn)
|
||||
end
|
||||
else
|
||||
local condUpper =
|
||||
charIn == 'm' and iterableArray[i + 1] == 'p' and iterableArray[i - 1] == ' ' or
|
||||
charIn == 'p' and iterableArray[i - 1] == 'm' and iterableArray[i - 2] == ' ' or
|
||||
charIn == 'w' and (iterableArray[i - 1] == 'C' or iterableArray[i - 1] == 'c') or
|
||||
charIn == 'c' and iterableArray[i + 1] == 'w' or
|
||||
charIn == 'i' and (iterableArray[i - 1] == 'C' or iterableArray[i - 1] == 'c') or
|
||||
charIn == 'c' and iterableArray[i + 1] == 'i' or
|
||||
(charIn == 'x' or charIn == 'y' or charIn == 'z') and not iterableArray[i + 1] and iterableArray[i - 1] == ' '
|
||||
|
||||
if condUpper then
|
||||
prevChar = string.upper(charIn)
|
||||
table.insert(outputTab, prevChar)
|
||||
else
|
||||
prevChar = charIn
|
||||
table.insert(outputTab, charIn)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return table.concat(outputTab, '')
|
||||
end
|
||||
|
||||
|
||||
function pace.MessagePrompt( strText, strTitle, strButtonText )
|
||||
|
||||
local Window = vgui.Create( "DFrame" )
|
||||
Window:SetTitle( strTitle or "Message" )
|
||||
Window:SetDraggable( false )
|
||||
Window:ShowCloseButton( false )
|
||||
Window:SetBackgroundBlur( true )
|
||||
Window:SetDrawOnTop( true )
|
||||
Window:SetSizable(true)
|
||||
Window:SetTall(300)
|
||||
Window:SetWide(500)
|
||||
Window:Center()
|
||||
|
||||
Window.OnRemove = function()
|
||||
hook.Remove("Think", "pace_modal_escape")
|
||||
end
|
||||
|
||||
hook.Add("Think", "pace_modal_escape", function()
|
||||
if input.IsKeyDown(KEY_ESCAPE) then
|
||||
if Window:IsValid() then
|
||||
Window:Remove()
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
local DScrollPanel = vgui.Create( "DScrollPanel", Window )
|
||||
DScrollPanel:Dock( FILL )
|
||||
|
||||
local Text = DScrollPanel:Add("DLabel")
|
||||
Text:SetText( strText or "Message Text" )
|
||||
Text:SetTextColor( color_white )
|
||||
Text:Dock(FILL)
|
||||
Text:SetAutoStretchVertical(true)
|
||||
Text:SetWrap(true)
|
||||
|
||||
local Button = vgui.Create( "DButton", Window )
|
||||
Button:SetText( strButtonText or "OK" )
|
||||
Button:Dock(BOTTOM)
|
||||
Button:SetTall( 20 )
|
||||
Button:SetPos( 5, 5 )
|
||||
Button.DoClick = function() Window:Close() end
|
||||
|
||||
Window:MakePopup()
|
||||
Window:DoModal()
|
||||
|
||||
Window:PerformLayout()
|
||||
|
||||
return Window
|
||||
end
|
||||
|
||||
function pace.MultilineStringRequest( strTitle, strText, strDefaultText, fnEnter, fnCancel, strButtonText, strButtonCancelText )
|
||||
if IsValid(pace.last_modal) then pace.last_modal:Remove() end
|
||||
local Window = vgui.Create( "DFrame" )
|
||||
pace.last_modal = Window
|
||||
Window:SetTitle( strTitle or "Message Title (First Parameter)" )
|
||||
Window:SetDraggable( false )
|
||||
Window:ShowCloseButton( false )
|
||||
Window:SetBackgroundBlur( true )
|
||||
Window:SetDrawOnTop( true )
|
||||
Window:SetSize(400, 400)
|
||||
|
||||
local InnerPanel = vgui.Create( "DPanel", Window )
|
||||
InnerPanel:SetPaintBackground( false )
|
||||
InnerPanel:Dock( FILL )
|
||||
|
||||
local Text = vgui.Create( "DLabel", InnerPanel )
|
||||
Text:SetText( strText or "Message Text (Second Parameter)" )
|
||||
Text:SizeToContents()
|
||||
Text:SetContentAlignment( 5 )
|
||||
Text:SetTextColor( color_white )
|
||||
Text:Dock( TOP )
|
||||
|
||||
local TextEntry = vgui.Create( "DTextEntry", InnerPanel )
|
||||
TextEntry:SetText( strDefaultText or "" )
|
||||
TextEntry:SetMultiline(true)
|
||||
TextEntry:Dock(FILL)
|
||||
TextEntry:SetUpdateOnType(true)
|
||||
TextEntry.OnChange = function(self) self:SetText(self:GetValue():gsub("\t", " ")) end
|
||||
TextEntry.OnEnter = function() Window:Close() fnEnter( TextEntry:GetValue() ) end
|
||||
|
||||
local ButtonPanel = vgui.Create( "DPanel", Window )
|
||||
ButtonPanel:SetTall( 30 )
|
||||
ButtonPanel:SetPaintBackground( false )
|
||||
ButtonPanel:Dock(BOTTOM)
|
||||
|
||||
local Button = vgui.Create( "DButton", ButtonPanel )
|
||||
Button:SetText( strButtonText or "OK" )
|
||||
Button:SizeToContents()
|
||||
Button:SetTall( 20 )
|
||||
Button:SetWide( Button:GetWide() + 20 )
|
||||
Button:SetPos( 5, 5 )
|
||||
Button.DoClick = function() Window:Close() fnEnter( TextEntry:GetValue() ) end
|
||||
|
||||
local ButtonCancel = vgui.Create( "DButton", ButtonPanel )
|
||||
ButtonCancel:SetText( strButtonCancelText or "Cancel" )
|
||||
ButtonCancel:SizeToContents()
|
||||
ButtonCancel:SetTall( 20 )
|
||||
ButtonCancel:SetWide( Button:GetWide() + 20 )
|
||||
ButtonCancel:SetPos( 5, 5 )
|
||||
ButtonCancel.DoClick = function() Window:Close() if ( fnCancel ) then fnCancel( TextEntry:GetValue() ) end end
|
||||
ButtonCancel:MoveRightOf( Button, 5 )
|
||||
|
||||
ButtonPanel:SetWide( Button:GetWide() + 5 + ButtonCancel:GetWide() + 10 )
|
||||
|
||||
Window:MakePopup()
|
||||
Window:DoModal()
|
||||
Window:Center()
|
||||
|
||||
return Window
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user