Initial commit
This commit is contained in:
107
gamemodes/darkrp/gamemode/modules/base/cl_util.lua
Normal file
107
gamemodes/darkrp/gamemode/modules/base/cl_util.lua
Normal file
@@ -0,0 +1,107 @@
|
||||
local plyMeta = FindMetaTable("Player")
|
||||
|
||||
--[[---------------------------------------------------------------------------
|
||||
Show a black screen
|
||||
---------------------------------------------------------------------------]]
|
||||
local function blackScreen(um)
|
||||
local toggle = um:ReadBool()
|
||||
if toggle then
|
||||
local black = color_black
|
||||
local w, h = ScrW(), ScrH()
|
||||
hook.Add("HUDPaintBackground", "BlackScreen", function()
|
||||
surface.SetDrawColor(black)
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
end)
|
||||
else
|
||||
hook.Remove("HUDPaintBackground", "BlackScreen")
|
||||
end
|
||||
end
|
||||
usermessage.Hook("blackScreen", blackScreen)
|
||||
|
||||
--[[---------------------------------------------------------------------------
|
||||
Wrap strings to not become wider than the given amount of pixels
|
||||
---------------------------------------------------------------------------]]
|
||||
local function charWrap(text, remainingWidth, maxWidth)
|
||||
local totalWidth = 0
|
||||
|
||||
text = text:gsub(".", function(char)
|
||||
totalWidth = totalWidth + surface.GetTextSize(char)
|
||||
|
||||
-- Wrap around when the max width is reached
|
||||
if totalWidth >= remainingWidth then
|
||||
-- totalWidth needs to include the character width because it's inserted in a new line
|
||||
totalWidth = surface.GetTextSize(char)
|
||||
remainingWidth = maxWidth
|
||||
return "\n" .. char
|
||||
end
|
||||
|
||||
return char
|
||||
end)
|
||||
|
||||
return text, totalWidth
|
||||
end
|
||||
|
||||
function DarkRP.textWrap(text, font, maxWidth)
|
||||
local totalWidth = 0
|
||||
|
||||
surface.SetFont(font)
|
||||
|
||||
local spaceWidth = surface.GetTextSize(' ')
|
||||
text = text:gsub("(%s?[%S]+)", function(word)
|
||||
local char = string.sub(word, 1, 1)
|
||||
if char == "\n" or char == "\t" then
|
||||
totalWidth = 0
|
||||
end
|
||||
|
||||
local wordlen = surface.GetTextSize(word)
|
||||
totalWidth = totalWidth + wordlen
|
||||
|
||||
-- Wrap around when the max width is reached
|
||||
if wordlen >= maxWidth then -- Split the word if the word is too big
|
||||
local splitWord, splitPoint = charWrap(word, maxWidth - (totalWidth - wordlen), maxWidth)
|
||||
totalWidth = splitPoint
|
||||
return splitWord
|
||||
elseif totalWidth < maxWidth then
|
||||
return word
|
||||
end
|
||||
|
||||
-- Split before the word
|
||||
if char == ' ' then
|
||||
totalWidth = wordlen - spaceWidth
|
||||
return '\n' .. string.sub(word, 2)
|
||||
end
|
||||
|
||||
totalWidth = wordlen
|
||||
return '\n' .. word
|
||||
end)
|
||||
|
||||
return text
|
||||
end
|
||||
|
||||
--[[---------------------------------------------------------------------------
|
||||
Decides whether a given player is in the same room as the local player
|
||||
note: uses a heuristic
|
||||
---------------------------------------------------------------------------]]
|
||||
function plyMeta:isInRoom()
|
||||
local tracedata = {}
|
||||
tracedata.start = LocalPlayer():GetShootPos()
|
||||
tracedata.endpos = self:GetShootPos()
|
||||
local trace = util.TraceLine(tracedata)
|
||||
|
||||
return not trace.HitWorld
|
||||
end
|
||||
|
||||
--[[---------------------------------------------------------------------------
|
||||
Key name to key int mapping
|
||||
---------------------------------------------------------------------------]]
|
||||
local keyNames
|
||||
function input.KeyNameToNumber(str)
|
||||
if not keyNames then
|
||||
keyNames = {}
|
||||
for i = 1, 107, 1 do
|
||||
keyNames[input.GetKeyName(i)] = i
|
||||
end
|
||||
end
|
||||
|
||||
return keyNames[str]
|
||||
end
|
||||
Reference in New Issue
Block a user