mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
330
gamemodes/helix/plugins/willardinterface/derma/cl_f1menu.lua
Normal file
330
gamemodes/helix/plugins/willardinterface/derma/cl_f1menu.lua
Normal file
@@ -0,0 +1,330 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
local animationTime = 1
|
||||
|
||||
DEFINE_BASECLASS("ixSubpanelParent")
|
||||
local PANEL = {}
|
||||
|
||||
function PANEL:Init()
|
||||
if IsValid(ix.gui.F1Menu) then
|
||||
ix.gui.F1Menu:Remove()
|
||||
end
|
||||
|
||||
ix.gui.F1Menu = self
|
||||
|
||||
-- properties
|
||||
self.noAnchor = CurTime() + 0.4
|
||||
self.anchorMode = true
|
||||
|
||||
self.currentAlpha = 0
|
||||
self.currentBlur = 0
|
||||
|
||||
gui.EnableScreenClicker( true )
|
||||
|
||||
self:SetSize(ScrW(), ScrH())
|
||||
|
||||
local function FramePaint( self, w, h)
|
||||
surface.SetDrawColor(Color(0, 0, 0, 50))
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
|
||||
surface.SetDrawColor(Color(100, 100, 100, 150))
|
||||
surface.DrawOutlinedRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
local mainFrame = self:Add("DPanel")
|
||||
mainFrame:SetSize( SScaleMin(1020 / 3), SScaleMin(372 / 3) )
|
||||
mainFrame:SetPos(ScrW() * 0.5 - mainFrame:GetWide() * 0.5, ScrH() * 0.5 - mainFrame:GetTall() * 0.5)
|
||||
mainFrame.Paint = function( self, w, h ) end
|
||||
|
||||
-- Main frame (invisible)
|
||||
local rightFrame = vgui.Create( "DPanel", mainFrame )
|
||||
rightFrame:SetSize( SScaleMin(800 / 3), 0 )
|
||||
rightFrame:Dock(RIGHT)
|
||||
rightFrame.Paint = function( self, w, h ) end
|
||||
|
||||
local leftFrame = vgui.Create( "DPanel", mainFrame)
|
||||
leftFrame:SetSize( SScaleMin(200 / 3), 0 )
|
||||
leftFrame:Dock(LEFT)
|
||||
leftFrame:DockMargin(0, SScaleMin(11 / 3), 0, 0)
|
||||
leftFrame.Paint = function( self, w, h )
|
||||
FramePaint(self, w, h)
|
||||
|
||||
surface.SetDrawColor(Color(150, 150, 150, 20))
|
||||
surface.SetMaterial(Material("willardnetworks/tabmenu/crafting/box_pattern.png", "noclamp"))
|
||||
surface.DrawTexturedRectUV( 0, 0, w, h, 0, 0, w / SScaleMin(414 / 3), h / SScaleMin(677 / 3) )
|
||||
end
|
||||
|
||||
-- Character model
|
||||
self.icon = vgui.Create( "ixModelPanel", leftFrame )
|
||||
self.icon:Dock(TOP)
|
||||
self.icon:SetTall(SScaleMin(372 / 3))
|
||||
self.icon:DockMargin(0, 0 - SScaleMin(20 / 3), 0, 0)
|
||||
self.icon:SetFOV(38)
|
||||
self.icon:SetModel( LocalPlayer():GetModel(), LocalPlayer():GetSkin(), true )
|
||||
|
||||
local title = rightFrame:Add("DLabel")
|
||||
title:SetFont("WNSmallerMenuTitleNoClamp")
|
||||
title:SetTextColor(Color(255, 255, 255, 255))
|
||||
title:SetExpensiveShadow(1, Color(0, 0, 0, 150))
|
||||
title:SetText(string.utf8upper("Informations Personnages & RP"))
|
||||
title:SizeToContents()
|
||||
title:Dock(TOP)
|
||||
|
||||
|
||||
local charInfoFrame = rightFrame:Add("DPanel")
|
||||
charInfoFrame:SetSize(rightFrame:GetWide(), SScaleMin(170 / 3))
|
||||
charInfoFrame:Dock(TOP)
|
||||
charInfoFrame:DockMargin(0, 0, 0, SScaleMin(20 / 3))
|
||||
|
||||
local boxPattern = Material("willardnetworks/tabmenu/crafting/box_pattern.png", "noclamp")
|
||||
charInfoFrame.Paint = function( self, w, h )
|
||||
FramePaint(self, w, h)
|
||||
|
||||
surface.SetDrawColor(Color(150, 150, 150, 20))
|
||||
surface.SetMaterial(boxPattern)
|
||||
surface.DrawTexturedRectUV( 0, 0, w, h, 0, 0, w / SScaleMin(414 / 3), h / SScaleMin(677 / 3) )
|
||||
end
|
||||
|
||||
local function GetPartColor(name)
|
||||
if LocalPlayer():GetNetVar(name) and LocalPlayer():GetNetVar("fullHealth") == false then
|
||||
return Color(255, 129, 122, 255)
|
||||
else
|
||||
return Color(255, 255, 255, 255)
|
||||
end
|
||||
end
|
||||
|
||||
local bodyParts = {
|
||||
{Image = "willardnetworks/f1menu/chest.png", Name = "ChestDamaged"},
|
||||
{Image = "willardnetworks/f1menu/head.png", Name = "HeadDamaged"},
|
||||
{Image = "willardnetworks/f1menu/larm.png", Name = "LArmDamaged"},
|
||||
{Image = "willardnetworks/f1menu/lleg.png", Name = "LLegDamaged"},
|
||||
{Image = "willardnetworks/f1menu/rarm.png", Name = "RArmDamaged"},
|
||||
{Image = "willardnetworks/f1menu/rleg.png", Name = "RLegDamaged"},
|
||||
{Image = "willardnetworks/f1menu/stomach.png", Name = "StomachDamaged"}
|
||||
}
|
||||
|
||||
-- Body
|
||||
local bodyFrame = charInfoFrame:Add("DPanel")
|
||||
bodyFrame:SetWide( SScaleMin(100 / 3) )
|
||||
bodyFrame:Dock(LEFT)
|
||||
bodyFrame.Paint = function(self, w, h) end
|
||||
|
||||
local body = bodyFrame:Add("DImage")
|
||||
local w, h = SScaleMin(64 / 3), SScaleMin(128 / 3)
|
||||
local x, y = bodyFrame:GetWide() * 0.5 - w * 0.5, charInfoFrame:GetTall() * 0.5 - h * 0.5
|
||||
|
||||
body:SetSize( w, h )
|
||||
body:SetPos(x, y)
|
||||
body:SetImage( "willardnetworks/f1menu/body.png" )
|
||||
|
||||
for k, v in pairs(bodyParts) do
|
||||
local bodypart = bodyFrame:Add("DImage")
|
||||
bodypart:SetSize( w, h )
|
||||
bodypart:SetPos(x, y)
|
||||
bodypart:SetImage( v.Image )
|
||||
bodypart:SetImageColor( GetPartColor(v.Name) )
|
||||
end
|
||||
|
||||
local textFrame = charInfoFrame:Add("DPanel")
|
||||
textFrame:SetWide( SScaleMin( 500 / 3) )
|
||||
textFrame:Dock(LEFT)
|
||||
textFrame.Paint = function(self, w, h) end
|
||||
|
||||
local name = textFrame:Add("DLabel")
|
||||
name:SetFont("TitlesFontNoClamp")
|
||||
name:SetTextColor(Color(254, 200, 0, 255))
|
||||
name:SetExpensiveShadow(1, Color(0, 0, 0, 50))
|
||||
name:SetText(LocalPlayer():Name())
|
||||
name:SizeToContents()
|
||||
name:Dock(TOP)
|
||||
name:DockMargin(0, SScaleMin(23 / 3), 0, 0)
|
||||
|
||||
local faction = textFrame:Add("DLabel")
|
||||
local factionTable = ix.faction.Get(LocalPlayer():Team())
|
||||
faction:SetFont("TitlesFontNoClamp")
|
||||
faction:SetTextColor(Color(254, 200, 0, 255))
|
||||
faction:SetExpensiveShadow(1, Color(0, 0, 0, 50))
|
||||
faction:SetText(factionTable.name)
|
||||
faction:SizeToContents()
|
||||
faction:Dock(TOP)
|
||||
faction:DockMargin(0, SScaleMin(9 / 3), 0, 0)
|
||||
|
||||
local citizenid = textFrame:Add("DLabel")
|
||||
local cidtext = LocalPlayer():GetCharacter():GetCid() or "N/A"
|
||||
citizenid:SetFont("TitlesFontNoClamp")
|
||||
citizenid:SetTextColor(Color(255, 255, 255, 255))
|
||||
citizenid:SetExpensiveShadow(1, Color(0, 0, 0, 50))
|
||||
citizenid:SetText("CID : #"..cidtext or "AUCUN")
|
||||
citizenid:SizeToContents()
|
||||
citizenid:Dock(TOP)
|
||||
citizenid:DockMargin(0, SScaleMin(9 / 3), 0, 0)
|
||||
|
||||
local tokens = textFrame:Add("DLabel")
|
||||
tokens:SetFont("TitlesFontNoClamp")
|
||||
tokens:SetTextColor(Color(255, 255, 255, 255))
|
||||
tokens:SetExpensiveShadow(1, Color(0, 0, 0, 50))
|
||||
tokens:SetText("Crédits : "..LocalPlayer():GetCharacter():GetMoney())
|
||||
tokens:SizeToContents()
|
||||
tokens:Dock(TOP)
|
||||
tokens:DockMargin(0, SScaleMin(9 / 3), 0, 0)
|
||||
|
||||
local description = vgui.Create("DButton", rightFrame)
|
||||
description:SetFont("MenuFontNoClamp")
|
||||
description:SetText( "Description" )
|
||||
description:Dock(TOP)
|
||||
description:DockMargin(0, 0, 0, 0 - SScaleMin(1 / 3))
|
||||
description:SetSize( rightFrame:GetWide(), SScaleMin(30 / 3) )
|
||||
|
||||
description.Paint = function( self, w, h ) FramePaint(self, w, h) end
|
||||
|
||||
description.DoClick = function ( btn )
|
||||
Derma_StringRequest(LocalPlayer():Name(), "Entrez votre description", LocalPlayer():GetCharacter():GetDescription(), function(desc)
|
||||
ix.command.Send("CharDesc", desc)
|
||||
end)
|
||||
end
|
||||
|
||||
local detDesc = vgui.Create("DButton", rightFrame)
|
||||
detDesc:SetFont("MenuFontNoClamp")
|
||||
detDesc:SetText( "Animations" )
|
||||
detDesc:Dock(TOP)
|
||||
detDesc:DockMargin(0, 0, 0, 0 - SScaleMin(1 / 3))
|
||||
detDesc:SetSize( rightFrame:GetWide(), SScaleMin(30 / 3) )
|
||||
detDesc.Paint = function( self, w, h ) FramePaint(self, w, h) end
|
||||
|
||||
detDesc.DoClick = function ( btn )
|
||||
local MenuButtonOptions = DermaMenu() -- Creates the menu
|
||||
MenuButtonOptions:AddOption("Act Arrest", function() ix.command.Send("actarrest") end ) -- Add options to the menu
|
||||
MenuButtonOptions:AddOption("Act Injured", function() ix.command.Send("actinjured") end )
|
||||
MenuButtonOptions:AddOption("Act Cheer", function() ix.command.Send("actcheer") end )
|
||||
MenuButtonOptions:AddOption("Act Lean", function() ix.command.Send("actlean") end )
|
||||
MenuButtonOptions:AddOption("Act Pant", function() ix.command.Send("actpant") end )
|
||||
MenuButtonOptions:AddOption("Act Sit", function() ix.command.Send("actsit") end )
|
||||
MenuButtonOptions:AddOption("Act Sit Wall", function() ix.command.Send("actsitwall") end )
|
||||
MenuButtonOptions:AddOption("Act Stand", function() ix.command.Send("actstand") end )
|
||||
MenuButtonOptions:AddOption("Act Wave", function() ix.command.Send("actwave") end )
|
||||
MenuButtonOptions:AddOption("Act Window", function() ix.command.Send("actwindow") end )
|
||||
MenuButtonOptions:AddOption("Act Type", function() ix.command.Send("acttype") end )
|
||||
MenuButtonOptions:AddOption("Act Sit Chair", function() ix.command.Send("actsitchair") end)
|
||||
MenuButtonOptions:AddOption("Act Sit Lean", function() ix.command.Send("actsitlean") end)
|
||||
MenuButtonOptions:Open() -- Open the menu AFTER adding your options
|
||||
|
||||
for _, v in pairs(MenuButtonOptions:GetChildren()[1]:GetChildren()) do
|
||||
if v:GetClassName() == "Label" then
|
||||
v:SetFont("MenuFontNoClamp")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local fallover = vgui.Create("DButton", rightFrame)
|
||||
fallover:SetFont("MenuFontNoClamp")
|
||||
fallover:SetText( "S'évanouir" )
|
||||
fallover:Dock(TOP)
|
||||
fallover:DockMargin(0, 0, 0, 0 - SScaleMin(1 / 3))
|
||||
fallover:SetSize( rightFrame:GetWide(), SScaleMin(30 / 3) )
|
||||
fallover.Paint = function( self, w, h ) FramePaint(self, w, h) end
|
||||
|
||||
fallover.DoClick = function ( btn )
|
||||
ix.command.Send("CharFallover")
|
||||
end
|
||||
|
||||
hook.Run("F1MenuCreated", self, mainFrame, leftFrame, rightFrame)
|
||||
|
||||
self:MakePopup()
|
||||
self:OnOpened()
|
||||
end
|
||||
|
||||
function PANEL:OnOpened()
|
||||
self:SetAlpha(0)
|
||||
|
||||
self:CreateAnimation(animationTime, {
|
||||
target = {currentAlpha = 255},
|
||||
easing = "outQuint",
|
||||
|
||||
Think = function(animation, panel)
|
||||
panel:SetAlpha(panel.currentAlpha)
|
||||
end
|
||||
})
|
||||
end
|
||||
|
||||
function PANEL:OnKeyCodePressed(key)
|
||||
self.noAnchor = CurTime() + 0.5
|
||||
|
||||
if (key == KEY_F1) then
|
||||
self:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:Think()
|
||||
if (self.bClosing) then
|
||||
return
|
||||
end
|
||||
|
||||
local bF1Down = input.IsKeyDown(KEY_F1)
|
||||
|
||||
if (bF1Down and (self.noAnchor or CurTime() + 0.4) < CurTime() and self.anchorMode) then
|
||||
self.anchorMode = false
|
||||
end
|
||||
|
||||
if ((!self.anchorMode and !bF1Down) or gui.IsGameUIVisible()) then
|
||||
self:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:Paint(width, height)
|
||||
|
||||
surface.SetDrawColor(Color(63, 58, 115, 220))
|
||||
surface.DrawRect(0, 0, width, height)
|
||||
|
||||
Derma_DrawBackgroundBlur( self, 0 )
|
||||
|
||||
BaseClass.Paint(self, width, height)
|
||||
end
|
||||
|
||||
function PANEL:Remove()
|
||||
self.bClosing = true
|
||||
self:SetMouseInputEnabled(false)
|
||||
self:SetKeyboardInputEnabled(false)
|
||||
|
||||
if IsValid(self.icon) then
|
||||
self.icon:Remove()
|
||||
end
|
||||
|
||||
CloseDermaMenus()
|
||||
gui.EnableScreenClicker(false)
|
||||
|
||||
self:CreateAnimation(animationTime * 0.5, {
|
||||
index = 2,
|
||||
target = {currentBlur = 0},
|
||||
easing = "outQuint"
|
||||
})
|
||||
|
||||
self:CreateAnimation(animationTime * 0.5, {
|
||||
target = {currentAlpha = 0},
|
||||
easing = "outQuint",
|
||||
|
||||
-- we don't animate the blur because blurring doesn't draw things
|
||||
-- with amount < 1 very well, resulting in jarring transition
|
||||
Think = function(animation, panel)
|
||||
panel:SetAlpha(panel.currentAlpha)
|
||||
end,
|
||||
|
||||
OnComplete = function(animation, panel)
|
||||
BaseClass.Remove(panel)
|
||||
end
|
||||
})
|
||||
end
|
||||
|
||||
vgui.Register("ixF1Menu", PANEL, "ixSubpanelParent")
|
||||
|
||||
if (IsValid(ix.gui.F1Menu)) then
|
||||
ix.gui.F1Menu:Remove()
|
||||
end
|
||||
Reference in New Issue
Block a user