From 32d7bee0ecd5ad4d1422c827f06fe6a3432ddc0e Mon Sep 17 00:00:00 2001 From: Fesiug Date: Sat, 21 Sep 2024 23:44:54 -0400 Subject: [PATCH] FP can have different FOV for VM, debug spawner has preferred order --- gamemodes/benny/gamemode/camera.lua | 38 ++++++++++++++++++++++++++ gamemodes/benny/gamemode/debugmenu.lua | 18 ++++++++++-- gamemodes/benny/gamemode/pausemenu.lua | 20 ++++++++------ 3 files changed, 65 insertions(+), 11 deletions(-) diff --git a/gamemodes/benny/gamemode/camera.lua b/gamemodes/benny/gamemode/camera.lua index 0a768b7..69ad4fe 100644 --- a/gamemodes/benny/gamemode/camera.lua +++ b/gamemodes/benny/gamemode/camera.lua @@ -9,6 +9,7 @@ local cam_u = CreateConVar( "b-cam_u", 12 ) local cam_fov = CreateConVar( "b-cam_fov", 75 ) local cam_fp = CreateConVar( "b-cam_fp", 0 ) +local cam_fp_fov = CreateConVar( "b-cam_fp_fov", 75 ) local lastfp local m = 3 @@ -35,6 +36,43 @@ function CamSpot( ang, pos ) return tr.HitPos end +function Convert( fovDegrees, ratio ) + local halfAngleRadians = fovDegrees * ( 0.5 * math.pi / 180 ) + local t = math.tan( halfAngleRadians ) + t = t * ratio + local retDegrees = ( 180 / math.pi ) * math.atan( t ) + return retDegrees * 2 +end + +function QConvert( fovDegrees ) + return Convert( fovDegrees, (3/4)/(ScrH()/ScrW()) ) +end + +function GM:PreDrawViewModels() + local fp = cam_fp:GetBool() + if fp then + cam.Start3D( nil, nil, QConvert( cam_fp_fov:GetFloat() ) ) + cam.IgnoreZ( true ) + local p = LocalPlayer() + p.IWantDraw = true + p:DrawModel() + local w = p:HandlerCheck() + if w:GetActiveR():IsValid() then + w:GetActiveR():DrawModel() + end + p.IWantDraw = false + cam.IgnoreZ( false ) + cam.End3D() + end +end + +function GM:PrePlayerDraw( ply, flags ) + local fp = cam_fp:GetBool() + if fp and ply == LocalPlayer() and !ply.IWantDraw then + return true + end +end + function GM:CalcView( ply, pos, ang, fov ) local view = { origin = CamSpot(TPSOverride), -- pos includes the smoothstair offset which looks stupid here diff --git a/gamemodes/benny/gamemode/debugmenu.lua b/gamemodes/benny/gamemode/debugmenu.lua index 9da3161..f11d75b 100644 --- a/gamemodes/benny/gamemode/debugmenu.lua +++ b/gamemodes/benny/gamemode/debugmenu.lua @@ -60,6 +60,7 @@ local function painterly( self, w, h ) return true end +local preferredcategoryorder = { "pistol", "smg", "assaultrifle", "machinegun", "shotgun", "utility" } local function OpenDebugMenu() if IsValid(DebugMenu) then DebugMenu:Remove() end @@ -253,6 +254,19 @@ local function OpenDebugMenu() local categories = {} + -- preferred order + for index, category in SortedPairs( preferredcategoryorder ) do + if category == "base" then continue end + if !categories[category] then + local cate = opt:Add("DCollapsibleCategory") + cate:Dock(TOP) + cate:SetLabel(category) + local plist = vgui.Create("DPanelList") + cate:SetContents(plist) + categories[category] = plist + end + end + for iname, idata in SortedPairs( ITEMS ) do if idata.Category == "base" then continue end if !categories[idata.Category] then @@ -338,7 +352,7 @@ local function recursebones( ent, O_id, level ) local gap = "" for i=1, level do gap = gap .. " " end for index, id in ipairs( ent:GetChildBones( O_id ) ) do - chat.AddText( gap, c_id, tostring(id), c_white, " - ", c_name, ent:GetBoneName(id) ) + MsgC( gap, c_id, tostring(id), c_white, " - ", c_name, ent:GetBoneName(id) .. "\n" ) recursebones( ent, id, level+1 ) end end @@ -349,7 +363,7 @@ function printallbones( ent ) for id=0, ent:GetBoneCount()-1 do if ent:GetBoneName(id) == "__INVALIDBONE__" then continue end if ent:GetBoneParent(id) != -1 then continue end - chat.AddText( gap, c_id, tostring(id), c_white, " - ", c_name, ent:GetBoneName(id) ) + MsgC( c_id, tostring(id), c_white, " - ", c_name, ent:GetBoneName(id) .. "\n" ) recursebones( ent, id, 1 ) end end diff --git a/gamemodes/benny/gamemode/pausemenu.lua b/gamemodes/benny/gamemode/pausemenu.lua index 00eb685..0a5b49a 100644 --- a/gamemodes/benny/gamemode/pausemenu.lua +++ b/gamemodes/benny/gamemode/pausemenu.lua @@ -7,18 +7,19 @@ local function qpaint( self, w, h ) surface.SetDrawColor( COLOR_MAIN ) surface.DrawOutlinedRect( 1, 1, w-2, h-2, 1 ) - draw.SimpleText( self.text, "HUD_24", w/2, 6, COLOR_MAIN, TEXT_ALIGN_CENTER ) + draw.SimpleText( self.text, "HUD_36", w/2, 4, COLOR_MAIN, TEXT_ALIGN_CENTER ) end local settings = { { name = "Camera", items = { - { type = TYPE_BOOL, cvar = "b-cam_fp", name = "First-person Mode" }, - { type = TYPE_NUMBER, cvar = "b-cam_f", min = -200, max = 200, name = "Camera Forward" }, - { type = TYPE_NUMBER, cvar = "b-cam_r", min = -30, max = 30, name = "Camera Right" }, - { type = TYPE_NUMBER, cvar = "b-cam_u", min = -30, max = 30, name = "Camera Up" }, - { type = TYPE_NUMBER, cvar = "b-cam_fov", min = 1, max = 140, name = "Camera FOV" }, + { type = TYPE_NUMBER, cvar = "b-cam_f", min = -200, max = 200, name = "Camera Forward" }, + { type = TYPE_NUMBER, cvar = "b-cam_r", min = -30, max = 30, name = "Camera Right" }, + { type = TYPE_NUMBER, cvar = "b-cam_u", min = -30, max = 30, name = "Camera Up" }, + { type = TYPE_NUMBER, cvar = "b-cam_fov", min = 30, max = 120, name = "Camera FOV" }, + { type = TYPE_BOOL, cvar = "b-cam_fp", name = "First-person Mode" }, + { type = TYPE_NUMBER, cvar = "b-cam_fp_fov", min = 30, max = 120, name = "FP weapon FOV" }, } }, { @@ -111,9 +112,10 @@ local function StartPauseMenu() if PauseMenu and PauseMenu:IsValid() then PauseMenu:Remove() return end PauseMenu = vgui.Create("EditablePanel") - PauseMenu:SetSize( 300, 500 ) - PauseMenu:SetPos( 100, ScrH() - 500 - 100 ) + PauseMenu:SetSize( 300, 300 ) + PauseMenu:SetPos( ScrW()/2 - 300 - 5, ScrH()/2 - 300/2 ) PauseMenu:MakePopup() + PauseMenu:SetKeyboardInputEnabled( true ) local p = LocalPlayer() local myteam = p:Team() @@ -145,7 +147,7 @@ local function StartPauseMenu() button:Dock(TOP) button:DockMargin( 0, 0, 0, 10 ) button:SetText( "" ) - button:SetTall( 32 ) + button:SetTall( 40 ) button.text = data.name button.Paint = qpaint button.DoClick = data.DoClick