All pastes #2131670 Raw Edit

Something

public text v1 · immutable
#2131670 ·published 2012-03-23 22:27 UTC
rendered paste body
PANEL = {}
PANEL.HeaderHieght = 15
PANEL.ItemIconPadding = 1
PANEL.ItemIconSize = 39

function PANEL:Init()
	self.CraftingList = CreateGenericListView(self, 0, 0, false)
	self.CraftingList:SetSize(540, 275)
	self.CraftingList:AddColumn("Recipe Results"):SetFixedWidth( 240 )
	self.CraftingList:AddColumn("Recipe Requirements"):SetFixedWidth( 300 )
	self.CraftHolder = CreateGenericPanel(self)
	self.CraftHolder:SetSize(540, 40)
	self.CraftHolder:SetPos(0, 279)
	self.CraftAmount = CreateGenericSlider(self.CraftHolder, "Craft how many?", 1, 10 , 0, nil)
	self.CraftButton = CreateGenericButton(self.CraftHolder, "Start Crafting")
	self.InfoButton = CreateGenericButton(self.CraftHolder, "Recipe Info")
	self.StopCraftButton = CreateGenericButton(self.CraftHolder, "Stop Crafting")
	self.InfoPopUp = CreateGenericFrame("Info", true, true)
	self.InfoPopUp:SetSize(200, 200)
	self.InfoPopUp:SetDeleteOnClose(false)
	self.InfoPopUp:SetVisible(true)
	self.InfoPopUp:Center()
	self.InfoPopUp:Close()
	self.InfoPopUpText = CreateGenericDLabel(self.InfoPopUp, "Default", "placeholder", clrWhite)
	self.InfoPopUpText:SetPos(10, 30)
	self.CraftButton:SetPos(2, 2)
	self.CraftButton:SetSize(100, 36)
	self.InfoButton:SetPos(206, 2)
	self.InfoButton:SetSize(100, 36)
	self.StopCraftButton:SetPos(104, 2)
	self.StopCraftButton:SetSize(100, 36)
	self.CraftAmount:SetPos(408, 2)
	self.CraftAmount:SetValue(1)
	self.CraftAmount:SetWide(130)
	self.StopCraftButton:SetDisabled(true)
	
	self.StopCraftButton.DoClick = function()
		timer.Stop("crafttimer")
		self.StopCraftButton:SetDisabled(true)
		self.CraftAmount:SetValue(1)
	end
	
	self.CraftButton.DoClick = function()		
		for strRecipe, _ in pairs(LocalPlayer().Recipes or {}) do
			local recipe = RecipeTable(strRecipe).PrintName
			
			if (self.Selected and recipe == self.Selected:GetValue(1)) then
				if (self.CraftAmount:GetValue() > 0) then
					if (LocalPlayer():CanMake(strRecipe)) then
						RunConsoleCommand("UD_CraftRecipe", strRecipe)
						self.StopCraftButton:SetDisabled(false)
						
						if (self.CraftAmount:GetValue()-1 > 0) then
							timer.Create("crafttimer",RecipeTable(strRecipe).MakeTime + .1,self.CraftAmount:GetValue() - 1, function()
								if (LocalPlayer():CanMake(strRecipe)) then
									RunConsoleCommand("UD_CraftRecipe", strRecipe)
									self.CraftAmount:SetValue(self.CraftAmount:GetValue() - 1)
									
									if (self.CraftAmount:GetValue() < 1) then
										self.CraftAmount:SetValue(1)
										self.StopCraftButton:SetDisabled(true)
									end
								else
									self.CraftAmount:SetValue(1)
									Msg("Can not craft any more of this item.\n") //Possible to change to PrintMessage to print to HUD or chat
									timer.Stop("crafttimer")
								end
							end)
						end
					else
						Msg("Can not craft this item.\n") //Possible to change to PrintMessage to print to HUD or chat
						self.CraftAmount:SetValue(1)
					end
				end
						
				break
			end
		end
	end
	
	self.InfoButton.DoClick = function()		
		for strRecipe, _ in pairs(LocalPlayer().Recipes or {}) do
			recipe = RecipeTable(strRecipe).PrintName
			
			if (self.Selected and recipe == self.Selected:GetValue(1)) then
				local strToolTip = "Ingredients:"
				for strItem, intAmount in pairs(RecipeTable(strRecipe).Ingredients) do
					strToolTip = strToolTip .. "\n" .. intAmount .. " " .. ItemTable(strItem).PrintName
				end
				
				strToolTip = strToolTip .. "\n\nProducts:"
				for strItem, intAmount in pairs(RecipeTable(strRecipe).Products) do
					strToolTip = strToolTip .. "\n" .. intAmount .. " " .. ItemTable(strItem).PrintName
				end
				
				strToolTip = strToolTip .. "\n\nRequirements:"
				if RecipeTable(strRecipe).NearFire then
					strToolTip = strToolTip .. "\nMust be done near fire"
				end
				
				for strMaster, intLevel in pairs(RecipeTable(strRecipe).RequiredMasters) do
					strToolTip = strToolTip .. "\n" .. intLevel .. " " .. MasterTable(strMaster).PrintName
				end
				
				self.InfoPopUpText:SetText(strToolTip)
				self.InfoPopUpText:SizeToContents()
				self.InfoPopUpText:SetWrap(true)
				self.InfoPopUp:MakePopup()
				self.InfoPopUp:Center()
				self.InfoPopUp:SetVisible(true)
				
				break
			end
		end
	end
end

function PANEL:PerformLayout()

	self.CraftingList:Clear()
	
	for strRecipe, _ in pairs(LocalPlayer().Recipes or {}) do
		local strToolTip = ""
		
		for strItem, intAmount in pairs(RecipeTable(strRecipe).Ingredients) do
			strToolTip = strToolTip .. intAmount .. " " .. ItemTable(strItem).PrintName .. " "
		end
		
		self.CraftingList:AddLine(RecipeTable(strRecipe).PrintName, strToolTip)
	end

end

function PANEL:Think()

	if (self.CraftingList and self.CraftingList:GetLine(self.CraftingList:GetSelectedLine()) != nil) then
		self.Selected = self.CraftingList:GetLine(self.CraftingList:GetSelectedLine()) or nil
		
		if self.InfoButton then self.InfoButton:SetDisabled(false) end
		if self.CraftButton then self.CraftButton:SetDisabled(false) end
	else
		if self.InfoButton then self.InfoButton:SetDisabled(true) end
		if self.CraftButton then self.CraftButton:SetDisabled(true) end
		if self.CraftAmount then self.CraftAmount:SetValue(1) end
	end

end

function PANEL:LoadSkills()
	
end

function PANEL:CreateNewTierList(pnlParent, intSkillNeeded, intTier)
	
end

function PANEL:AddSkill(pnlParent, strSkill, tblSkillTable)
	
end

function PANEL:LoadMasters()
	
end

function PANEL:LoadHeader()
	
end
vgui.Register("craftingtab", PANEL, "Panel")