mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 05:43:46 +03:00
Upload
This commit is contained in:
215
lua/includes/modules/killicon.lua
Normal file
215
lua/includes/modules/killicon.lua
Normal file
@@ -0,0 +1,215 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
-- Globals that we need
|
||||
local surface = surface
|
||||
local Msg = Msg
|
||||
local Color = Color
|
||||
local Material = Material
|
||||
|
||||
--[[---------------------------------------------------------
|
||||
Name: killicon
|
||||
Desc: Stores and serves killicons for deathnotice
|
||||
-----------------------------------------------------------]]
|
||||
module( "killicon" )
|
||||
|
||||
local Icons = {}
|
||||
local TYPE_FONT = 0
|
||||
local TYPE_MATERIAL = 1
|
||||
local TYPE_MATERIAL_UV = 2
|
||||
|
||||
function AddFont( name, font, character, color, heightScale )
|
||||
|
||||
Icons[name] = {
|
||||
type = TYPE_FONT,
|
||||
font = font,
|
||||
character = character,
|
||||
color = color or Color( 255, 80, 0 ),
|
||||
|
||||
-- Correct certain icons
|
||||
heightScale = heightScale
|
||||
}
|
||||
|
||||
end
|
||||
|
||||
function Add( name, material, color )
|
||||
|
||||
Icons[name] = {
|
||||
type = TYPE_MATERIAL,
|
||||
material = Material( material ),
|
||||
color = color or Color( 255, 255, 255 )
|
||||
}
|
||||
|
||||
end
|
||||
|
||||
function AddTexCoord( name, material, color, x, y, w, h )
|
||||
|
||||
Icons[name] = {
|
||||
type = TYPE_MATERIAL_UV,
|
||||
material = Material( material ),
|
||||
color = color,
|
||||
tex_x = x,
|
||||
tex_y = y,
|
||||
tex_w = w,
|
||||
tex_h = h
|
||||
}
|
||||
|
||||
end
|
||||
|
||||
function AddAlias( name, alias )
|
||||
|
||||
Icons[name] = Icons[alias]
|
||||
|
||||
end
|
||||
|
||||
function Exists( name )
|
||||
|
||||
return Icons[name] != nil
|
||||
|
||||
end
|
||||
|
||||
function GetSize( name, dontEqualizeHeight )
|
||||
|
||||
if ( !Icons[name] ) then
|
||||
Msg( "Warning: killicon not found '" .. name .. "'\n" )
|
||||
Icons[name] = Icons["default"]
|
||||
end
|
||||
|
||||
local t = Icons[name]
|
||||
|
||||
-- Check the cache
|
||||
if ( t.size ) then
|
||||
|
||||
-- Maintain the old behavior
|
||||
if ( !dontEqualizeHeight ) then return t.size.adj_w, t.size.adj_h end
|
||||
|
||||
return t.size.w, t.size.h
|
||||
end
|
||||
|
||||
local w, h = 0, 0
|
||||
|
||||
if ( t.type == TYPE_FONT ) then
|
||||
|
||||
surface.SetFont( t.font )
|
||||
w, h = surface.GetTextSize( t.character )
|
||||
|
||||
if ( t.heightScale ) then h = h * t.heightScale end
|
||||
|
||||
elseif ( t.type == TYPE_MATERIAL ) then
|
||||
|
||||
w, h = t.material:Width(), t.material:Height()
|
||||
|
||||
elseif ( t.type == TYPE_MATERIAL_UV ) then
|
||||
|
||||
w = t.tex_w
|
||||
h = t.tex_h
|
||||
|
||||
end
|
||||
|
||||
t.size = {}
|
||||
t.size.w = w or 32
|
||||
t.size.h = h or 32
|
||||
|
||||
-- Height adjusted behavior
|
||||
if ( t.type == TYPE_FONT ) then
|
||||
t.size.adj_w, t.size.adj_h = surface.GetTextSize( t.character )
|
||||
-- BUG: This is not same height as the texture icons, and we cannot change it beacuse backwards compability
|
||||
else
|
||||
surface.SetFont( "HL2MPTypeDeath" )
|
||||
local _, fh = surface.GetTextSize( "0" )
|
||||
fh = fh * 0.75 -- Fudge it slightly
|
||||
|
||||
-- Resize, maintaining aspect ratio
|
||||
t.size.adj_w = w * ( fh / h )
|
||||
t.size.adj_h = fh
|
||||
end
|
||||
|
||||
-- Maintain the old behavior
|
||||
if ( !dontEqualizeHeight ) then return t.size.adj_w, t.size.adj_h end
|
||||
|
||||
return w, h
|
||||
|
||||
end
|
||||
|
||||
local function DrawInternal( x, y, name, alpha, noCorrections, dontEqualizeHeight )
|
||||
|
||||
alpha = alpha or 255
|
||||
|
||||
if ( !Icons[name] ) then
|
||||
Msg( "Warning: killicon not found '" .. name .. "'\n" )
|
||||
Icons[name] = Icons["default"]
|
||||
end
|
||||
|
||||
local t = Icons[name]
|
||||
|
||||
local w, h = GetSize( name, dontEqualizeHeight )
|
||||
|
||||
if ( !noCorrections ) then x = x - w * 0.5 end
|
||||
|
||||
if ( t.type == TYPE_FONT ) then
|
||||
|
||||
-- HACK: Default font killicons are anchored to the top, so correct for it
|
||||
if ( noCorrections && !dontEqualizeHeight ) then
|
||||
local _, h2 = GetSize( name, !dontEqualizeHeight )
|
||||
y = y + ( h - h2 ) / 2
|
||||
end
|
||||
|
||||
if ( !noCorrections ) then y = y - h * 0.1 end
|
||||
|
||||
surface.SetTextPos( x, y )
|
||||
surface.SetFont( t.font )
|
||||
surface.SetTextColor( t.color.r, t.color.g, t.color.b, alpha )
|
||||
surface.DrawText( t.character )
|
||||
|
||||
end
|
||||
|
||||
if ( t.type == TYPE_MATERIAL ) then
|
||||
|
||||
if ( !noCorrections ) then y = y - h * 0.3 end
|
||||
|
||||
surface.SetMaterial( t.material )
|
||||
surface.SetDrawColor( t.color.r, t.color.g, t.color.b, alpha )
|
||||
surface.DrawTexturedRect( x, y, w, h )
|
||||
|
||||
end
|
||||
|
||||
if ( t.type == TYPE_MATERIAL_UV ) then
|
||||
|
||||
if ( !noCorrections ) then y = y - h * 0.3 end
|
||||
|
||||
local tw = t.material:Width()
|
||||
local th = t.material:Height()
|
||||
surface.SetMaterial( t.material )
|
||||
surface.SetDrawColor( t.color.r, t.color.g, t.color.b, alpha )
|
||||
surface.DrawTexturedRectUV( x, y, w, h, t.tex_x / tw, t.tex_y / th, ( t.tex_x + t.tex_w ) / tw, ( t.tex_y + t.tex_h ) / th )
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
-- Old function with weird vertical adjustments
|
||||
function Draw( x, y, name, alpha )
|
||||
|
||||
DrawInternal( x, y, name, alpha )
|
||||
|
||||
end
|
||||
|
||||
-- The new function that doesn't have the weird vertical adjustments
|
||||
function Render( x, y, name, alpha, dontEqualizeHeight )
|
||||
|
||||
DrawInternal( x, y, name, alpha, true, dontEqualizeHeight )
|
||||
|
||||
end
|
||||
|
||||
local Color_Icon = Color( 255, 80, 0, 255 )
|
||||
|
||||
Add( "default", "HUD/killicons/default", Color_Icon )
|
||||
AddAlias( "suicide", "default" )
|
||||
Reference in New Issue
Block a user