Initial Commit
This commit is contained in:
151
gamemode/core/cl_notifications.lua
Normal file
151
gamemode/core/cl_notifications.lua
Normal file
@@ -0,0 +1,151 @@
|
||||
-- ####################################################################################
|
||||
-- ## ##
|
||||
-- ## ##
|
||||
-- ## CASUAL BANANAS CONFIDENTIAL ##
|
||||
-- ## ##
|
||||
-- ## __________________________ ##
|
||||
-- ## ##
|
||||
-- ## ##
|
||||
-- ## Copyright 2014 (c) Casual Bananas ##
|
||||
-- ## All Rights Reserved. ##
|
||||
-- ## ##
|
||||
-- ## NOTICE: All information contained herein is, and remains ##
|
||||
-- ## the property of Casual Bananas. The intellectual and technical ##
|
||||
-- ## concepts contained herein are proprietary to Casual Bananas and may be ##
|
||||
-- ## covered by U.S. and Foreign Patents, patents in process, and are ##
|
||||
-- ## protected by trade secret or copyright law. ##
|
||||
-- ## Dissemination of this information or reproduction of this material ##
|
||||
-- ## is strictly forbidden unless prior written permission is obtained ##
|
||||
-- ## from Casual Bananas ##
|
||||
-- ## ##
|
||||
-- ## _________________________ ##
|
||||
-- ## ##
|
||||
-- ## ##
|
||||
-- ## Casual Bananas is registered with the "Kamer van Koophandel" (Dutch ##
|
||||
-- ## chamber of commerce) in The Netherlands. ##
|
||||
-- ## ##
|
||||
-- ## Company (KVK) number : 59449837 ##
|
||||
-- ## Email : info@casualbananas.com ##
|
||||
-- ## ##
|
||||
-- ## ##
|
||||
-- ####################################################################################
|
||||
|
||||
|
||||
local NoticeMaterial = {}
|
||||
NoticeMaterial[ NOTIFY_GENERIC ] = Material( "vgui/notices/generic" )
|
||||
NoticeMaterial[ NOTIFY_ERROR ] = Material( "vgui/notices/error" )
|
||||
NoticeMaterial[ NOTIFY_UNDO ] = Material( "vgui/notices/undo" )
|
||||
NoticeMaterial[ NOTIFY_HINT ] = Material( "vgui/notices/hint" )
|
||||
NoticeMaterial[ NOTIFY_CLEANUP ] = Material( "vgui/notices/cleanup" )
|
||||
|
||||
local Notices = {}
|
||||
local activeNotice = nil;
|
||||
|
||||
local function queueNotification(text,type)
|
||||
table.insert(Notices,{text=text,type=type});
|
||||
JB:DebugPrint("Notification: "..text);
|
||||
end
|
||||
|
||||
local function createNotice(key)
|
||||
local pnl = vgui.Create("JBNoticePanel");
|
||||
pnl.key = key;
|
||||
pnl.text = Notices[key].text;
|
||||
|
||||
local t = Notices[key].type;
|
||||
pnl.icon = NoticeMaterial[ t ];
|
||||
pnl.type = t == NOTIFY_GENERIC and "NOTICE" or t == NOTIFY_ERROR and "ERROR" or t == NOTIFY_UNDO and "OBJECTIVE" or t == NOTIFY_HINT and "HINT" or "NOTICE";
|
||||
|
||||
activeNotice = pnl;
|
||||
end
|
||||
|
||||
hook.Add("Think","JB.Think.UpdateNotifications", function()
|
||||
if IsValid(activeNotice) then
|
||||
activeNotice:Update();
|
||||
|
||||
if activeNotice:IsDone() then
|
||||
table.remove(Notices,activeNotice.key);
|
||||
activeNotice:Remove();
|
||||
|
||||
local key = table.GetFirstKey(Notices);
|
||||
if key then
|
||||
createNotice(key);
|
||||
end
|
||||
end
|
||||
elseif table.GetFirstKey(Notices) then
|
||||
createNotice(table.GetFirstKey(Notices));
|
||||
end
|
||||
end)
|
||||
|
||||
local state_expand,state_show,state_die = 1,2,3;
|
||||
local bracket = Material("materials/jailbreak_excl/notify_bracket.png");
|
||||
local bracket_wide = 16;
|
||||
local bracket_tall = 64;
|
||||
vgui.Register("JBNoticePanel",{
|
||||
Init = function(self)
|
||||
self.timeStateStart = SysTime();
|
||||
self.text = "Undefined";
|
||||
self.icon = NoticeMaterial[ NOTIFY_GENERIC ];
|
||||
self.type = NOTIFY_GENERIC;
|
||||
self.state = state_expand;
|
||||
self.colorText = Color(255,255,255,0);
|
||||
self.colorBrackets = Color(255,255,255,0);
|
||||
self.distanceBrackets = 0;
|
||||
|
||||
self:SetSize(1,bracket_tall);
|
||||
end,
|
||||
Update = function(self)
|
||||
surface.SetFont("JBLarge");
|
||||
local wide = surface.GetTextSize(self.text);
|
||||
local mul=FrameTime() * 60;
|
||||
if self.state == state_expand then
|
||||
local distance_max = (wide+16);
|
||||
|
||||
self.distanceBrackets = math.Clamp(math.ceil(Lerp(0.05 * mul,self.distanceBrackets,distance_max + 1)), self.distanceBrackets, distance_max);
|
||||
self.colorBrackets.a = math.Clamp(math.ceil(Lerp(0.1 * mul,self.colorBrackets.a,256)), self.colorBrackets.a, 255);
|
||||
self.colorText.a = math.Clamp(math.ceil(Lerp(0.05 * mul,self.colorText.a,256)), self.colorText.a, 255);
|
||||
|
||||
if self.distanceBrackets >= distance_max and self.colorText.a >= 255 and self.colorBrackets.a >= 255 then
|
||||
self.state = state_show;
|
||||
self.timeStateStart = SysTime();
|
||||
end
|
||||
elseif self.state == state_show then
|
||||
if SysTime() > self.timeStateStart + .8 then
|
||||
self.state = state_die;
|
||||
self.timeStateStart = SysTime();
|
||||
end
|
||||
elseif self.state == state_die then
|
||||
if self.colorText.a < 100 then
|
||||
self.distanceBrackets = math.Clamp(math.floor(Lerp(0.15 * mul,self.distanceBrackets,-1)), 0, self.distanceBrackets);
|
||||
self.colorBrackets.a = math.Clamp(math.floor(Lerp(0.15 * mul,self.colorBrackets.a,-1)), 0, self.colorBrackets.a);
|
||||
end
|
||||
self.colorText.a = math.Clamp(math.floor(Lerp(0.2 * mul,self.colorText.a,-1)), 0, self.colorText.a);
|
||||
end
|
||||
|
||||
self:SetWide(self.distanceBrackets + (bracket_wide * 2));
|
||||
self:SetPos(ScrW()/2 - self:GetWide()/2, ScrH()/10 * 3);
|
||||
end,
|
||||
Paint = function(self,w,h)
|
||||
surface.SetDrawColor(self.colorBrackets);
|
||||
surface.SetMaterial(bracket);
|
||||
surface.DrawTexturedRectRotated(w/2 - bracket_wide/2 - self.distanceBrackets/2, h/2, bracket_wide, bracket_tall, 0) -- left bracket
|
||||
surface.DrawTexturedRectRotated(w/2 + bracket_wide/2 + self.distanceBrackets/2, h/2, bracket_wide, bracket_tall, 180) -- right bracket
|
||||
|
||||
draw.SimpleText(self.type,"JBSmall",math.Round(w/2),8,self.colorText,1,0);
|
||||
draw.SimpleText(self.text,"JBLarge",math.Round(w/2),h/2 + 6, self.colorText,1,1);
|
||||
end,
|
||||
IsDone = function(self)
|
||||
return (self.state == state_die and self.distanceBrackets <= 0 );
|
||||
end,
|
||||
},"Panel");
|
||||
|
||||
net.Receive("JB.SendNotification",function()
|
||||
queueNotification(net.ReadString(),NOTIFY_GENERIC);
|
||||
end);
|
||||
|
||||
-- this is what I can "legacy support" :V
|
||||
function notification.AddProgress() end
|
||||
function notification.Kill() end
|
||||
function notification.Die() end
|
||||
notification.AddLegacy = queueNotification;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user