Skip to content
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 starttime = C4_MINIMUM_TIME
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()
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 @@ function SKIN:PaintButtonTTT2(panel, w, h)
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 @@ function SKIN:PaintPlayerGraphTTT2(panel, w, h)
end
end

function SKIN:PaintSelectionPanelTTT2(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 @@ function PANEL:Init()
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 @@ function PANEL:SizeToContents()
self:SetSize(w + 8, h + 4)
end

function PANEL:SetHoldTime(time)
self.data.holdtime = time
end

function PANEL:HasHoldTime()
return self.data.holdtime ~= nil
end

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