mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
165
lua/tfa/modules/cl_tfa_attachment_icon.lua
Normal file
165
lua/tfa/modules/cl_tfa_attachment_icon.lua
Normal file
@@ -0,0 +1,165 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
-- Copyright (c) 2018-2020 TFA Base Devs
|
||||
|
||||
-- Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
-- of this software and associated documentation files (the "Software"), to deal
|
||||
-- in the Software without restriction, including without limitation the rights
|
||||
-- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
-- copies of the Software, and to permit persons to whom the Software is
|
||||
-- furnished to do so, subject to the following conditions:
|
||||
|
||||
-- The above copyright notice and this permission notice shall be included in all
|
||||
-- copies or substantial portions of the Software.
|
||||
|
||||
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
-- SOFTWARE.
|
||||
|
||||
local padding = TFA.Attachments.UIPadding
|
||||
local PANEL = {}
|
||||
PANEL.Wep = nil
|
||||
PANEL.ID = nil
|
||||
PANEL.Att = nil --Weapon attachment
|
||||
PANEL.Attachment = nil --Actual TFA attachment table
|
||||
|
||||
function PANEL:Init()
|
||||
self.Wep = nil --Weapon Entity
|
||||
self.ID = nil --Attachment ID
|
||||
self.Att = nil --Attachment Category
|
||||
self.Attachment = nil --TFA Attachment Name
|
||||
self:SetMouseInputEnabled(true)
|
||||
self:SetZPos( 500 )
|
||||
end
|
||||
|
||||
function PANEL:SetWeapon(wep)
|
||||
if IsValid(wep) then
|
||||
self.Wep = wep
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:SetGunAttachment(att)
|
||||
if att ~= nil then
|
||||
self.Att = att
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:SetAttachment(att)
|
||||
self.Attachment = att
|
||||
end
|
||||
|
||||
function PANEL:SetID(id)
|
||||
if id ~= nil then
|
||||
self.ID = id
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:GetSelected()
|
||||
if not IsValid(self.Wep) then return false end
|
||||
if not self.Att then return end
|
||||
if not self.ID then return end
|
||||
if not self.Wep.Attachments[self.Att] then return end
|
||||
|
||||
return self.Wep.Attachments[self.Att].sel == self.ID
|
||||
end
|
||||
|
||||
function PANEL:AttachSound( attached )
|
||||
if self.Attachment and TFA.Attachments.Atts[self.Attachment] then
|
||||
local att = TFA.Attachments.Atts[self.Attachment]
|
||||
|
||||
local snd = attached and att.AttachSound or att.DetachSound
|
||||
|
||||
if snd and IsValid(self.Wep) then
|
||||
self.Wep:EmitSound(snd)
|
||||
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
chat.PlaySound()
|
||||
end
|
||||
|
||||
function PANEL:OnMousePressed()
|
||||
if not IsValid(self.Wep) or ( not self.Attachment ) or self.Attachment == "" then return end
|
||||
|
||||
if self:GetSelected() then
|
||||
self.Wep:SetTFAAttachment( self.Att, -1, true )
|
||||
self:AttachSound( false )
|
||||
elseif self.Wep.Attachments[self.Att] and self.Wep:CanAttach(self.Attachment) then
|
||||
self.Wep:SetTFAAttachment( self.Att, self.ID, true )
|
||||
self:AttachSound( true )
|
||||
end
|
||||
end
|
||||
|
||||
local function abbrev( str )
|
||||
local tbl = string.Explode(" ",str,false)
|
||||
local retstr = ""
|
||||
for k,v in ipairs(tbl) do
|
||||
local tmpstr = utf8.sub(v,1,1)
|
||||
retstr = retstr .. ( ( k == 1 ) and string.upper( tmpstr ) or string.lower( tmpstr ) )
|
||||
end
|
||||
return retstr
|
||||
end
|
||||
|
||||
function PANEL:Paint(w, h)
|
||||
if not IsValid(self.Wep) then return end
|
||||
if self.Attachment == nil then return end
|
||||
if not TFA.Attachments.Atts[self.Attachment] then self:SetMouseInputEnabled(false) return end
|
||||
local sel = self:GetSelected()
|
||||
local col = sel and TFA.Attachments.Colors["active"] or TFA.Attachments.Colors["background"]
|
||||
|
||||
if not sel and not self.Wep:CanAttach(self.Attachment) then
|
||||
col = TFA.Attachments.Colors["error"]
|
||||
end
|
||||
|
||||
draw.RoundedBox(0, 0, 0, w, h, ColorAlpha( col, self.Wep:GetInspectingProgress() * 225))
|
||||
|
||||
if not TFA.Attachments.Atts[self.Attachment].Icon then
|
||||
TFA.Attachments.Atts[self.Attachment].Icon = "entities/tfa_qmark.png"
|
||||
end
|
||||
|
||||
if not TFA.Attachments.Atts[self.Attachment].Icon_Cached then
|
||||
TFA.Attachments.Atts[self.Attachment].Icon_Cached = Material( TFA.Attachments.Atts[self.Attachment].Icon, "noclamp smooth" )
|
||||
end
|
||||
|
||||
local attachmentIcon = TFA.Attachments.Atts[self.Attachment].Icon_Cached
|
||||
|
||||
local iconOverride = self.Wep:GetStat("AttachmentIconOverride." .. self.Attachment)
|
||||
if iconOverride and type(iconOverride) == "IMaterial" then
|
||||
attachmentIcon = iconOverride
|
||||
end
|
||||
|
||||
surface.SetDrawColor(ColorAlpha(color_white, self.Wep:GetInspectingProgress() * 255))
|
||||
surface.SetMaterial(attachmentIcon)
|
||||
surface.DrawTexturedRect(padding, padding, w - padding * 2, h - padding * 2)
|
||||
if not TFA.Attachments.Atts[self.Attachment].ShortName then
|
||||
TFA.Attachments.Atts[self.Attachment].ShortName = abbrev( language.GetPhrase(TFA.Attachments.Atts[self.Attachment].Name) or "")
|
||||
TFA.Attachments.Atts[self.Attachment].ShortNameGenerated = true
|
||||
end
|
||||
draw.SimpleText( string.upper( TFA.Attachments.Atts[self.Attachment].ShortName ) , "TFAAttachmentIconFontTiny", padding / 4, h, ColorAlpha(TFA.Attachments.Colors["primary"], self.Wep:GetInspectingProgress() * ( sel and 192 or 64 ) ), TEXT_ALIGN_LEFT, TEXT_ALIGN_BOTTOM)
|
||||
end
|
||||
|
||||
vgui.Register("TFAAttachmentIcon", PANEL, "Panel")
|
||||
|
||||
-- cleanup generated shortnames
|
||||
cvars.AddChangeCallback("gmod_language", function()
|
||||
for id, att in pairs(TFA.Attachments.Atts or {}) do
|
||||
if att.ShortNameGenerated then
|
||||
att.ShortName = nil
|
||||
att.ShortNameGenerated = nil
|
||||
end
|
||||
end
|
||||
end, "tfa_attachment_clearshortnames")
|
||||
Reference in New Issue
Block a user