--Wire text screen by greenarrow --http://gmodreviews.googlepages.com/ --http://forums.facepunchstudios.com/greenarrow --There are a few bits of code from wire digital screen here and there, mainly just --the values to correctly format cam3d2d for the screen, and a few standard things in the stool. TOOL.Category = "Wire - Display" TOOL.Name = "Text Screen" TOOL.Command = nil TOOL.ConfigName = "" TOOL.Model = "models/kobilica/wiremonitorbig.mdl" if ( CLIENT ) then language.Add( "Tool_wire_textscreen_name", "Text Screen Tool (Wire)" ) language.Add( "Tool_wire_textscreen_desc", "Spawns a screen that display text." ) language.Add( "Tool_wire_textscreen_0", "Primary: Create/Update text screen" ) language.Add( "sboxlimit_wire_textscreens", "You've hit text screens limit!" ) language.Add( "undone_wiretextscreen", "Undone Wire Text Screen" ) language.Add("Tool_wire_textscreen_text1", "Text 1:") language.Add("Tool_wire_textscreen_text2", "Text 2:") language.Add("Tool_wire_textscreen_text3", "Text 3:") language.Add("Tool_wire_textscreen_text4", "Text 4:") language.Add("Tool_wire_textscreen_text5", "Text 5:") language.Add("Tool_wire_textscreen_text6", "Text 6:") language.Add("Tool_wire_textscreen_text7", "Text 7:") language.Add("Tool_wire_textscreen_text8", "Text 8:") language.Add("Tool_wire_textscreen_text9", "Text 9:") language.Add("Tool_wire_textscreen_text10", "Text 10:") language.Add("Tool_wire_textscreen_text11", "Text 12:") language.Add("Tool_wire_textscreen_text12", "Text 12:") language.Add("Tool_wire_textscreen_tsize", "Text size:") language.Add("Tool_wire_textscreen_tjust", "Text justification:") language.Add("Tool_wire_textscreen_colour", "Text colour:") language.Add("Tool_wire_textscreen_ninputs", "Number of inputs:") language.Add("Tool_wire_textscreen_createflat", "Create flat to surface:") language.Add("Tool_wire_textscreen_defaulton", "Force show text (make wires optional):") end if (SERVER) then CreateConVar('sbox_maxwire_textscreens', 20) end --TOOL.ClientConVar[ "model" ] = "models/kobilica/wiremonitorbig.mdl" for i = 0, 11 do TOOL.ClientConVar["text"..i] = "" end TOOL.ClientConVar["tsize"] = 10 TOOL.ClientConVar["tjust"] = 1 TOOL.ClientConVar["tred"] = 255 TOOL.ClientConVar["tblue"] = 255 TOOL.ClientConVar["tgreen"] = 255 TOOL.ClientConVar["ninputs"] = 3 TOOL.ClientConVar["defaulton"] = 1 -- Create flat option (TheApathetic) TOOL.ClientConVar["createflat"] = 1 local MaxTextLength = 80 cleanup.Register( "wire_textscreens" ) function TOOL:LeftClick( trace ) if (CLIENT) then return true end if trace.Entity && trace.Entity:IsPlayer() then return false end if ( !self:GetSWEP():CheckLimit( "wire_textscreens" ) ) then return false end if (not util.IsValidModel(self.Model)) then return false end if (not util.IsValidProp(self.Model)) then return false end local ply = self:GetOwner() local Ang = trace.HitNormal:Angle() local Smodel = self.Model --get stool settings local TextList = {} for i = 1, 12 do TextList[i] = self:GetClientInfo("text"..i) end local chrPerLine = 16 - tonumber(self:GetClientInfo("tsize")) --Msg("cpl from stool = "..tostring(chrPerLine).."\n") local textJust = self:GetClientInfo("tjust") local tRed = math.min(self:GetClientNumber("tred"), 255) local tGreen = math.min(self:GetClientNumber("tgreen"), 255) local tBlue = math.min(self:GetClientNumber("tblue"), 255) local numInputs = self:GetClientNumber("ninputs") local CreateFlat = self:GetClientNumber("createflat") local defaultOn = self:GetClientNumber("defaulton") --update screen if (trace.Entity:IsValid() && trace.Entity:GetClass() == "gmod_wire_textscreen" && trace.Entity.pl == ply) then trace.Entity:Setup(TextList, chrPerLine, textJust, tRed, tGreen, tBlue, numInputs, defaultOn) return true end // Create flat if desired (TheApathetic) if (CreateFlat == 0) then Ang.pitch = Ang.pitch + 90 end --make text screen wire_textscreen = MakeWireTextScreen( ply, Ang, trace.HitPos, Model(self.Model), TextList, chrPerLine, textJust, tRed, tGreen, tBlue, numInputs, defaultOn) local min = wire_textscreen:OBBMins() wire_textscreen:SetPos( trace.HitPos - trace.HitNormal * min.z ) // Weld to surface (TheApathetic) local const = WireLib.Weld(wire_textscreen, trace.Entity, trace.PhysicsBone, true) undo.Create("WireTextScreen") undo.AddEntity( wire_textscreen ) undo.AddEntity( const ) undo.SetPlayer( ply ) undo.Finish() ply:AddCleanup( "wire_textscreens", wire_textscreen ) return true end if (SERVER) then function MakeWireTextScreen( pl, Ang, Pos, Smodel, TextList, chrPerLine, textJust, tRed, tGreen, tBlue, numInputs, defaultOn) if ( !pl:CheckLimit( "wire_textscreens" ) ) then return false end local wire_textscreen = ents.Create( "gmod_wire_textscreen" ) if (!wire_textscreen:IsValid()) then return false end wire_textscreen:SetModel(Smodel) wire_textscreen:Setup(TextList, chrPerLine, textJust, tRed, tGreen, tBlue, numInputs, defaultOn) wire_textscreen:SetAngles( Ang ) wire_textscreen:SetPos( Pos ) wire_textscreen:Spawn() wire_textscreen:SetPlayer(pl) local ttable = { pl = pl, Smodel = Smodel, TextList = TextList, chrPerLine = chrPerLine, textJust = textJust, tRed = tRed, tGreen = tGreen, tBlue = tBlue, numInputs = numInputs, defaultOn = defaultOn } table.Merge(wire_textscreen:GetTable(), ttable ) pl:AddCount( "wire_textscreens", wire_textscreen ) return wire_textscreen end duplicator.RegisterEntityClass("gmod_wire_textscreen", MakeWireTextScreen, "Ang", "Pos", "Smodel", "TextList", "chrPerLine", "textJust", "tRed", "tGreen", "tBlue", "numInputs", "defaultOn") end function TOOL:UpdateGhostWireTextScreen( ent, player ) if ( !ent ) then return end if ( !ent:IsValid() ) then return end local tr = utilx.GetPlayerTrace( player, player:GetCursorAimVector() ) local trace = util.TraceLine( tr ) if (!trace.Hit) then return end if (trace.Entity && trace.Entity:GetClass() == "gmod_wire_textscreen" || trace.Entity:IsPlayer()) then ent:SetNoDraw( true ) return end local Ang = trace.HitNormal:Angle() // Check for create flat option (TheApathetic) if (self:GetClientNumber("createflat") == 0) then Ang.pitch = Ang.pitch + 90 end local min = ent:OBBMins() ent:SetPos( trace.HitPos - trace.HitNormal * min.z ) ent:SetAngles( Ang ) ent:SetNoDraw( false ) end function TOOL:Think() if (!self.GhostEntity || !self.GhostEntity:IsValid() || self.GhostEntity:GetModel() != self.Model || (not self.GhostEntity:GetModel()) ) then self:MakeGhostEntity( self.Model, Vector(0,0,0), Angle(0,0,0) ) end self:UpdateGhostWireTextScreen( self.GhostEntity, self:GetOwner() ) end function TOOL.BuildCPanel(panel) panel:AddControl("Header", { Text = "#Tool_wire_textscreen_name", Description = "#Tool_wire_textscreen_desc" }) panel:AddControl("Slider", {Label = "#Tool_wire_textscreen_tsize", Description = "", Type = "Integer", Min = "1", Max = "15", Command = "wire_textscreen_tsize"}) panel:AddControl("Slider", {Label = "#Tool_wire_textscreen_tjust", Description = "", Type = "Integer", Min = "0", Max = "2", Command = "wire_textscreen_tjust"}) panel:AddControl("Slider", {Label = "#Tool_wire_textscreen_ninputs", Description = "", Type = "Integer", Min = "1", Max = "10", Command = "wire_textscreen_ninputs"}) panel:AddControl("Color", { Label = "#Tool_wire_textscreen_colour", Red = "wire_textscreen_tred", Green = "wire_textscreen_tgreen", Blue = "wire_textscreen_tblue", ShowAlpha = "0", ShowHSV = "1", ShowRGB = "1", Multiplier = "255" }) panel:AddControl("Checkbox", {Label = "#Tool_wire_textscreen_createflat", Command = "wire_textscreen_createflat"}) panel:AddControl("Checkbox", {Label = "#Tool_wire_textscreen_defaulton", Command = "wire_textscreen_defaulton"}) panel:AddControl("TextBox", {Label = "#Tool_wire_textscreen_text1", MaxLength = tostring(MaxTextLength), Command = "wire_textscreen_text1"}) panel:AddControl("TextBox", {Label = "#Tool_wire_textscreen_text2", MaxLength = tostring(MaxTextLength), Command = "wire_textscreen_text2"}) panel:AddControl("TextBox", {Label = "#Tool_wire_textscreen_text3", MaxLength = tostring(MaxTextLength), Command = "wire_textscreen_text3"}) panel:AddControl("TextBox", {Label = "#Tool_wire_textscreen_text4", MaxLength = tostring(MaxTextLength), Command = "wire_textscreen_text4"}) panel:AddControl("TextBox", {Label = "#Tool_wire_textscreen_text5", MaxLength = tostring(MaxTextLength), Command = "wire_textscreen_text5"}) panel:AddControl("TextBox", {Label = "#Tool_wire_textscreen_text6", MaxLength = tostring(MaxTextLength), Command = "wire_textscreen_text6"}) panel:AddControl("TextBox", {Label = "#Tool_wire_textscreen_text7", MaxLength = tostring(MaxTextLength), Command = "wire_textscreen_text7"}) panel:AddControl("TextBox", {Label = "#Tool_wire_textscreen_text8", MaxLength = tostring(MaxTextLength), Command = "wire_textscreen_text8"}) panel:AddControl("TextBox", {Label = "#Tool_wire_textscreen_text9", MaxLength = tostring(MaxTextLength), Command = "wire_textscreen_text9"}) panel:AddControl("TextBox", {Label = "#Tool_wire_textscreen_text10", MaxLength = tostring(MaxTextLength), Command = "wire_textscreen_text10"}) panel:AddControl("TextBox", {Label = "#Tool_wire_textscreen_text11", MaxLength = tostring(MaxTextLength), Command = "wire_textscreen_text11"}) panel:AddControl("TextBox", {Label = "#Tool_wire_textscreen_text12", MaxLength = tostring(MaxTextLength), Command = "wire_textscreen_text12"}) end