1
0
mirror of https://github.com/metrostroi-repo/MetrostroiAddon.git synced 2026-05-02 00:42:29 +00:00
Files
MetrostroiAddon/lua/metrostroi/cl_trackeditor.lua
Ivan Gordeev 373073e661 #199 (#267)
* Global change.
Замена всех устаревших функции на аналогичные

* Global change.
Добавил локальные переменные там, где это было рентабельно.
2021-07-26 09:18:18 +03:00

188 lines
5.0 KiB
Lua

local Paths = {}
local ServerMessage
local MessageLabel
local List
local SelectedPath
local SelectedColor = Color(255,0,0)
local DeSelectedColor = color_white
local function RemovePath(pathid)
RunConsoleCommand("metrostroi_trackeditor_removepath",pathid)
end
local function TeleToStart(pathid)
RunConsoleCommand("metrostroi_trackeditor_teletostart",pathid)
end
local function TeleToEnd(pathid)
RunConsoleCommand("metrostroi_trackeditor_teletoend",pathid)
end
local function TeleEntToStart(pathid)
RunConsoleCommand("metrostroi_trackeditor_teleenttostart",pathid)
end
local function TeleEntToEnd(pathid)
RunConsoleCommand("metrostroi_trackeditor_teleenttoend",pathid)
end
local function SetSelectedPath(self,lineID, line)
SelectedPath = lineID
end
local function ShowRowMenu(self,lineID, line)
local menu = DermaMenu()
menu:AddOption("Teleport entity to start",function() TeleEntToStart(lineID) end)
menu:AddOption("Teleport entity to end",function() TeleEntToEnd(lineID) end)
menu:AddOption("Teleport me to start",function() TeleToStart(lineID) end)
menu:AddOption("Teleport me to end",function() TeleToEnd(lineID) end)
menu:AddOption("Delete",function() RemovePath(lineID) end)
menu:Open()
end
local function UpdateList()
if not List then return end
List:Clear()
for k,v in pairs(Paths) do
List:AddLine(k,#v)
end
end
net.Receive("metrostroi_trackeditor_trackdata",function(len,ply)
local ID = net.ReadInt(16)
print(Format("Received trackeditor path:%d",ID))
if ID == 0 then
Paths = {}
return
end
Paths[ID] = net.ReadTable()
UpdateList()
end)
net.Receive("metrostroi_trackeditor_message",function(len,ply)
ServerMessage = net.ReadString()
if MessageLabel and ServerMessage and IsValid(MessageLabel) then
MessageLabel:SetText(ServerMessage)
end
end)
local ShowPaths=true
concommand.Add("metrostroi_trackeditor_togglenodes",function()
ShowPaths=not ShowPaths
end)
local function OpenConfigWindow()
local function AddButton(parent,cmd,label,tooltip)
local Button = vgui.Create("DButton",parent)
Button:SetText(label)
Button:SizeToContents()
Button:SetConsoleCommand(cmd)
Button:SetSize(100,30)
Button:DockMargin(2,2,2,2)
Button:SetColor(color_black)
Button:SetToolTip(tooltip)
return Button
end
local function AddLabel(parent,str)
local Label = vgui.Create("DLabel",parent)
Label:SetText(str)
Label:SizeToContents()
Label:SetContentAlignment(5)
Label:DockMargin(2,2,2,2)
return Label
end
--Main frame
local Frame = vgui.Create("DFrame")
Frame:SetPos(ScrW()/5,ScrH()/3)
Frame:SetSize(250,400)
Frame:SetTitle("Metrostroi Track Recorder")
Frame:SetVisible(true)
Frame:SetDraggable(true)
Frame:ShowCloseButton(true)
--Mark entity button
local mb = AddButton(Frame,"metrostroi_trackeditor_mark","Mark Entity","Mark the entity you're looking at as the one to record with")
mb:DockMargin(2,2,2,2)
mb:Dock(TOP)
mb:SetColor(color_black)
--Panel for path recording
local PathPanel = vgui.Create("DPanel",Frame)
PathPanel:SetSize(20,60)
PathPanel:DockMargin(2,2,2,2)
PathPanel:Dock(TOP)
--Label for path recording panel
local PathL = AddLabel(PathPanel,"Path Recording")
PathL:Dock(TOP)
PathL:SetTextColor(Color(3,3,3))
--Start/stop buttons
local b1 = AddButton(PathPanel,"metrostroi_trackeditor_start","Start","Start recording a new path")
local b2 = AddButton(PathPanel,"metrostroi_trackeditor_stop","Stop","Stop recording the current path")
b1:Dock(LEFT)
b2:Dock(RIGHT)
--Save/load panel
local LoadPanel = vgui.Create("DPanel",Frame)
LoadPanel:SetSize(20,60)
LoadPanel:DockMargin(2,2,2,2)
LoadPanel:Dock(TOP)
--Label for save/load panel
local FileL = AddLabel(LoadPanel,"Save/load to file")
FileL:Dock(TOP)
FileL:SetTextColor(Color(3,3,3))
--Save/load buttons
local b1 = AddButton(LoadPanel,"metrostroi_trackeditor_load","Load","Load the map's track data file")
local b2 = AddButton(LoadPanel,"metrostroi_trackeditor_save","Save","Save all paths to the map's data file")
b1:Dock(LEFT)
b2:Dock(RIGHT)
--Server message label
MessageLabel = AddLabel(Frame,"")
MessageLabel:Dock(TOP)
local b3=AddButton(Frame,"metrostroi_trackeditor_togglenodes","Hide/Show Nodes","Toggle if node lines are shown or not.")
b3:Dock(TOP)
List = vgui.Create("DListView",Frame)
List:DockMargin(2,2,2,2)
List:Dock(FILL)
List:SetMultiSelect(false)
List:AddColumn("ID")
List:AddColumn("Nodes")
List:SetTall(100)
List.OnRowSelected = SetSelectedPath
List.OnRowRightClick = ShowRowMenu
UpdateList()
Frame:SizeToContents()
Frame:MakePopup()
end
concommand.Add("metrostroi_trackeditor",OpenConfigWindow,nil,"GUI for track editor")
hook.Add("PostDrawTranslucentRenderables","metrostroi_trackeditor_draw",function()
if ShowPaths then
for k,path in pairs(Paths) do
local lastnode = nil
local col = Either(k==SelectedPath,SelectedColor,DeSelectedColor)
for k2,node in pairs(path) do
if lastnode then
render.DrawLine(node,lastnode,col,true)
end
render.DrawWireframeSphere(node,10,2,2,col,true)
lastnode = node
end
end
end
end)