mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
143 lines
4.2 KiB
Lua
143 lines
4.2 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/
|
||
--]]
|
||
|
||
--[[
|
||
© 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) |