wiremod-svn-archive/wire/lua/entities/gmod_wire_data_transferer/init.lua
2008-06-14 00:55:20 +00:00

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