

local PANEL = {}



local MatBackground = surface.GetTextureID( "vgui/hand" )



local ow = 310

local oh = 270



local FingerPositions = { 

							{ 56 / ow, 230 / oh },

							{ 51 / ow, 180 / oh },

							{ 59 / ow, 130 / oh },

							

							{ 121 / ow, 114 / oh },

							{ 132 / ow, 75 / oh },

							{ 160 / ow, 34 / oh },

							

							{ 165 / ow, 126 / oh },

							{ 178 / ow, 92 / oh },

							{ 197 / ow, 60 / oh},

							

							{ 194 / ow, 156 / oh },

							{ 208 / ow, 124 / oh },

							{ 228 / ow, 92 / oh},

							

							{ 229 / ow, 175 / oh},

							{ 244 / ow, 146 / oh},

							{ 259 / ow, 115 / oh},

						}



--[[---------------------------------------------------------

   Name: Init

-----------------------------------------------------------]]

function PANEL:Init()



	self.Hand = 0

	self.FingerVars = {}

	

	for i=0, 14 do

	

		if ( self.NumVars == 18 && i > 10 ) then break end

	

		self.FingerVars[ i ] = vgui.Create( "FingerVar", self )

		

		self.FingerVars[ i ]:SetVarName( "finger_"..i )

		

		if ( i > 2 && i%3 != 0 ) then

		

			self.FingerVars[ i ]:SetRestrictX( true )

		

		end

	

	end



end





--[[---------------------------------------------------------

   Name: ControlValues

   Desc: The keyvalues passed from the control defs

-----------------------------------------------------------]]

function PANEL:ControlValues( kv )



	if ( kv.hand == 1 ) then

		self.Label:SetText( "#Right Hand" )

		self.Hand = 1

	else

		self.Label:SetText( "#Left Hand" )

		self.Hand = 0

	end

	

	self.NumVars = kv.numvars

	

	-- Mitten Hand, remove the last 6 vars

	if ( self.NumVars == "18" ) then

	

		for i=9, 14 do

		

			self.FingerVars[ i ]:Remove()

			self.FingerVars[ i ] = nil

		

		end

	

	end

	

	self:InvalidateLayout( true )



end



--[[---------------------------------------------------------

   Name: PerformLayout

-----------------------------------------------------------]]

function PANEL:PerformLayout()



	local y = self.BaseClass.PerformLayout( self )

	

	y = y + 200

	y = y + 5

	

	local w, h = self:GetSize()

	

	for finger = 0, 4 do

	

		for var = 0, 2 do

		

			local ID =  ((finger*3) + var)

		

			local Pos = FingerPositions[ ID + 1 ]

			if ( Pos && self.FingerVars[ ID ] ) then

				self.FingerVars[ ID ]:SetPos( Pos[1] * w - 24, Pos[2] * h - 24 )

			end

		

		end

	

	end



	self:SetTall( y )



end







--[[---------------------------------------------------------

   Name: Paint

-----------------------------------------------------------]]

function PANEL:Paint()



	local w, h = self:GetSize()



	surface.SetTexture( MatBackground )

	surface.SetDrawColor( 255, 255, 255, 255 )

	surface.DrawTexturedRect( 0, 0, w, h )

	

	return true



end



--[[---------------------------------------------------------

   Name: Think

-----------------------------------------------------------]]

function PANEL:Think()

	self:UpdateHovered()

end



--[[---------------------------------------------------------

   Name: UpdateHovered

-----------------------------------------------------------]]

function PANEL:UpdateHovered()



	if ( self.Dragging ) then return end

	

	local x, y = self:CursorPos()



	local distance = 256

	local hovered = nil

	for k, v in pairs( self.FingerVars ) do

	

		local val = v:GetValue()

		local AddX = val[1] * v:GetWide()

		local AddY = val[2] * v:GetTall()

	

		local dist = math.Distance( x, y, v.x + v:GetWide()/2 + AddX, v.y + v:GetTall()/2 + AddY )

		if ( dist < distance ) then

			hovered = v

			distance = dist

		end

	

	end

	

	if ( !hovered || hovered != self.HoveredPanel ) then

		

		if ( IsValid( self.HoveredPanel ) ) then

			self.HoveredPanel.HoveredFingerVar = nil

		end

		

		self.HoveredPanel = hovered

		

		if ( IsValid( self.HoveredPanel ) ) then

			self.HoveredPanel.HoveredFingerVar = true

		end

	

	end



end



--[[---------------------------------------------------------

   Name: OnMousePressed

-----------------------------------------------------------]]

function PANEL:OnMousePressed( mousecode )



	self:UpdateHovered()

	

	if ( !IsValid( self.HoveredPanel ) ) then return end

	

	self.HoveredPanel:OnMousePressed( mousecode )

	

end



vgui.Register( "fingerposer", PANEL, "ContextBase" )