1
0
mirror of https://github.com/metrostroi-repo/MetrostroiAddon.git synced 2026-05-02 00:42:29 +00:00
Files
MetrostroiAddon/lua/entities/gmod_train_couple/cl_init.lua
g_brzhezinskiy 1d05caf866 init
2021-01-02 12:51:45 +03:00

177 lines
6.3 KiB
Lua

include("shared.lua")
function ENT:Initialize()
end
function ENT:OnRemove()
end
--------------------------------------------------------------------------------
function ENT:Think()
end
local c_gui
if IsValid(c_gui) then c_gui:Close() end
local function addButton(parent,stext,state,scolor,btext,benabled,callback)
--local a = v[1]
local panel = vgui.Create("DPanel")
panel:Dock( TOP )
panel:DockMargin( 5, 0, 5, 5 )
panel:DockPadding( 5, 5, 5, 5 )
if benabled then
local button = vgui.Create("DButton",panel)
button:Dock(RIGHT)
button:SetText(Metrostroi.GetPhrase(btext))
button:DockPadding( 5, 5, 5, 5 )
button:SizeToContents()
button:SetContentAlignment(5)
button:SetEnabled(benabled)
button.DoClick = callback
end
--DrawCutText(panel,Metrostroi.GetPhrase("Workshop.Warning"),false,"DermaDefaultBold")
vgui.MetrostroiDrawCutText(panel,Metrostroi.GetPhrase(stext),false,"DermaDefaultBold")
vgui.MetrostroiDrawCutText(panel,Metrostroi.GetPhrase(state),scolor,"DermaDefaultBold")
panel:InvalidateLayout( true )
panel:SizeToChildren(true,true )
parent:AddItem(panel)
end
function ENT:DrawGUI(tbl)
if IsValid(c_gui) then c_gui:Close() end
local c_gui = vgui.Create("DFrame")
c_gui:SetDeleteOnClose(true)
c_gui:SetTitle(Metrostroi.GetPhrase("Common.Couple.Title"))
c_gui:SetSize(0, 0)
c_gui:SetDraggable(true)
c_gui:SetSizable(false)
c_gui:MakePopup()
local scrollPanel = vgui.Create( "DScrollPanel", c_gui )
addButton(scrollPanel,"Common.Couple.CoupleState",tbl.coupled and "Common.Couple.Coupled" or "Common.Couple.Uncoupled", Color(0,150,0),"Common.Couple.Uncouple",tbl.coupled and tbl.access,function(button)
net.Start("metrostroi-coupler-menu")
net.WriteEntity(self)
net.WriteUInt(0,8)
net.SendToServer()
c_gui:Close()
end)
if tbl.isolpresent then
addButton(scrollPanel,"Common.Couple.IsolState",tbl.isolated and "Common.Couple.Isolated" or "Common.Couple.Opened", Color(0,150,0),tbl.isolated and "Common.Couple.Open" or "Common.Couple.Isolate",tbl.access,function(button)
net.Start("metrostroi-coupler-menu")
net.WriteEntity(self)
net.WriteUInt(1,8)
net.SendToServer()
c_gui:Close()
end)
end
if tbl.haveEKK then
addButton(scrollPanel,"Common.Couple.EKKState",tbl.ekk_disc and "Common.Couple.Disconnected" or "Common.Couple.Connected",tbl.ekk_disc and Color(150,50,0) or Color(0,150,0),tbl.ekk_disc and "Common.Couple.Connect" or "Common.Couple.Disconnect",tbl.access,function(button)
net.Start("metrostroi-coupler-menu")
net.WriteEntity(self)
net.WriteUInt(2,8)
net.SendToServer()
c_gui:Close()
end)
end
scrollPanel:Dock( FILL )
scrollPanel:InvalidateLayout( true )
scrollPanel:SizeToChildren(false,true)
local spPefromLayout = scrollPanel.PerformLayout
function scrollPanel:PerformLayout()
spPefromLayout(self)
if not self.First then self.First = true return end
local x,y = scrollPanel:ChildrenSize()
if self.Centered then return end
self.Centered = true
c_gui:SetSize(512,math.min(350,y)+35)
c_gui:Center()
end
end
function ENT:DrawGUIHTML(tbl)
if IsValid(c_gui) then c_gui:Close() end
c_gui = vgui.Create("DFrame")
c_gui:SetDeleteOnClose(true)
c_gui:SetTitle(Metrostroi.GetPhrase("Common.Couple.Title"))
c_gui:SetSize(640, 400)
c_gui:SetDraggable(true)
c_gui:SetSizable(false)
c_gui:Center()
local html = vgui.Create( "DHTML" , c_gui )
html:Dock( FILL )
html:SetHTML( [[
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<style type="text/css">
.grid {overflow: hidden;}
.segment_content {width: 100%;}
.segment_content > .ui.header {display: inline-block;height: 1rem;}
.segment_content > button {float: right;}
#green_header {color:green;}
#red_header {color: red;}
</style>
<link rel="stylesheet" href="https://test.metrostroi.net/tpl/semantic/semantic.css" type="text/css">
</head>
<body style="display: flex; min-height: 100vh; flex-direction: column;">
<div class="ui container" style="flex: 1; margin-right: 3rem !important; margin-left: 3rem !important">
<div class="ui main container" style="margin-top: 2rem; ">
<h3 style="padding-bottom: 1rem;">Меню сцепки</h3>
<div class="ui segment">
<div class="segment_content">
<h3 class="ui header">
Состояние сцепки
<div class="green sub header" id="green_header">Сцеплено</div>
</h3>
<button class="ui right floated button">Расцепить</button>
</div>
</div>
<div class="ui segment">
<div class="segment_content">
<h3 class="ui header">
Состояние концевых кранов
<div class="green sub header" id="green_header">Открыты</div>
</h3>
<button class="ui right floated button">Закрыть</button>
</div>
</div>
<div class="ui segment">
<div class="segment_content">
<h3 class="ui header">
Состояние ЭКК
<div class="green sub header" id="green_header">Разъединена</div>
</h3>
<button class="ui right floated button">Соеденить</button>
</div>
</div>
</div>
</div>
</body>
</html>
]] )
html:SetAllowLua( true )
html:ConsoleMessage( print)
html:AddFunction( "metrostroi", "getText", Metrostroi.GetPhrase)
c_gui:MakePopup()
end
net.Receive("metrostroi-coupler-menu",function()
local ent = net.ReadEntity()
if not IsValid(ent) or IsValid(c_gui) and c_gui.Entity ~= ent then return end
ent:DrawGUI{
access = net.ReadBool(),
coupled=net.ReadBool(),
isolpresent=net.ReadBool(),
isolated=net.ReadBool(),
haveEKK=not net.ReadBool(),
ekk_disc=net.ReadBool(),
}
end)