Skip to content

C4: Reworked UI #1734

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 3 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
180 changes: 180 additions & 0 deletions gamemodes/terrortown/entities/entities/ttt_c4/cl_init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,186 @@
local T = LANG.GetTranslation
local PT = LANG.GetParamTranslation

---
-- Calculates and caches the dimensions of the bodysearch UI.
-- @realm client
function ENT:CalculateMenuSizes()
self.sizes = {}

self.sizes.width = 600
self.sizes.height = 500
self.sizes.padding = 10

self.sizes.heightButton = 45
self.sizes.widthButton = 160
self.sizes.widthButtonClose = 100
self.sizes.heightBottomButtonPanel = self.sizes.heightButton + self.sizes.padding + 1

self.sizes.widthMainArea = self.sizes.width - 2 * self.sizes.padding
self.sizes.heightMainArea = self.sizes.height
- self.sizes.heightBottomButtonPanel
- 3 * self.sizes.padding
- vskin.GetHeaderHeight()
- vskin.GetBorderSize()

self.sizes.widthTopButton = (self.sizes.widthMainArea - 4 * self.sizes.padding) / 5
self.sizes.heightTopButton = 50
end

function ENT:ShowMenu()

Check failure on line 36 in gamemodes/terrortown/entities/entities/ttt_c4/cl_init.lua

View workflow job for this annotation

GitHub Actions / doc-check

Missing essential param --> "Missing '@realm' in function 'ENT:ShowMenu'"
self:CalculateMenuSizes()

local frame = self.menuFrame

-- IF MENU ELEMENT DOES NOT ALREADY EXIST, CREATE IT
if IsValid(frame) then
frame:ClearFrame(nil, nil, "c4_arm")
else
frame = vguihandler.GenerateFrame(self.sizes.width, self.sizes.height, "c4_arm")
end

frame:SetPadding(self.sizes.padding, self.sizes.padding, self.sizes.padding, self.sizes.padding)

-- CONTENT AREA
local mainBox = vgui.Create("DPanelTTT2", frame)
mainBox:SetSize(self.sizes.widthMainArea, self.sizes.heightMainArea)
mainBox:DockMargin(0, 0, 0, 0)
mainBox:Dock(TOP)

local contentLayout = vgui.Create("DIconLayout", mainBox)
contentLayout:Dock(FILL)

local box = contentLayout:Add("DInfoItemTTT2")
box:SetSize(self.sizes.widthContentBox, 100)
box:DockMargin(0, 0, 0, self.sizes.padding)
box:Dock(TOP)
box:SetData({
text = {
title = {
body = "search_title_spectator",
params = nil,
},
text = {
{
body = "search_spec",
params = nil,
},
},
},
})

local selectionPanel = contentLayout:Add("DPanelTTT2")
selectionPanel:SetSize(self.sizes.widthContentBox, 250)
selectionPanel:DockMargin(0, 0, 0, 0)
selectionPanel:Dock(TOP)
selectionPanel.Paint = function(slf, w, h)
derma.SkinHook("Paint", "SelectionPanelTTT2", slf, w, h)

return true
end

local decisionLayout = vgui.Create("DIconLayout", selectionPanel)
decisionLayout:Dock(FILL)

local buttonPanel = decisionLayout:Add("DPanelTTT2")
buttonPanel:SetSize(
self.sizes.widthMainArea - 2 * self.sizes.padding,
self.sizes.heightTopButton
)
buttonPanel:DockMargin(0, 0, 0, 0)
buttonPanel:Dock(TOP)

local buttonLayout = vgui.Create("DIconLayout", buttonPanel)
buttonLayout:Dock(FILL)

local buttonTime1 = buttonLayout:Add("DButtonTTT2")
buttonTime1:SetSize(self.sizes.widthTopButton, self.sizes.heightTopButton)
buttonTime1:DockMargin(0, 0, 0, 0)
buttonTime1:Dock(LEFT)
buttonTime1:SetText("0:25")
buttonTime1.Paint = function(slf, w, h)
derma.SkinHook("Paint", "ButtonRoundEndLeftTTT2", slf, w, h)

return true
end

