Advertisement
Guest User

Untitled

a guest
Mar 28th, 2015
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.55 KB | None | 0 0
  1. CreateClientConVar("zs_bossclass", "", true, true)
  2.  
  3. local Window
  4. local HoveredClassWindow
  5.  
  6. local function CreateHoveredClassWindow(classtable)
  7. if HoveredClassWindow and HoveredClassWindow:Valid() then
  8. HoveredClassWindow:Remove()
  9. end
  10.  
  11. HoveredClassWindow = vgui.Create("ClassInfo")
  12. HoveredClassWindow:SetSize(ScrW() * 0.5, 128)
  13. HoveredClassWindow:CenterHorizontal()
  14. HoveredClassWindow:MoveBelow(Window, 32)
  15. HoveredClassWindow:SetClassTable(classtable)
  16. end
  17.  
  18. function GM:OpenClassSelect(bossmode)
  19. if Window and Window:Valid() then Window:Remove() end
  20.  
  21. Window = vgui.Create(bossmode and "ClassSelectBoss" or "ClassSelect")
  22. Window:SetSize(ScrW(), 480)
  23. Window:Center()
  24.  
  25. Window:SetAlpha(0)
  26. Window:AlphaTo(255, 0.75)
  27.  
  28. Window:MakePopup()
  29.  
  30. PlayMenuOpenSound()
  31. end
  32.  
  33. local PANEL = {}
  34.  
  35. local function BossTypeDoClick(self)
  36. GAMEMODE:OpenClassSelect(true)
  37. end
  38.  
  39. function PANEL:Init()
  40. self.ClassButtons = {}
  41.  
  42. for i = 1, #GAMEMODE.ZombieClasses do
  43. local classtab = GAMEMODE.ZombieClasses[i]
  44. if classtab and not classtab.Hidden or classtab.CanUse and classtab:CanUse(MySelf) then
  45. local button = vgui.Create("ClassButton", self)
  46. button:SetClassTable(classtab)
  47.  
  48. table.insert(self.ClassButtons, button)
  49. end
  50. end
  51.  
  52. local button = EasyButton(self, "Select your desired boss class...", 8, 4)
  53. self.ClassTypeButton = button
  54. button.DoClick = BossTypeDoClick
  55.  
  56. self:InvalidateLayout()
  57. end
  58.  
  59. function PANEL:PerformLayout()
  60. local NumButtonRow = 8
  61. local NumButtonTotal = #self.ClassButtons
  62. local NumButtonRemainder = NumButtonTotal % NumButtonRow
  63. local SpacingHorizontal = self:GetWide() / NumButtonRow
  64. local SpacingHorizontalRem = self:GetWide() / NumButtonRemainder
  65. local SpacingVertical = self:GetTall()/ math.max(1, math.ceil(NumButtonTotal/NumButtonRow))
  66.  
  67. for i, classbutton in ipairs(self.ClassButtons) do
  68. if((NumButtonTotal - i) >= NumButtonRemainder) then
  69. classbutton:SetSize(SpacingHorizontal, SpacingVertical)
  70. classbutton:SetPos(((i-1) % NumButtonRow) * SpacingHorizontal + SpacingHorizontal * 0.5 - classbutton:GetWide() * 0.5, SpacingVertical * math.floor(i/(NumButtonRow + 1)))
  71. else
  72. classbutton:SetSize(SpacingHorizontalRem, SpacingVertical)
  73. classbutton:SetPos(((i-1) % NumButtonRow) * SpacingHorizontalRem + SpacingHorizontalRem * 0.5 - classbutton:GetWide() * 0.5, SpacingVertical * math.floor(i/(NumButtonRow + 1)))
  74. end
  75. end
  76.  
  77. self.ClassTypeButton:AlignLeft(4)
  78. self.ClassTypeButton:AlignTop(4)
  79.  
  80. end
  81.  
  82.  
  83. local texUpEdge = surface.GetTextureID("gui/gradient_up")
  84. local texDownEdge = surface.GetTextureID("gui/gradient_down")
  85. function PANEL:Paint()
  86. local wid, hei = self:GetSize()
  87. local edgesize = 32
  88.  
  89. DisableClipping(true)
  90. surface.SetDrawColor(color_black_alpha220)
  91. surface.DrawRect(0, 0, wid, hei)
  92. surface.SetTexture(texUpEdge)
  93. surface.DrawTexturedRect(0, -edgesize, wid, edgesize)
  94. surface.SetTexture(texDownEdge)
  95. surface.DrawTexturedRect(0, hei, wid, edgesize)
  96. DisableClipping(false)
  97.  
  98. return true
  99. end
  100.  
  101. vgui.Register("ClassSelect", PANEL, "Panel")
  102.  
  103. local PANEL = {}
  104.  
  105. local function ClassTypeDoClick(self)
  106. GAMEMODE:OpenClassSelect(false)
  107. end
  108.  
  109. function PANEL:Init()
  110. self.ClassButtons = {}
  111.  
  112. for i = 1, #GAMEMODE.ZombieClasses do
  113. local classtab = GAMEMODE.ZombieClasses[i]
  114. if classtab and classtab.Boss then
  115. local button = vgui.Create("ClassButton", self)
  116. button:SetClassTable(classtab)
  117.  
  118. table.insert(self.ClassButtons, button)
  119. end
  120. end
  121.  
  122. local button = EasyButton(self, "Back to normal zombie class menu...", 8, 4)
  123. self.ClassTypeButton = button
  124. button.DoClick = ClassTypeDoClick
  125.  
  126. self:InvalidateLayout()
  127. end
  128.  
  129. function PANEL:PerformLayout()
  130. local NumButtonRow = 8
  131. local NumButtonTotal = #self.ClassButtons
  132. local NumButtonRemainder = NumButtonTotal % NumButtonRow
  133. local SpacingHorizontal = self:GetWide() / NumButtonRow
  134. local SpacingHorizontalRem = self:GetWide() / NumButtonRemainder
  135. local SpacingVertical = self:GetTall()/ math.max(1, math.ceil(NumButtonTotal/NumButtonRow))
  136.  
  137. for i, classbutton in ipairs(self.ClassButtons) do
  138. if((NumButtonTotal - i) >= NumButtonRemainder) then
  139. classbutton:SetSize(SpacingHorizontal, SpacingVertical)
  140. classbutton:SetPos(((i-1) % NumButtonRow) * SpacingHorizontal + SpacingHorizontal * 0.5 - classbutton:GetWide() * 0.5, SpacingVertical * math.floor(i/(NumButtonRow + 1)))
  141. else
  142. classbutton:SetSize(SpacingHorizontalRem, SpacingVertical)
  143. classbutton:SetPos(((i-1) % NumButtonRow) * SpacingHorizontalRem + SpacingHorizontalRem * 0.5 - classbutton:GetWide() * 0.5, SpacingVertical * math.floor(i/(NumButtonRow + 1)))
  144. end
  145. end
  146.  
  147. self.ClassTypeButton:AlignLeft(4)
  148. self.ClassTypeButton:AlignTop(4)
  149.  
  150. end
  151.  
  152. function PANEL:Paint()
  153. local wid, hei = self:GetSize()
  154. local edgesize = 32
  155.  
  156. DisableClipping(true)
  157. surface.SetDrawColor(color_black_alpha220)
  158. surface.DrawRect(0, 0, wid, hei)
  159. surface.SetTexture(texUpEdge)
  160. surface.DrawTexturedRect(0, -edgesize, wid, edgesize)
  161. surface.SetTexture(texDownEdge)
  162. surface.DrawTexturedRect(0, hei, wid, edgesize)
  163. DisableClipping(false)
  164. end
  165.  
  166. vgui.Register("ClassSelectBoss", PANEL, "Panel")
  167.  
  168. local PANEL = {}
  169.  
  170. function PANEL:Init()
  171. self.NameLabel = vgui.Create("DLabel", self)
  172. self.NameLabel:SetFont("ZSHUDFontSmall")
  173. self.NameLabel:SetAlpha(255)
  174. self.Image = vgui.Create("DImage", self)
  175.  
  176. self:InvalidateLayout()
  177. end
  178.  
  179. function PANEL:PerformLayout()
  180. local imgsize = math.min(self:GetWide(), self:GetTall()) * 0.75
  181. self.Image:SetSize(imgsize, imgsize)
  182. self.Image:Center()
  183.  
  184. self.NameLabel:SizeToContents()
  185. self.NameLabel:CenterHorizontal()
  186. self.NameLabel:AlignBottom()
  187. end
  188.  
  189. function PANEL:SetClassTable(classtable)
  190. self.ClassTable = classtable
  191.  
  192. self.NameLabel:SetText(translate.Get(classtable.TranslationName))
  193. self.Image:SetImage(classtable.Icon)
  194.  
  195. self:InvalidateLayout()
  196. end
  197.  
  198. function PANEL:Paint()
  199. return true
  200. end
  201.  
  202. function PANEL:OnCursorEntered()
  203. self.NameLabel:SetAlpha(255)
  204.  
  205. CreateHoveredClassWindow(self.ClassTable)
  206. end
  207.  
  208. function PANEL:OnCursorExited()
  209. self.NameLabel:SetAlpha(180)
  210.  
  211. if HoveredClassWindow and HoveredClassWindow:Valid() and HoveredClassWindow.ClassTable == self.ClassTable then
  212. HoveredClassWindow:Remove()
  213. end
  214. end
  215.  
  216. function PANEL:DoClick()
  217. if self.ClassTable then
  218. if self.ClassTable.Boss then
  219. RunConsoleCommand("zs_bossclass", self.ClassTable.Name)
  220. GAMEMODE:CenterNotify(translate.Format("boss_class_select", self.ClassTable.Name))
  221. else
  222. RunConsoleCommand("zs_class", self.ClassTable.Name)
  223. end
  224. end
  225.  
  226. surface.PlaySound("buttons/button15.wav")
  227.  
  228. Window:Remove()
  229. end
  230.  
  231. function PANEL:Think()
  232. if not self.ClassTable then return end
  233.  
  234. local enabled = LocalPlayer():GetZombieClass() == self.ClassTable.Index and 2 or gamemode.Call("IsClassUnlocked", self.ClassTable.Index) and 1 or 0
  235. if enabled ~= self.LastEnabledState then
  236. self.LastEnabledState = enabled
  237.  
  238. if enabled == 2 then
  239. self.NameLabel:SetTextColor(COLOR_GREEN)
  240. self.Image:SetImageColor(color_white)
  241. elseif enabled == 1 then
  242. self.NameLabel:SetTextColor(COLOR_GRAY)
  243. self.Image:SetImageColor(color_white)
  244. else
  245. self.NameLabel:SetTextColor(COLOR_DARKRED)
  246. self.Image:SetImageColor(COLOR_RED)
  247. end
  248. end
  249. end
  250.  
  251. vgui.Register("ClassButton", PANEL, "Button")
  252.  
  253. local PANEL = {}
  254.  
  255. function PANEL:Init()
  256. self.NameLabel = vgui.Create("DLabel", self)
  257. self.NameLabel:SetFont("ZSHUDFontSmaller")
  258.  
  259. self.DescLabels = self.DescLabels or {}
  260.  
  261. self:InvalidateLayout()
  262. end
  263.  
  264. function PANEL:SetClassTable(classtable)
  265. self.ClassTable = classtable
  266.  
  267. self.NameLabel:SetText(translate.Get(classtable.TranslationName))
  268. self.NameLabel:SizeToContents()
  269.  
  270. self:CreateDescLabels()
  271.  
  272. self:InvalidateLayout()
  273. end
  274.  
  275. function PANEL:RemoveDescLabels()
  276. for _, label in pairs(self.DescLabels) do
  277. label:Remove()
  278. end
  279.  
  280. self.DescLabels = {}
  281. end
  282.  
  283. function PANEL:CreateDescLabels()
  284. self:RemoveDescLabels()
  285.  
  286. self.DescLabels = {}
  287.  
  288. local classtable = self.ClassTable
  289. if not classtable or not classtable.Description then return end
  290.  
  291. local lines = string.Explode("\n", translate.Get(classtable.Description))
  292. if classtable.Wave and classtable.Wave > 0 then
  293. table.insert(lines, 1, "("..translate.Format("unlocked_on_wave_x", classtable.Wave)..")")
  294. end
  295.  
  296. if classtable.Help then
  297. table.insert(lines, " ")
  298. table.Add(lines, string.Explode("\n", translate.Get(classtable.Help)))
  299. end
  300.  
  301. for _, line in ipairs(lines) do
  302. local label = vgui.Create("DLabel", self)
  303. label:SetText(line)
  304. label:SetFont("ZSHUDFontTiny")
  305. label:SizeToContents()
  306. table.insert(self.DescLabels, label)
  307. end
  308. end
  309.  
  310. function PANEL:PerformLayout()
  311. self.NameLabel:SizeToContents()
  312. self.NameLabel:CenterHorizontal()
  313.  
  314. local maxw = self.NameLabel:GetWide()
  315. for _, label in pairs(self.DescLabels) do
  316. maxw = math.max(maxw, label:GetWide())
  317. end
  318. self:SetWide(maxw + 64)
  319. self:CenterHorizontal()
  320.  
  321. for i, label in ipairs(self.DescLabels) do
  322. label:MoveBelow(self.DescLabels[i - 1] or self.NameLabel)
  323. label:CenterHorizontal()
  324. end
  325.  
  326. local lastlabel = self.DescLabels[#self.DescLabels] or self.NameLabel
  327. local x, y = lastlabel:GetPos()
  328. self:SetTall(y + lastlabel:GetTall())
  329. end
  330.  
  331. function PANEL:Think()
  332. if not Window or not Window:Valid() or not Window:IsVisible() then
  333. self:Remove()
  334. end
  335. end
  336.  
  337. function PANEL:Paint(w, h)
  338. derma.SkinHook("Paint", "Frame", self, w, h)
  339.  
  340. return true
  341. end
  342.  
  343. vgui.Register("ClassInfo", PANEL, "Panel")
  344.  
  345. local PANEL = {}
  346.  
  347. function PANEL:Init()
  348. self.NameLabel = vgui.Create("DLabel", self)
  349. self.NameLabel:SetFont("ZSHUDFontSmaller")
  350.  
  351. self.DescLabels = self.DescLabels or {}
  352.  
  353. self:InvalidateLayout()
  354. end
  355.  
  356. function PANEL:SetClassTable(classtable)
  357. self.ClassTable = classtable
  358.  
  359. self.NameLabel:SetText(translate.Get(classtable.TranslationName))
  360. self.NameLabel:SizeToContents()
  361.  
  362. self:CreateDescLabels()
  363.  
  364. self:InvalidateLayout()
  365. end
  366.  
  367. function PANEL:RemoveDescLabels()
  368. for _, label in pairs(self.DescLabels) do
  369. label:Remove()
  370. end
  371.  
  372. self.DescLabels = {}
  373. end
  374.  
  375. function PANEL:CreateDescLabels()
  376. self:RemoveDescLabels()
  377.  
  378. self.DescLabels = {}
  379.  
  380. local classtable = self.ClassTable
  381. if not classtable or not classtable.Description then return end
  382.  
  383. local lines = string.Explode("\n", translate.Get(classtable.Description))
  384. if classtable.Wave and classtable.Wave > 0 then
  385. table.insert(lines, 1, "("..translate.Format("unlocked_on_wave_x", classtable.Wave)..")")
  386. end
  387.  
  388. if classtable.Help then
  389. table.insert(lines, " ")
  390. table.Add(lines, string.Explode("\n", translate.Get(classtable.Help)))
  391. end
  392.  
  393. for _, line in ipairs(lines) do
  394. local label = vgui.Create("DLabel", self)
  395. label:SetText(line)
  396. label:SetFont("ZSHUDFontTiny")
  397. label:SizeToContents()
  398. table.insert(self.DescLabels, label)
  399. end
  400. end
  401.  
  402. function PANEL:PerformLayout()
  403. self.NameLabel:SizeToContents()
  404. self.NameLabel:CenterHorizontal()
  405.  
  406. local maxw = self.NameLabel:GetWide()
  407. for _, label in pairs(self.DescLabels) do
  408. maxw = math.max(maxw, label:GetWide())
  409. end
  410. self:SetWide(maxw + 64)
  411. self:CenterHorizontal()
  412.  
  413. for i, label in ipairs(self.DescLabels) do
  414. label:MoveBelow(self.DescLabels[i - 1] or self.NameLabel)
  415. label:CenterHorizontal()
  416. end
  417.  
  418. local lastlabel = self.DescLabels[#self.DescLabels] or self.NameLabel
  419. local x, y = lastlabel:GetPos()
  420. self:SetTall(y + lastlabel:GetTall())
  421. end
  422.  
  423. function PANEL:Think()
  424. if not Window or not Window:Valid() or not Window:IsVisible() then
  425. self:Remove()
  426. end
  427. end
  428.  
  429. function PANEL:Paint(w, h)
  430. derma.SkinHook("Paint", "Frame", self, w, h)
  431.  
  432. return true
  433. end
  434.  
  435. vgui.Register("ClassInfo", PANEL, "Panel")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement