mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
143
lua/imagetool/cl_hooks.lua
Normal file
143
lua/imagetool/cl_hooks.lua
Normal file
@@ -0,0 +1,143 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
--[[
|
||||
© AsterionStaff 2022.
|
||||
This script was created from the developers of the AsterionTeam.
|
||||
You can get more information from one of the links below:
|
||||
Site - https://asterion.games
|
||||
Discord - https://discord.gg/CtfS8r5W3M
|
||||
|
||||
developer(s):
|
||||
Selenter - https://steamcommunity.com/id/selenter
|
||||
|
||||
——— Chop your own wood and it will warm you twice.
|
||||
]]--
|
||||
|
||||
|
||||
-- Создаем конвар с настройкой прорисовки
|
||||
ImageTool.dist = CreateClientConVar("imagetool_dist", 1000, true, nil, "Change distance of drawing pictures")
|
||||
|
||||
-- Менюшка с настройкой
|
||||
hook.Add( "PopulateToolMenu", "ImageTool.Menu", function()
|
||||
local l = "imagetool_"
|
||||
|
||||
spawnmenu.AddToolMenuOption("Options", "Image Tool", "imagetoolsettings", "Image Tool Settings", nil, nil, function(CPanel)
|
||||
CPanel:ClearControls()
|
||||
|
||||
CPanel:AddControl("Header",{
|
||||
Description = "In this menu you can change the settings for the ImageTool."
|
||||
})
|
||||
|
||||
CPanel:AddControl("Slider", {
|
||||
Label = "Draw distance:",
|
||||
Command = "imagetool_dist",
|
||||
Min = 0,
|
||||
Max = 10000
|
||||
})
|
||||
|
||||
local SettingsReset = vgui.Create("DButton")
|
||||
SettingsReset:SetText("Return to default settings")
|
||||
SettingsReset.DoClick = function()
|
||||
RunConsoleCommand(l .. "dist", ImageTool.dist:GetDefault())
|
||||
end
|
||||
CPanel:AddPanel(SettingsReset)
|
||||
|
||||
local HistoryReset = vgui.Create("DButton")
|
||||
HistoryReset:SetText("Clear the history")
|
||||
HistoryReset.DoClick = function()
|
||||
ImageTool:SaveHistory({})
|
||||
|
||||
timer.Simple(0.5, function()
|
||||
RunConsoleCommand("spawnmenu_reload")
|
||||
end)
|
||||
|
||||
LocalPlayer():ChatPrint(ImageTool.prefix .. " You have successfully cleared your history!")
|
||||
end
|
||||
CPanel:AddPanel(HistoryReset)
|
||||
|
||||
local ImageReset = vgui.Create("DButton")
|
||||
ImageReset:SetText("Delete all pictures on the map")
|
||||
ImageReset.DoClick = function()
|
||||
RunConsoleCommand(l .. "delete_all")
|
||||
end
|
||||
CPanel:AddPanel(ImageReset)
|
||||
end)
|
||||
end)
|
||||
|
||||
-- Получаем каждые 0.5 секунд все картинки возле игрока
|
||||
local showImagesList = {}
|
||||
local cache = {}
|
||||
timer.Create("ImageTool:Update", 0.5, 0, function()
|
||||
local client = LocalPlayer()
|
||||
if !IsValid(client) then return end
|
||||
|
||||
showImagesList = {}
|
||||
|
||||
for id, array in pairs(ImageTool:GetImages()) do
|
||||
-- Удаляем картинки которые слишком далеко от игрока
|
||||
if client:GetPos():DistToSqr(array.position) >= ImageTool.dist:GetInt() * 15000 then
|
||||
cache[id] = nil
|
||||
continue
|
||||
end
|
||||
|
||||
showImagesList[id] = array
|
||||
end
|
||||
end)
|
||||
|
||||
-- Удаляем из кеша картинки которые не прогружены
|
||||
timer.Create("ImageTool:Cleaner", 1, 0, function()
|
||||
for id in pairs(cache) do
|
||||
if !showImagesList[id] then
|
||||
cache[id] = nil
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
local function caching(id, array)
|
||||
cache[id] = array
|
||||
end
|
||||
|
||||
local function thread()
|
||||
local showImages
|
||||
|
||||
while true do
|
||||
showImages = showImagesList
|
||||
|
||||
if !next(showImages) then
|
||||
coroutine.yield()
|
||||
else
|
||||
for id, array in pairs(showImages) do
|
||||
coroutine.yield()
|
||||
|
||||
caching(id, array)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Кешируем по кадрово информацию о картинках
|
||||
local co
|
||||
hook.Add("Think", "ImageTool.Think", function()
|
||||
if !co or !coroutine.resume(co) then
|
||||
co = coroutine.create(thread)
|
||||
coroutine.resume(co)
|
||||
end
|
||||
end)
|
||||
|
||||
-- Отображение картинок
|
||||
hook.Add("PostDrawTranslucentRenderables", "ImageTool.PostDrawTranslucentRenderables", function()
|
||||
-- Отрисовка всех картинки в мире
|
||||
for k, v in pairs(cache) do
|
||||
ImageTool:Start3D2D(v)
|
||||
end
|
||||
|
||||
ImageTool:DrawImageTool() -- Тул-Ган отрисовка
|
||||
end)
|
||||
Reference in New Issue
Block a user