local buttonTime2 = buttonLayout:Add("DButtonTTT2")
buttonTime2:SetSize(self.sizes.widthTopButton, self.sizes.heightTopButton)
buttonTime2:DockMargin(self.sizes.padding, 0, 0, 0)
buttonTime2:Dock(LEFT)
buttonTime2:SetText("0:45")
buttonTime2.Paint = function(slf, w, h)
derma.SkinHook("Paint", "ButtonRoundEndLeftTTT2", slf, w, h)

return true
end

local buttonTime3 = buttonLayout:Add("DButtonTTT2")
buttonTime3:SetSize(self.sizes.widthTopButton, self.sizes.heightTopButton)
buttonTime3:DockMargin(self.sizes.padding, 0, 0, 0)
buttonTime3:Dock(LEFT)
buttonTime3:SetText("1:15")
buttonTime3.Paint = function(slf, w, h)
derma.SkinHook("Paint", "ButtonRoundEndLeftTTT2", slf, w, h)

return true
end

local buttonTime4 = buttonLayout:Add("DButtonTTT2")
buttonTime4:SetSize(self.sizes.widthTopButton, self.sizes.heightTopButton)
buttonTime4:DockMargin(self.sizes.padding, 0, 0, 0)
buttonTime4:Dock(LEFT)
buttonTime4:SetText("2:00")
buttonTime4.Paint = function(slf, w, h)
derma.SkinHook("Paint", "ButtonRoundEndLeftTTT2", slf, w, h)

return true
end

local buttonTime5 = buttonLayout:Add("DButtonTTT2")
buttonTime5:SetSize(self.sizes.widthTopButton, self.sizes.heightTopButton)
buttonTime5:DockMargin(self.sizes.padding, 0, 0, 0)
buttonTime5:Dock(LEFT)
buttonTime5:SetText("3:00")
buttonTime5.Paint = function(slf, w, h)
derma.SkinHook("Paint", "ButtonRoundEndLeftTTT2", slf, w, h)

return true
end

-----------------

-- BUTTONS
local buttonArea = vgui.Create("DButtonPanelTTT2", frame)
buttonArea:SetSize(self.sizes.width, self.sizes.heightBottomButtonPanel)
buttonArea:Dock(BOTTOM)

local buttonPickUp = vgui.Create("DButtonTTT2", buttonArea)
buttonPickUp:SetText("c4_remove_pickup")
buttonPickUp:SetSize(self.sizes.widthButton, self.sizes.heightButton)
buttonPickUp:SetPos(0, self.sizes.padding + 1)
buttonPickUp.DoClick = function(btn)
print("bla")
end

local buttonDestroy = vgui.Create("DButtonTTT2", buttonArea)
buttonDestroy:SetText("c4_remove_destroy1")
buttonDestroy:SetSize(self.sizes.widthButton, self.sizes.heightButton)
buttonDestroy:SetPos(self.sizes.widthButton + self.sizes.padding, self.sizes.padding + 1)
buttonDestroy:SetHoldTime(2)
buttonDestroy.DoClick = function(btn)
print("blubb")
end

local buttonArm = vgui.Create("DButtonTTT2", buttonArea)
buttonArm:SetText("c4_arm")
buttonArm:SetSize(self.sizes.widthButton, self.sizes.heightButton)
buttonArm:SetPos(self.sizes.widthMainArea - self.sizes.widthButton, self.sizes.padding + 1)
buttonArm.DoClick = function(btn)
print("blubbidubb")
end
end

---- ARMING

---
Expand Down
2 changes: 2 additions & 0 deletions gamemodes/terrortown/entities/entities/ttt_c4/shared.lua
Original file line number Diff line number Diff line change
Expand Up @@ -731,8 +731,10 @@ else -- CLIENT
if IsValid(self) then
if not self:GetArmed() then
ShowC4Config(self)
self:ShowMenu()
else
ShowC4Disarm(self)
self:ShowMenu()
end
end

Expand Down
11 changes: 11 additions & 0 deletions gamemodes/terrortown/gamemode/client/cl_vskin/default_skin.lua
Original file line number Diff line number Diff line change
Expand Up @@ -664,6 +664,13 @@
drawBox(0, 0, w, h, colorBox)
drawBox(0, h - sizes.border, w, sizes.border, colorLine)

local holdProgress = panel:GetHoldProgress()

