154 lines
4.9 KiB
Lua
154 lines
4.9 KiB
Lua
|
|
AddCSLuaFile( "cl_init.lua" )
|
|
AddCSLuaFile( "shared.lua" )
|
|
|
|
include('shared.lua')
|
|
|
|
ENT.WireDebugName = "Data Transferer"
|
|
|
|
|
|
function ENT:Initialize()
|
|
self.Entity:PhysicsInit( SOLID_VPHYSICS )
|
|
self.Entity:SetMoveType( MOVETYPE_VPHYSICS )
|
|
self.Entity:SetSolid( SOLID_VPHYSICS )
|
|
self.Inputs = Wire_CreateInputs(self.Entity, {"Send","A","B","C","D","E","F","G","H"})
|
|
self.Outputs = Wire_CreateOutputs(self.Entity, {"A","B","C","D","E","F","G","H"})
|
|
self.Sending = false
|
|
self.Activated = false
|
|
self.ActivateTime = 0
|
|
self.DefaultZero = true
|
|
self.Values = {};
|
|
self.Values["A"] = 0
|
|
self.Values["B"] = 0
|
|
self.Values["C"] = 0
|
|
self.Values["D"] = 0
|
|
self.Values["E"] = 0
|
|
self.Values["F"] = 0
|
|
self.Values["G"] = 0
|
|
self.Values["H"] = 0
|
|
|
|
self:SetBeamRange(25000)
|
|
self:ShowOutput()
|
|
end
|
|
|
|
function ENT:Setup(Range,DefaultZero)
|
|
self.DefaultZero = DefaultZero
|
|
self:SetBeamRange(Range)
|
|
end
|
|
|
|
function ENT:OnRemove()
|
|
Wire_Remove(self.Entity)
|
|
end
|
|
|
|
function ENT:TriggerInput(iname, value)
|
|
if(iname == "Send")then
|
|
if(value > 0)then
|
|
self.Sending = true
|
|
else
|
|
self.Sending = false
|
|
end
|
|
else
|
|
self.Values[iname] = value
|
|
end
|
|
end
|
|
|
|
function ENT:Think()
|
|
if(self.Activated == false && self.DefaultZero)then
|
|
Wire_TriggerOutput(self.Entity,"A",0)
|
|
Wire_TriggerOutput(self.Entity,"B",0)
|
|
Wire_TriggerOutput(self.Entity,"C",0)
|
|
Wire_TriggerOutput(self.Entity,"D",0)
|
|
Wire_TriggerOutput(self.Entity,"E",0)
|
|
Wire_TriggerOutput(self.Entity,"F",0)
|
|
Wire_TriggerOutput(self.Entity,"G",0)
|
|
Wire_TriggerOutput(self.Entity,"H",0)
|
|
else
|
|
if(CurTime() > self.ActivateTime + 0.5)then
|
|
self.Activated = false
|
|
end
|
|
end
|
|
|
|
|
|
local vStart = self.Entity:GetPos()
|
|
local vForward = self.Entity:GetUp()
|
|
|
|
local trace = {}
|
|
trace.start = vStart
|
|
trace.endpos = vStart + (vForward * self:GetBeamRange())
|
|
trace.filter = { self.Entity }
|
|
local trace = util.TraceLine( trace )
|
|
|
|
local ent = trace.Entity
|
|
|
|
if not (ent && ent:IsValid() &&
|
|
(trace.Entity:GetClass() == "gmod_wire_data_transferer" ||
|
|
trace.Entity:GetClass() == "gmod_wire_data_satellitedish" ||
|
|
trace.Entity:GetClass() == "gmod_wire_data_store" ))then
|
|
if(Color(self.Entity:GetColor()) != Color(255,255,255,255))then
|
|
self.Entity:SetColor(255, 255, 255, 255)
|
|
end
|
|
return false
|
|
end
|
|
|
|
if(Color(self.Entity:GetColor()) != Color(0,255,0,255))then
|
|
self.Entity:SetColor(0, 255, 0, 255)
|
|
end
|
|
|
|
if(trace.Entity:GetClass() == "gmod_wire_data_transferer")then
|
|
ent:RecieveValue("A",self.Values.A)
|
|
ent:RecieveValue("B",self.Values.B)
|
|
ent:RecieveValue("C",self.Values.C)
|
|
ent:RecieveValue("D",self.Values.D)
|
|
ent:RecieveValue("E",self.Values.E)
|
|
ent:RecieveValue("F",self.Values.F)
|
|
ent:RecieveValue("G",self.Values.G)
|
|
ent:RecieveValue("H",self.Values.H)
|
|
elseif(trace.Entity:GetClass() == "gmod_wire_data_satellitedish")then
|
|
if(ent.Transmitter && ent.Transmitter:IsValid())then
|
|
ent.Transmitter:RecieveValue("A",self.Values.A)
|
|
ent.Transmitter:RecieveValue("B",self.Values.B)
|
|
ent.Transmitter:RecieveValue("C",self.Values.C)
|
|
ent.Transmitter:RecieveValue("D",self.Values.D)
|
|
ent.Transmitter:RecieveValue("E",self.Values.E)
|
|
ent.Transmitter:RecieveValue("F",self.Values.F)
|
|
ent.Transmitter:RecieveValue("G",self.Values.G)
|
|
ent.Transmitter:RecieveValue("H",self.Values.H)
|
|
else
|
|
self.Entity:SetColor(255, 0, 0, 255)
|
|
end
|
|
elseif(trace.Entity:GetClass() == "gmod_wire_data_store")then
|
|
Wire_TriggerOutput(self.Entity,"A",ent.Values.A)
|
|
Wire_TriggerOutput(self.Entity,"B",ent.Values.B)
|
|
Wire_TriggerOutput(self.Entity,"C",ent.Values.C)
|
|
Wire_TriggerOutput(self.Entity,"D",ent.Values.D)
|
|
Wire_TriggerOutput(self.Entity,"E",ent.Values.E)
|
|
Wire_TriggerOutput(self.Entity,"F",ent.Values.F)
|
|
Wire_TriggerOutput(self.Entity,"G",ent.Values.G)
|
|
Wire_TriggerOutput(self.Entity,"H",ent.Values.H)
|
|
if(self.Sending)then
|
|
ent.Values.A = self.Entity.Inputs["A"].Value
|
|
ent.Values.B = self.Entity.Inputs["B"].Value
|
|
ent.Values.C = self.Entity.Inputs["C"].Value
|
|
ent.Values.D = self.Entity.Inputs["D"].Value
|
|
ent.Values.E = self.Entity.Inputs["E"].Value
|
|
ent.Values.F = self.Entity.Inputs["F"].Value
|
|
ent.Values.G = self.Entity.Inputs["G"].Value
|
|
ent.Values.H = self.Entity.Inputs["H"].Value
|
|
end
|
|
end
|
|
self.Entity:NextThink(CurTime()+0.125)
|
|
end
|
|
|
|
function ENT:ShowOutput()
|
|
self:SetOverlayText( "Data Transferer" )
|
|
end
|
|
|
|
function ENT:OnRestore()
|
|
Wire_Restored(self.Entity)
|
|
end
|
|
|
|
function ENT:RecieveValue(output,value)
|
|
self.Activated = true
|
|
self.ActivateTime = CurTime()
|
|
Wire_TriggerOutput(self.Entity,output,value)
|
|
end |