Files
wnsrc/lua/menu/crosshair_setup.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

220 lines
7.4 KiB
Lua

--[[
| 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 crosshair_sliders = {
{ title = "Style", cvar = "cl_crosshairstyle", values = { ["0"] = "Half-Life 2", ["1"] = "Dot Image", ["2"] = "Classic" } },
{ title = "Gap", cvar = "cl_crosshairgap", min = 0, max = 200 },
{ title = "Size", cvar = "cl_crosshairsize", min = 0, max = 200 },
{ title = "Thickness", cvar = "cl_crosshairthickness", min = 0, max = 200 },
{ title = "Dot", cvar = "cl_crosshairdot" },
{ title = "T-Style", cvar = "cl_crosshair_t" },
{ title = "Use Alpha", cvar = "cl_crosshairusealpha" },
{ title = "Quick Info", cvar = "hud_quickinfo" },
{ title = "Outline", cvar = "cl_crosshair_drawoutline" },
{ title = "Outline Thickness", cvar = "cl_crosshair_outlinethickness", min = 0.1, max = 3 },
}
local function GetCrosshairColor()
return Color( GetConVarNumber( "cl_crosshaircolor_r" ),
GetConVarNumber( "cl_crosshaircolor_g" ),
GetConVarNumber( "cl_crosshaircolor_b" ),
GetConVarNumber( "cl_crosshairalpha" )
)
end
local function DrawCrosshairRect( color, x0, y0, x1, y1, bAdditive )
if ( GetConVarNumber( "cl_crosshair_drawoutline" ) != 0 ) then
local flThick = GetConVarNumber( "cl_crosshair_outlinethickness" )
surface.SetDrawColor( 0, 0, 0, color.a )
surface.DrawRect( x0 - flThick, y0 - flThick, (x1 + flThick) - x0 + flThick, (y1 + flThick) - y0 + flThick )
end
surface.SetDrawColor( color.r, color.g, color.b, color.a )
if ( bAdditive ) then
surface.DrawTexturedRect( x0, y0, x1 - x0, y1 - y0 )
else
surface.DrawRect( x0, y0, x1 - x0, y1 - y0 )
end
end
local additiveTex = Material( "vgui/white_additive" )
local function DrawSimpleCrosshairPreview( x, y )
local color = GetCrosshairColor()
local bAdditive = GetConVarNumber( "cl_crosshairusealpha" ) == 0
if ( bAdditive ) then
surface.SetMaterial( additiveTex )
color.a = 200
end
local iBarSize = math.Round( ScreenScaleH( GetConVarNumber( "cl_crosshairsize" ) ))
local iBarThickness = math.max( 1, math.Round( ScreenScaleH( GetConVarNumber( "cl_crosshairthickness" ) ) ) )
local iInnerCrossDist = GetConVarNumber( "cl_crosshairgap" )
-- draw horizontal crosshair lines
local iInnerLeft = x - iInnerCrossDist - iBarThickness / 2
local iInnerRight = iInnerLeft + 2 * iInnerCrossDist + iBarThickness
local iOuterLeft = iInnerLeft - iBarSize
local iOuterRight = iInnerRight + iBarSize
local y0 = y - iBarThickness / 2
local y1 = y0 + iBarThickness
DrawCrosshairRect( color, iOuterLeft, y0, iInnerLeft, y1, bAdditive )
DrawCrosshairRect( color, iInnerRight, y0, iOuterRight, y1, bAdditive )
-- draw vertical crosshair lines
local iInnerTop = y - iInnerCrossDist - iBarThickness / 2
local iInnerBottom = iInnerTop + 2 * iInnerCrossDist + iBarThickness
local iOuterTop = iInnerTop - iBarSize
local iOuterBottom = iInnerBottom + iBarSize
local x0 = x - iBarThickness / 2
local x1 = x0 + iBarThickness
if ( GetConVarNumber( "cl_crosshair_t" ) == 0 ) then
DrawCrosshairRect( color, x0, iOuterTop, x1, iInnerTop, bAdditive )
end
DrawCrosshairRect( color, x0, iInnerBottom, x1, iOuterBottom, bAdditive )
-- draw dot
if ( GetConVarNumber( "cl_crosshairdot" ) != 0 ) then
x0 = x - iBarThickness / 2
x1 = x0 + iBarThickness
y0 = y - iBarThickness / 2
y1 = y0 + iBarThickness
DrawCrosshairRect( color, x0, y0, x1, y1, bAdditive )
end
end
concommand.Add( "crosshair_setup", function()
surface.CreateFont( "QuickInfoLarge", {
font = "HL2cross",
size = 64,
additive = false,
} )
local frame = vgui.Create( "DFrame" )
frame:SetSize( 600, 480 )
frame:Center()
frame:SetTitle( "Default Crosshair Setup" )
frame:MakePopup()
local crosshairMat = Material( "gui/crosshair.png" )
local preview = vgui.Create( "DImage", frame )
preview:Dock( LEFT )
preview:DockPadding( 5, 5, 5, 5 )
preview:SetWide( 320 )
preview:SetMouseInputEnabled( true )
preview:SetImage( "gui/crosshair_bg.png" )
preview.PaintOver = function( p, w, h )
if ( GetConVarNumber( "cl_crosshairstyle" ) == 0 ) then
surface.SetFont( "Crosshairs" )
surface.SetTextColor( 255, 208, 64, 255 )
local width, height = surface.GetTextSize( "Q" )
surface.SetTextPos( w / 2 - width / 2, h / 2 - height / 2 )
surface.DrawText( "Q" )
elseif ( GetConVarNumber( "cl_crosshairstyle" ) == 1 ) then
surface.SetDrawColor( GetCrosshairColor() )
surface.SetMaterial( crosshairMat )
surface.DrawTexturedRect( w / 2 - 32, h / 2 - 32, 64, 64 )
elseif ( GetConVarNumber( "cl_crosshairstyle" ) >= 2 ) then
DrawSimpleCrosshairPreview( w / 2, h / 2 )
end
if ( GetConVarNumber( "hud_quickinfo" ) != 0 ) then
surface.SetFont( "QuickInfoLarge" )
surface.SetTextColor( 255, 208, 64, 200 )
local width, height = surface.GetTextSize( "{ ]" )
surface.SetTextPos( w / 2 - width / 2, h / 2 - height / 2 )
surface.DrawText( "{ ]" )
end
end
local previewBtns = vgui.Create( "Panel", preview )
previewBtns:Dock( TOP )
local img1btn = vgui.Create( "DButton", previewBtns )
img1btn:Dock( LEFT )
img1btn:SetWide( 320 / 2 )
img1btn:SetText( "Preview 1" )
img1btn.DoClick = function() preview:SetImage( "gui/crosshair_bg.png" ) end
local img2btn = vgui.Create( "DButton", previewBtns )
img2btn:SetText( "Preview 2" )
img2btn.DoClick = function() preview:SetImage( "gui/crosshair_bg2.png" ) end
img2btn:Dock( FILL )
local settings = vgui.Create( "Panel", frame )
settings:Dock( FILL )
settings:DockPadding( 5, 0, 0, 0 )
local function HideUselessStuff( style )
style = style or GetConVarNumber( "cl_crosshairstyle" )
for i, pnl in pairs( settings:GetChildren() ) do
if ( pnl.ClassName == "DColorMixer" and style == 0 ) then
pnl:SetVisible( false )
elseif ( pnl.ClassName == "DNumSlider" and style != 2 ) then
pnl:SetVisible( false )
elseif ( pnl.ClassName == "DCheckBoxLabel" ) then
pnl:SetVisible( pnl.Button.m_strConVar == "hud_quickinfo" or style == 2 )
else
pnl:SetVisible( true )
end
end
settings:InvalidateLayout()
end
for i, str in pairs( crosshair_sliders ) do
local setting = nil
if ( str.min ) then
setting = vgui.Create( "DNumSlider", settings )
setting:SetMinMax( str.min, str.max )
setting:SetDefaultValue( GetConVar( str.cvar ):GetDefault() )
setting:SetDecimals( 0 )
elseif ( str.values ) then
setting = vgui.Create( "DComboBox", settings )
setting.OnSelect = function( pnl, indx, val, data ) pnl:ConVarChanged( data ) HideUselessStuff( tonumber( data ) ) end
for id, title in pairs( str.values ) do setting:AddChoice( title, id ) end
else
setting = vgui.Create( "DCheckBoxLabel", settings )
end
setting:Dock( TOP )
setting:SetText( str.title )
setting:SetConVar( str.cvar )
end
local mixer = vgui.Create( "DColorMixer", settings )
mixer:Dock( TOP )
mixer:SetTall( 220 )
mixer:SetColor( GetCrosshairColor() )
mixer:SetConVarR( "cl_crosshaircolor_r" )
mixer:SetConVarG( "cl_crosshaircolor_g" )
mixer:SetConVarB( "cl_crosshaircolor_b" )
mixer:SetConVarA( "cl_crosshairalpha" )
HideUselessStuff()
local resetCrosshair = vgui.Create( "DButton", preview )
resetCrosshair.DoClick = function()
for i, str in pairs( crosshair_sliders ) do
local def = GetConVar( str.cvar ):GetDefault()
RunConsoleCommand( str.cvar, def )
end
mixer:SetColor( color_white ) -- hack
HideUselessStuff()
end
resetCrosshair:SetText( "Reset Crosshair" )
resetCrosshair:Dock( BOTTOM )
end )