AddCSLuaFile( "cl_init.lua" ) AddCSLuaFile( "shared.lua" ) include('shared.lua') ENT.WireDebugName = "BT_Recv" local MODEL = Model( "models/props_lab/binderblue.mdl" ) local Recvs = {} function GetWirelessRecv() return Recvs; end function ENT:Initialize() self:PhysicsInit( SOLID_VPHYSICS ) self:SetMoveType( MOVETYPE_VPHYSICS ) self:SetSolid( SOLID_VPHYSICS ) self.Key=0; self.SendMsg=0; self.Buff={}; self.Byte=0; self.Connected=0; self:SetOverlayText("Wireless Receiver - Scanning") table.insert( Recvs , self ); self.Inputs = Wire_CreateInputs(self, { "Pop" , "Message" , "Send" , "Reset" , "Key" }) self.Outputs = Wire_CreateOutputs(self, { "Connected" , "Count" , "Message" }) end function ENT:TriggerInput(iname, value) if ( value != nil && iname == "Key" ) then self.Key=value; iname="Reset"; value=1; end if ( iname == "Reset" ) then if ( value != nil && math.floor( value ) != 0 ) then if self.Connected != 0 then self.Connected:Dissconnect( self ); end self.SendMsg=0; self.Buff={}; self.Byte=0; self.Connected=0; end end if ( iname == "Pop" ) then if ( value != nil && math.floor( value ) != 0 ) then table.remove( self.Buff , 1 ) end end if ( value != nil && iname == "Message" ) then self.SendMsg=value; end if ( iname == "Send" ) then if ( value != nil && value != nil && math.floor( value ) != 0 ) then if ( self.Connected != 0 ) then if ( self.Connected:IsValid() ) then self.Connected:Push( self , self.SendMsg ) else self.Connected=0 end end end end self:UpdateRMessage(); end function ENT:UpdateRMessage() if ( self.Connected != 0 ) then if self.Key != 0 then self:SetOverlayText("Wireless Receiver (" .. self.Key .. ") - Connected") else self:SetOverlayText("Wireless Receiver - Connected") end Wire_TriggerOutput(self, "Connected", 1 ) else if self.Key != 0 then self:SetOverlayText("Wireless Receiver (" .. self.Key .. ") - Scanning") else self:SetOverlayText("Wireless Receiver - Scanning") end Wire_TriggerOutput(self, "Connected", 0 ) end Wire_TriggerOutput(self, "Count", #self.Buff ) Wire_TriggerOutput(self, "Message", self.Buff[1] or 0 ) end function ENT:Push( data ) table.insert( self.Buff, data ); self:UpdateRMessage(); end function ENT:Think() if self.Connected != 0 then if ( not self.Connected:IsValid() ) then self.Connected=0 end else local Closest=0; local CDistance=0; if self then local myPos = self:GetPos(); for _,Server in pairs( GetWirelessSrv() ) do if Server then if Server.Key == self.Key then local TheirPos=Server:GetPos(); local ldist=TheirPos:Distance( myPos ) if ( Closest == 0 || ldist < CDistance ) then CDistance=ldist Closest=Server end end end end end if ( Closest != 0 ) then self.Connected=Closest; Closest:Connect( self ); self:UpdateRMessage(); end end self.BaseClass.Think(self) end function ENT:OnRemove() if self.Connected != 0 then self.Connected:Dissconnect( self ); end for Key,BT in pairs( GetWirelessRecv() ) do if BT == self then table.remove( Recvs , Key ) end end end