if panel:HasHoldTime() and holdProgress > 0 then
drawBox(0, 0, w * holdProgress, h, colors.accentActive)
drawBox(0, h - sizes.border, w * holdProgress, sizes.border, colors.accentDarkActive)
end

local translatedText = ""
if panel:HasTextParams() then
translatedText = string.upper(ParT(panel:GetText(), panel:GetTextParams()))
Expand Down Expand Up @@ -2381,5 +2388,9 @@
end
end

function SKIN:PaintSelectionPanelTTT2(panel, w, h)

Check failure on line 2391 in gamemodes/terrortown/gamemode/client/cl_vskin/default_skin.lua

View workflow job for this annotation

GitHub Actions / doc-check

Missing essential param --> "Missing '@realm' in function 'SKIN:PaintSelectionPanelTTT2'"

Check failure on line 2391 in gamemodes/terrortown/gamemode/client/cl_vskin/default_skin.lua

View workflow job for this annotation

GitHub Actions / doc-check

Param mismatch --> "In 'function' datastructure ('function SKIN:PaintSelectionPanelTTT2(panel, w, h)'), detected params (0): " "Expected Params (3): " "- 'panel'" "- 'w'" "- 'h'"
drawRoundedBox(sizes.cornerRadius, 0, 0, w, h, colors.handle)
end

-- REGISTER DERMA SKIN
derma.DefineSkin(SKIN.Name, "TTT2 default skin for all vgui elements", SKIN)
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,30 @@
oldRightClick(slf)
end
end)

local oldMousePressed = self.OnMousePressed
local oldMouseReleased = self.OnMouseReleased

self.OnMousePressed = function(slf, keyCode)
if not self:HasHoldTime() or keyCode ~= MOUSE_LEFT then
return oldMousePressed(slf, keyCode)
end

self.data.holdStart = CurTime()
end

self.OnMouseReleased = function(slf, keyCode)
if not self:HasHoldTime() or keyCode ~= MOUSE_LEFT then
return oldMouseReleased(slf, keyCode)
end

if self:GetHoldProgress() >= 1 then
self:DoClickInternal()
self:DoClick()
end

self.data.holdStart = nil
end
end

---
Expand Down Expand Up @@ -368,4 +392,22 @@
self:SetSize(w + 8, h + 4)
end

function PANEL:SetHoldTime(time)

Check failure on line 395 in gamemodes/terrortown/gamemode/client/cl_vskin/vgui/dbutton_ttt2.lua

View workflow job for this annotation

GitHub Actions / doc-check

Missing essential param --> "Missing '@realm' in function 'PANEL:SetHoldTime'"

Check failure on line 395 in gamemodes/terrortown/gamemode/client/cl_vskin/vgui/dbutton_ttt2.lua

View workflow job for this annotation

GitHub Actions / doc-check

Param mismatch --> "In 'function' datastructure ('function PANEL:SetHoldTime(time)'), detected params (0): " "Expected Params (1): " "- 'time'"
self.data.holdtime = time
end

function PANEL:HasHoldTime()

Check failure on line 399 in gamemodes/terrortown/gamemode/client/cl_vskin/vgui/dbutton_ttt2.lua

View workflow job for this annotation

GitHub Actions / doc-check

Missing essential param --> "Missing '@realm' in function 'PANEL:HasHoldTime'"
return self.data.holdtime ~= nil
end

function PANEL:GetHoldProgress()

Check failure on line 403 in gamemodes/terrortown/gamemode/client/cl_vskin/vgui/dbutton_ttt2.lua

View workflow job for this annotation

GitHub Actions / doc-check

Missing essential param --> "Missing '@realm' in function 'PANEL:GetHoldProgress'"
if not self:HasHoldTime() then
return 0
end

local time = CurTime()

return math.min((time - (self.data.holdStart or time)) / self.data.holdtime, 1)
end

derma.DefineControl("DButtonTTT2", "A standard Button", PANEL, "DLabelTTT2")
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,21 @@ end
-- @return string|nil
-- @realm client
function PANEL:GetText()
if not self.data.text then
return
end

return self.data.text.text
end

---
-- @return string
-- @realm client
function PANEL:GetTitle()
if not self.data.text then
return
end

return self.data.text.title
end

Expand Down
Loading