2008-06-14 00:55:20 +00:00
|
|
|
|
|
|
|
AddCSLuaFile( "cl_init.lua" )
|
|
|
|
AddCSLuaFile( "shared.lua" )
|
|
|
|
|
|
|
|
include('shared.lua')
|
|
|
|
|
|
|
|
ENT.WireDebugName = "Radio"
|
|
|
|
|
|
|
|
local MODEL = Model( "models/props_lab/binderblue.mdl" )
|
|
|
|
|
|
|
|
function ENT:Initialize()
|
|
|
|
self.Entity:PhysicsInit( SOLID_VPHYSICS )
|
|
|
|
self.Entity:SetMoveType( MOVETYPE_VPHYSICS )
|
|
|
|
self.Entity:SetSolid( SOLID_VPHYSICS )
|
|
|
|
|
|
|
|
self.Inputs = Wire_CreateInputs(self, { "Channel"})
|
|
|
|
self.Outputs = Wire_CreateOutputs(self, { "ERRORS!!!" })
|
|
|
|
|
2009-01-17 21:30:07 +00:00
|
|
|
self.Channel = 0
|
|
|
|
self.Values = 4
|
|
|
|
self.RecievedData = {}
|
|
|
|
for i=0,31 do
|
|
|
|
self.RecievedData[i] = {}
|
|
|
|
self.RecievedData[i].Owner = nil
|
|
|
|
self.RecievedData[i].Data = 0
|
|
|
|
end
|
|
|
|
self.SentData = {}
|
|
|
|
for i=0,31 do
|
|
|
|
self.SentData[i] = 0
|
|
|
|
end
|
2008-06-14 00:55:20 +00:00
|
|
|
|
|
|
|
Radio_Register(self)
|
2009-01-17 21:30:07 +00:00
|
|
|
Radio_RecieveData(self)
|
2008-06-14 00:55:20 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function ENT:Setup(channel,values,secure)
|
|
|
|
channel = math.floor(tonumber(channel) or 0)
|
|
|
|
self.Secure = secure
|
|
|
|
self.Old = false
|
|
|
|
if (tonumber(values) == nil) then
|
|
|
|
values = 4
|
|
|
|
self.Old = true
|
|
|
|
else
|
2009-01-17 21:30:07 +00:00
|
|
|
values = math.Clamp(math.floor(values),1,32)
|
2008-06-14 00:55:20 +00:00
|
|
|
end
|
2009-01-17 21:30:07 +00:00
|
|
|
|
2008-06-14 00:55:20 +00:00
|
|
|
self.Values = values
|
|
|
|
local onames = {}
|
|
|
|
if (self.Old == false) then
|
|
|
|
for i = 1,self.Values do
|
|
|
|
onames[i] = tostring(i) //without tostring() you kill the debugger.
|
|
|
|
end
|
|
|
|
else
|
|
|
|
onames = {"A","B","C","D"}
|
|
|
|
end
|
2009-01-17 13:17:12 +00:00
|
|
|
|
2008-06-14 00:55:20 +00:00
|
|
|
Wire_AdjustOutputs(self,onames)
|
|
|
|
table.insert(onames,"Channel")
|
|
|
|
Wire_AdjustInputs(self,onames)
|
2009-01-17 21:30:07 +00:00
|
|
|
|
|
|
|
self.Channel = channel
|
|
|
|
Radio_ChangeChannel(self)
|
2008-06-14 00:55:20 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function ENT:TriggerInput(iname, value)
|
|
|
|
if (iname == "Channel") then
|
2009-01-02 08:34:50 +00:00
|
|
|
self.Channel = math.floor(value)
|
2009-01-17 21:30:07 +00:00
|
|
|
Radio_ChangeChannel(self)
|
2009-01-17 13:17:12 +00:00
|
|
|
|
2009-01-17 21:30:07 +00:00
|
|
|
elseif (iname != nil && value != nil) then
|
|
|
|
if (self.Old == true) then
|
|
|
|
if (iname == "A") then
|
|
|
|
Radio_SendData(self,self.Channel,0,value)
|
|
|
|
elseif (iname == "B") then
|
|
|
|
Radio_SendData(self,self.Channel,1,value)
|
|
|
|
elseif (iname == "C") then
|
|
|
|
Radio_SendData(self,self.Channel,2,value)
|
|
|
|
elseif (iname == "D") then
|
|
|
|
Radio_SendData(self,self.Channel,3,value)
|
2009-01-17 18:17:18 +00:00
|
|
|
end
|
2009-01-17 21:30:07 +00:00
|
|
|
else
|
|
|
|
Radio_SendData(self,tonumber(iname)-1,value)
|
2009-01-17 18:17:18 +00:00
|
|
|
end
|
2008-06-14 00:55:20 +00:00
|
|
|
end
|
|
|
|
self:ShowOutput()
|
|
|
|
end
|
|
|
|
|
2009-01-17 21:30:07 +00:00
|
|
|
function ENT:NotifyDataRecieved(subch)
|
|
|
|
Wire_TriggerOutput(self,tostring(subch+1),self.RecievedData[subch].Data)
|
|
|
|
end
|
|
|
|
|
2009-01-09 08:40:59 +00:00
|
|
|
function ENT:ReadCell(Address)
|
|
|
|
if (Address >= 0) && (Address < self.Values) then
|
2009-01-17 21:30:07 +00:00
|
|
|
return self.RecievedData[Address].Data
|
2009-01-09 08:40:59 +00:00
|
|
|
else
|
|
|
|
return nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function ENT:WriteCell(Address, value)
|
|
|
|
if (Address >= 0) && (Address < self.Values) then
|
2009-01-17 21:30:07 +00:00
|
|
|
Radio_SendData(self,Address,value)
|
2009-01-09 08:40:59 +00:00
|
|
|
return true
|
|
|
|
else
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2008-06-14 00:55:20 +00:00
|
|
|
function ENT:ShowOutput()
|
|
|
|
if (self.Old == true) then
|
|
|
|
self:SetOverlayText( "(Channel " .. self.Channel .. ") Transmit A: " .. (self.Inputs.A.Value or 0) .. " B: " .. (self.Inputs.B.Value or 0) .. " C: " .. (self.Inputs.C.Value or 0) .. " D: " .. (self.Inputs.D.Value or 0) .. "\nReceive A: " .. (self.Outputs.A.Value or 0) .. " B: " .. (self.Outputs.B.Value or 0) .. " C: " .. (self.Outputs.C.Value or 0) .. " D: " .. (self.Outputs.D.Value or 0) )
|
|
|
|
else
|
|
|
|
local overlay = "(Channel " .. self.Channel .. ") Transmit"
|
|
|
|
for i=1,self.Values do
|
2009-01-17 21:30:07 +00:00
|
|
|
overlay = overlay .. " " .. i .. ":" ..
|
|
|
|
math.Round((self.SentData[i-1])*1000)/1000
|
2008-06-14 00:55:20 +00:00
|
|
|
end
|
|
|
|
overlay = overlay .. "\nReceive"
|
|
|
|
for i=1,self.Values do
|
2009-01-17 21:30:07 +00:00
|
|
|
overlay = overlay .. " " .. i .. ":" ..
|
|
|
|
math.Round((self.RecievedData[i-1].Data)*1000)/1000
|
2008-06-14 00:55:20 +00:00
|
|
|
end
|
|
|
|
if (self.Secure == true) then overlay = overlay .. "\nSecured" end
|
2009-01-17 21:30:07 +00:00
|
|
|
self:SetOverlayText(overlay)
|
2008-06-14 00:55:20 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function ENT:OnRestore()
|
2009-01-17 13:17:12 +00:00
|
|
|
self.BaseClass.OnRestore(self)
|
2008-06-14 00:55:20 +00:00
|
|
|
Radio_Register(self)
|
|
|
|
end
|
|
|
|
|
|
|
|
function ENT:OnRemove()
|
|
|
|
if (!self.Channel) then return end
|
2009-01-17 21:30:07 +00:00
|
|
|
Radio_Unregister(self)
|
2008-06-14 00:55:20 +00:00
|
|
|
end
|