--[[ | 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/ --]] DEFINE_BASECLASS("EditablePanel") local PANEL = {} function PANEL:Init() end function PANEL:SetText(text) self.text = text self:Clear() -- Some calculations local temp = self:Add("DLabel") temp:SetText(self.text) temp:SetFont("SmallerTitleFontNoBoldNoClampLessWeight") temp:Dock(TOP) temp:SetContentAlignment(5) temp:SizeToContents() temp:SetVisible(false) surface.SetFont("SmallerTitleFontNoBoldNoClampLessWeight") local tempW, _ = surface.GetTextSize(self.text) local textWidth = tempW local letterCount = string.len(text) local letterChunks = math.floor(letterCount / (textWidth / self.width) - SScaleMin(10 / 3)) local iters = math.ceil(letterCount / letterChunks) local _, replaces = text:gsub("\\n", "\n") -- Add new line breaks iters = iters + replaces -- Split string into lines self.height = 0 local last = 1 local lines = 1 for i = 1, iters do local part = text:sub(last, last + letterChunks - 1) local lastSpace = 0 local len = string.len(part) local startStr = string.find(part, "\\n") if startStr then lastSpace = startStr - 1 last = last + 2 end if lastSpace == 0 then -- Finding last space for i2 = 1, len do if part:find(" ", -i2) then lastSpace = ((len - i2) + 1) break end end end if lastSpace > 0 and i ~= iters then last = last + lastSpace part = part:sub(1, lastSpace) else last = last + letterChunks end local line = self:Add("DLabel") line:SetText(part) line:SetFont("SmallerTitleFontNoBoldNoClampLessWeight") line:Dock(TOP) line:SetContentAlignment(5) line:SizeToContents() line:SetTextColor(self.color or color_white) lines = lines + 1 self.height = self.height + line:GetTall() end self:SetSize(self.width, self.height) return self.width, self.height, lines - 1 end vgui.Register("ixCenterWrappedText", PANEL, "Panel") PANEL = {} function PANEL:Init() if (IsValid(ix.gui.intro)) then ix.gui.intro:Remove() end ix.gui.intro = self self:SetSize(ScrW(), ScrH()) self:SetPos(0, 0) self:SetZPos(99999) self:MakePopup() self.volume = 1 self.backgroundPanel = self:Add("Panel") self.backgroundPanel:SetSize(self:GetSize()) self.backgroundPanel.Paint = function(this, w, h) surface.SetDrawColor(0, 0, 0, 255) surface.DrawRect(0, 0, w, h) end self.firstText = self.backgroundPanel:Add("DLabel") self.firstText:SetText("Echo One - Willard Networks HL2RP") self.firstText:SetFont("WNSmallerMenuTitleNoBold") self.firstText:SizeToContents() self.firstText:SetAlpha(0) self.firstText:Center() local sText = ix.config.Get("IntroTextLong", "") self.secondText = self.backgroundPanel:Add("ixCenterWrappedText") self.secondText.width = ScrW() / 2 self.secondText:SetText(sText) self.secondText:Center() self.secondText:SetY(self.secondText:GetY() - SScaleMin(25 / 3)) self.secondText:SetAlpha(0) if sText == "" then timer.Simple(10, function() if IsValid(self.secondText) then self.secondText:SetText(ix.config.Get("IntroTextLong", "")) self.secondText:Center() self.secondText:SetY(self.secondText:GetY() - SScaleMin(25 / 3)) self.continueText:Center() self.continueText:SetY(self.continueText:GetY() + self.secondText:GetTall() / 2 + SScaleMin(25 / 3)) end end) end self.continueText = self.backgroundPanel:Add("DLabel") self.continueText:SetText("Appuyez sur ESPACE pour continuer") self.continueText:SetFont("CharCreationBoldTitle") self.continueText:SizeToContents() self.continueText:SetAlpha(0) self.continueText:Center() self.continueText:SetY(self.continueText:GetY() + self.secondText:GetTall() / 2 + SScaleMin(25 / 3)) self:SetTimers() end function PANEL:SetTimers() timer.Simple(8, function() -- 8 self.firstText:AlphaTo( 255, 3, 0 ) end) timer.Simple(11, function() -- 11 self.firstText:AlphaTo( 0, 3, 0 ) end) timer.Simple(14, function() -- 14 self.secondText:AlphaTo( 255, 3, 0 ) end) timer.Simple(17, function() -- 17 self.continueText:AlphaTo( 255, 1, 0 ) end) end -- @todo h a c k function PANEL:Think() if (IsValid(LocalPlayer())) then self:BeginIntro() self.Think = nil end end function PANEL:BeginIntro() -- something could have errored on startup and invalidated all options, so we'll be extra careful with setting the option -- because if it errors here, the sound will play each tick and proceed to hurt ears local bLoaded = false if (ix and ix.option and ix.option.Set) then local bSuccess, _ = pcall(ix.option.Set, "showIntro", true) bLoaded = bSuccess end if (!bLoaded) then self:Remove() if (ix and ix.gui and IsValid(ix.gui.characterMenu)) then ix.gui.characterMenu:Remove() end ErrorNoHalt( "[Helix] Something has errored and prevented the framework from loading correctly - check your console for errors!\n") return end self:MoveToFront() self:RequestFocus() sound.PlayFile("sound/buttons/combine_button2.wav", "", function() timer.Create("ixIntroStart", 2, 1, function() sound.PlayFile("sound/willardnetworks/intro.mp3", "", function(channel, status, error) if (IsValid(channel)) then channel:SetVolume(self.volume) self.channel = channel end end) end) end) end function PANEL:OnKeyCodePressed(key) if (key == KEY_SPACE and self.continueText:GetAlpha() == 255) then self:Remove() end end function PANEL:OnRemove() timer.Remove("ixIntroStart") if (IsValid(self.channel)) then self.channel:Stop() end if (IsValid(ix.gui.characterMenu)) then ix.gui.characterMenu:PlayMusic() end end function PANEL:Remove(bForce) if (bForce) then BaseClass.Remove(self) return end if (self.bClosing) then return end self.bClosing = true self.bBackground = nil self.backgroundPanel:AlphaTo( 0, 2, 0 ) self.continueText:AlphaTo( 0, 2, 0 ) -- audio self:CreateAnimation(2, { index = 1, target = {volume = 0}, Think = function(anim, panel) if (IsValid(panel.channel)) then panel.channel:SetVolume(panel.volume) end end, OnComplete = function() timer.Simple(0, function() BaseClass.Remove(self) end) end }) end vgui.Register("ixIntro", PANEL, "EditablePanel")