TOOL.Category = "Poser" TOOL.Name = "#Eye Poser" TOOL.Command = nil TOOL.ConfigName = nil local function ConvertRelativeToEyesAttachment( Entity, Pos ) // Convert relative to eye attachment local eyeattachment = Entity:LookupAttachment( "eyes" ) if ( eyeattachment == 0 ) then return end local attachment = Entity:GetAttachment( eyeattachment ) if ( !attachment ) then return end local LocalPos, LocalAng = WorldToLocal( Pos, Angle(0,0,0), attachment.Pos, attachment.Ang ) return LocalPos end /*--------------------------------------------------------- Selects entity and aims their eyes ---------------------------------------------------------*/ function TOOL:LeftClick( trace ) if (self.SelectedEntity == nil) then if ( !ValidEntity( trace.Entity ) ) then return end self.SelectedEntity = trace.Entity self:GetWeapon():SetNetworkedEntity( 0, self.SelectedEntity ) return end local selectedent = self.SelectedEntity self.SelectedEntity = nil self:GetWeapon():SetNetworkedEntity( 0, NULL ) if (!selectedent:IsValid()) then return end local LocalPos = ConvertRelativeToEyesAttachment( selectedent, trace.HitPos ) if (!LocalPos) then return false end selectedent:SetEyeTarget( LocalPos ) end /*--------------------------------------------------------- Makes the eyes look at the player ---------------------------------------------------------*/ function TOOL:RightClick( trace ) self:GetWeapon():SetNetworkedEntity( 0, NULL ) self.SelectedEntity = nil if ( !ValidEntity( trace.Entity ) ) then return end if ( CLIENT ) then return true end local pos = self:GetOwner():EyePos() local LocalPos = ConvertRelativeToEyesAttachment( trace.Entity, pos ) if (!LocalPos) then return false end trace.Entity:SetEyeTarget( LocalPos ) end if ( CLIENT ) then /*--------------------------------------------------------- Draw a box indicating the face we have selected ---------------------------------------------------------*/ function TOOL:DrawHUD() local selected = self:GetWeapon():GetNetworkedEntity( 0 ) if ( !ValidEntity( selected ) ) then return end local vEyePos = selected:EyePos() local eyeattachment = selected:LookupAttachment( "eyes" ) if (eyeattachment == 0) then return end local attachment = selected:GetAttachment( eyeattachment ) local scrpos = attachment.Pos:ToScreen() if (!scrpos.visible) then return end // Try to get each eye position.. this is a real guess and won't work on non-humans local Leye = (attachment.Pos + attachment.Ang:Right() * 1.5):ToScreen() local Reye = (attachment.Pos - attachment.Ang:Right() * 1.5):ToScreen() // Work out the side distance to give a rough headsize box.. local player_eyes = LocalPlayer():EyeAngles() local side = (attachment.Pos + player_eyes:Right() * 10):ToScreen() local size = 4 local Owner = self:GetOwner() // Get Target local tr = utilx.GetPlayerTrace( Owner, Owner:GetCursorAimVector() ) local trace = util.TraceLine( tr ) local scrhit = trace.HitPos:ToScreen() local x = scrhit.x local y = scrhit.y local LocalPos = ConvertRelativeToEyesAttachment( selected, trace.HitPos ) selected:SetEyeTarget( LocalPos ) // Todo, make look less like ass surface.SetDrawColor( 0, 0, 0, 100 ) surface.DrawLine( Leye.x-1, Leye.y+1, x-1, y+1 ) surface.DrawLine( Leye.x-1, Leye.y-1, x-1, y-1 ) surface.DrawLine( Leye.x+1, Leye.y+1, x+1, y+1 ) surface.DrawLine( Leye.x+1, Leye.y-1, x+1, y-1 ) surface.DrawLine( Reye.x-1, Reye.y+1, x-1, y+1 ) surface.DrawLine( Reye.x-1, Reye.y-1, x-1, y-1 ) surface.DrawLine( Reye.x+1, Reye.y+1, x+1, y+1 ) surface.DrawLine( Reye.x+1, Reye.y-1, x+1, y-1 ) surface.SetDrawColor( 0, 255, 0, 255 ) surface.DrawLine( Leye.x, Leye.y, x, y ) surface.DrawLine( Reye.x, Reye.y, x, y ) surface.DrawLine( Leye.x, Leye.y-1, x, y-1 ) surface.DrawLine( Reye.x, Reye.y-1, x, y-1 ) end end