From 57b50709bbd0da8f5402b37d0edb2bfab9ba91ea Mon Sep 17 00:00:00 2001 From: Fesiug Date: Sun, 24 Sep 2023 17:50:42 -0400 Subject: [PATCH] More good stuff. Captions, debug inv, italics. --- .../benny/gamemode/modules/audio/sh_audio.lua | 58 +++++++++++ .../gamemode/modules/commons/sh_commons.lua | 3 - .../benny/gamemode/modules/player/cl_hud.lua | 17 ++-- .../gamemode/modules/player/sh_basic.lua | 95 ++++++++++--------- 4 files changed, 121 insertions(+), 52 deletions(-) create mode 100644 gamemodes/benny/gamemode/modules/audio/sh_audio.lua diff --git a/gamemodes/benny/gamemode/modules/audio/sh_audio.lua b/gamemodes/benny/gamemode/modules/audio/sh_audio.lua new file mode 100644 index 0000000..31a4cb5 --- /dev/null +++ b/gamemodes/benny/gamemode/modules/audio/sh_audio.lua @@ -0,0 +1,58 @@ + +-- Audio & caption system + +CAPTIONS = {} +CAPTIONS["en-us"] = {} + +CAPTIONS["en-us"]["1911.Fire"] = { + Name = "Cobra .45", + Color = color_white, + Text = "[fire]", + Bold = false, + Italic = true, + TypeTime = 0.1, + LifeTime = 0.5, +} +CAPTIONS["en-us"]["1911.Reload"] = { + Name = "Cobra .45", + Color = color_white, + Text = "[reload]", + Bold = false, + Italic = true, + TypeTime = 0.1, + LifeTime = 0.5, +} + +CAPTIONS = CAPTIONS["en-us"] + +SOUNDS = {} + +function AddSound( name, path, sndlevel, pitch, volume, channel ) + SOUNDS[name] = { + path = path, + sndlevel = sndlevel or 70, + pitch = pitch or 100, + volume = volume or 1, + channel = channel or CHAN_STATIC, + } +end + +local screwup = SERVER and Color(150, 255, 255) or Color(255, 200, 150) + +function B_Sound( ent, tag ) + local tagt = SOUNDS[tag] + if !tagt then MsgC( screwup, "Invalid sound " .. tag .. "\n" ) return end + local path, sndlevel, pitch, volume, channel = tagt.path, tagt.sndlevel, tagt.pitch, tagt.volume, tagt.channel + if istable( path ) then + path = path[math.Round(util.SharedRandom( "B_Sound", 1, #path ))] + end + ent:EmitSound( path, sndlevel, pitch, volume, channel ) + if CLIENT and IsFirstTimePredicted() then + if CAPTIONS[tag] then + local capt = CAPTIONS[tag] + AddCaption( capt.Name, capt.Color, capt.Text, capt.TypeTime, capt.LifeTime ) + else + MsgC( screwup, "No caption defined for " .. tag .. "\n" ) + end + end +end \ No newline at end of file diff --git a/gamemodes/benny/gamemode/modules/commons/sh_commons.lua b/gamemodes/benny/gamemode/modules/commons/sh_commons.lua index a0f2741..55c2f41 100644 --- a/gamemodes/benny/gamemode/modules/commons/sh_commons.lua +++ b/gamemodes/benny/gamemode/modules/commons/sh_commons.lua @@ -5,9 +5,6 @@ function UUID_generate() local str = "" for i=1, 8 do str = str .. UUID_chars[ math.random( 1, #UUID_chars ) ] - -- if (i%4==0 and i!=8) then - -- str = str .. "-" - -- end end return str end \ No newline at end of file diff --git a/gamemodes/benny/gamemode/modules/player/cl_hud.lua b/gamemodes/benny/gamemode/modules/player/cl_hud.lua index 8eb16a1..d99a999 100644 --- a/gamemodes/benny/gamemode/modules/player/cl_hud.lua +++ b/gamemodes/benny/gamemode/modules/player/cl_hud.lua @@ -50,11 +50,15 @@ local function genfonts() 12, } for _, size in pairs(sizes) do - surface.CreateFont( "Benny_Caption_" .. size, { - font = "Roboto", - size = ss(size), - weight = 0 - } ) + for i=1, 4 do + local add = i==1 and "" or i==2 and "B" or i==3 and "I" or i==4 and "BI" + local mode = i==1 and "" or i==2 and " Bold" or i==3 and " Italic" or i==4 and " Bold Italic" + surface.CreateFont( "Benny_Caption_" .. size .. add, { + font = "Roboto" .. mode, + size = ss(size), + weight = 0, + } ) + end end end genfonts() @@ -285,8 +289,9 @@ hook.Add( "HUDPaint", "Benny_HUDPaint", function() surface.SetDrawColor( color_caption ) surface.DrawRect( (sw/2) - (ss(8)+tw)/2, sh - space - ss(0), ss(8)+tw, ss(22)+ss(8*(#caption.lines-1)) ) + -- PROTO: Would be nice to be able to change italics or bold inline. for i, v in SortedPairsByMemberValue( caption.lines, "starttime" ) do - surface.SetFont("Benny_Caption_9") + surface.SetFont("Benny_Caption_9I") surface.SetTextColor( color_white ) surface.SetTextPos( (sw/2) - (tw/2), sh - space + ss(10) + (ss(8)*(i-1)) ) local waah = "" diff --git a/gamemodes/benny/gamemode/modules/player/sh_basic.lua b/gamemodes/benny/gamemode/modules/player/sh_basic.lua index 6a40c54..2ddb5ed 100644 --- a/gamemodes/benny/gamemode/modules/player/sh_basic.lua +++ b/gamemodes/benny/gamemode/modules/player/sh_basic.lua @@ -20,6 +20,8 @@ concommand.Add("benny_debug_give", function(ply, cmd, args) local class = WEAPONS[args[3]] + assert(class, "Invalid Class.") + local item = { Class = args[3], Ammo = class.Ammo, @@ -55,54 +57,61 @@ if CLIENT then end) end -CAPTIONS = { - ["1911.Fire"] = { - Name = "Cobra .45", - Color = color_white, - Text = "[Cobra .45 fire]", - TypeTime = 0.1, - LifeTime = 0.5, - }, - ["1911.Reload"] = { - Name = "Cobra .45", - Color = color_white, - Text = "[Cobra .45 reload]", - TypeTime = 0.1, - LifeTime = 0.5, - }, -} +if CLIENT then + local function regen_items( itemlist ) + local ply = LocalPlayer() + itemlist:Clear() --- CAPTIONS["en-us"] = {} --- CAPTIONS = CAPTIONS["en-us"] + for i, v in pairs( ply:INV_Get() ) do + local button = vgui.Create( "DButton" ) + itemlist:AddItem( button ) + button:SetSize( 1, ss(36) ) + button:Dock( TOP ) + button:DockMargin( 0, 0, 0, ss(4) ) -SOUNDS = {} + button.Text_ID = i + local Class = WEAPONS[v.Class] + button.Text_Name = Class.Name + button.Text_Desc = Class.Description -function AddSound( name, path, sndlevel, pitch, volume, channel ) - SOUNDS[name] = { - path = path, - sndlevel = sndlevel or 70, - pitch = pitch or 100, - volume = volume or 1, - channel = channel or CHAN_STATIC, - } -end + -- PROTO: This paint function doesn't need to be remade over and over like this. + function button:Paint( w, h ) + surface.SetDrawColor( schemes["benny"]["fg"] ) + surface.DrawRect( 0, 0, w, h ) + + surface.SetTextColor( schemes["benny"]["bg"] ) -local screwup = SERVER and Color(150, 255, 255) or Color(255, 200, 150) + surface.SetFont( "Benny_16" ) + surface.SetTextPos( ss(4), ss(4) ) + surface.DrawText( self.Text_Name ) -function B_Sound( ent, tag ) - local tagt = SOUNDS[tag] - if !tagt then MsgC( screwup, "Invalid sound " .. tag .. "\n" ) return end - local path, sndlevel, pitch, volume, channel = tagt.path, tagt.sndlevel, tagt.pitch, tagt.volume, tagt.channel - if istable( path ) then - path = path[math.Round(util.SharedRandom( "B_Sound", 1, #path ))] - end - ent:EmitSound( path, sndlevel, pitch, volume, channel ) - if CLIENT then - if CAPTIONS[tag] then - local capt = CAPTIONS[tag] - AddCaption( capt.Name, capt.Color, capt.Text, capt.TypeTime, capt.LifeTime ) - else - MsgC( screwup, "No caption defined for " .. tag .. "\n" ) + surface.SetFont( "Benny_10" ) + surface.SetTextPos( ss(4), ss(4 + 12) ) + surface.DrawText( self.Text_Desc ) + + surface.SetFont( "Benny_10" ) + surface.SetTextPos( ss(4), ss(4 + 20) ) + surface.DrawText( self.Text_ID ) + return true + end end end + concommand.Add("benny_debug_inv", function() + if IsValid( base ) then base:Remove() end + base = vgui.Create("DFrame") + base:SetSize( ss(340), ss(240) ) + base:MakePopup() + base:Center() + + function base:Paint( w, h ) + surface.SetDrawColor( schemes["benny"]["bg"] ) + surface.DrawRect( 0, 0, w, h ) + return true + end + + local itemlist = base:Add("DScrollPanel") + itemlist:Dock( FILL ) + + regen_items( itemlist ) + end) end \ No newline at end of file