Files
wnsrc/lua/stormfox2/framework/cl_clientquality.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

69 lines
2.3 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/
--]]
--[[-------------------------------------------------------------------------
This scripts job is to sort out the computers and potatoes.
---------------------------------------------------------------------------]]
StormFox2.Client = StormFox2.Client or {}
StormFox2.Setting.AddCL("quality_ultra",false)
StormFox2.Setting.AddCL("quality_target",60,nil,nil, 0, 300)
local conDetect = 1
local t_num = {1, 1, 1, 1, 1, 1}
local i = 1
local q_num = 1
-- Calculate the avageFPS for the client and make a value we can use.
local bi,buffer = 0,0
local avagefps = 1 / RealFrameTime()
timer.Create("StormFox2.Client.PotatoSupport",0.25,0,function()
if not system.HasFocus() then -- The player tabbed out.
bi,buffer = 0,0
return
end
if bi < 10 then
buffer = buffer + 1 / RealFrameTime()
bi = bi + 1
else
avagefps = buffer / bi
bi,buffer = 0,0
local q = StormFox2.Setting.GetCache("quality_ultra",false)
local delta_fps = avagefps - StormFox2.Setting.GetCache("quality_target",80)
local delta = math.Clamp(delta_fps / 8,-3,3)
conDetect = math.Clamp(math.Round(conDetect + delta, 1),0,q and 20 or 7)
table.insert(t_num, conDetect)
table.remove(t_num, 1)
local a = 0
for _,v in ipairs( t_num ) do
a = a + v
end
q_num = (q_num + (a / #t_num)) / 2
end
end)
--[[<Client>-----------------------------------------------------------------
Returns a number based on the clients FPS.
7 is the max without the user enabling 'sf_quality_ultra', where it then goes up to 20.
---------------------------------------------------------------------------]]
---Returns a number based on the clients FPS. Where 7 is max (or 20 if sf_quality_ultra is enabled)
---@return number qualityNumber
---@return number avagefps
---@client
function StormFox2.Client.GetQualityNumber()
if not system.HasFocus() then
return 1, 1 / RealFrameTime()
end
-- Players have complained not seeing the particles when their FPS is low
--if game.SinglePlayer() then I've now had multiplayer complaints.
q_num = math.max(0.5, q_num)
--end
return q_num, avagefps
end