wiremod-svn-archive/wire/lua/entities/gmod_wire_pod/init.lua

135 lines
3.3 KiB
Lua
Raw Normal View History

2007-03-19 19:43:40 +00:00
AddCSLuaFile( "cl_init.lua" )
AddCSLuaFile( "shared.lua" )
include('shared.lua')
ENT.WireDebugName = "Pod Controller"
local MODEL = Model("models/jaanus/wiretool/wiretool_siren.mdl")
function ENT:Initialize()
self.Entity:SetModel( MODEL )
self.Entity:PhysicsInit( SOLID_VPHYSICS )
self.Entity:SetMoveType( MOVETYPE_VPHYSICS )
self.Entity:SetSolid( SOLID_VPHYSICS )
-- Output keys. Format: keys["name"] = IN_*
keys = { }
keys["W"] = IN_FORWARD
keys["A"] = IN_MOVELEFT
keys["S"] = IN_BACK
keys["D"] = IN_MOVERIGHT
keys["Mouse1"] = IN_ATTACK
keys["R"] = IN_RELOAD
-- Invert the table to use it with Wire_CreateOutputs
local outputs = { }
local n = 1
for k, v in pairs( keys ) do
outputs[n] = k
n = n + 1
end
2007-05-05 01:54:41 +00:00
n = n + 1
outputs[n] = "Active"
2007-05-05 01:54:41 +00:00
self.VPos = Vector(0, 0, 0)
2007-03-19 19:43:40 +00:00
-- Create outputs
self.Outputs = Wire_CreateOutputs( self.Entity, outputs )
2007-04-22 09:08:30 +00:00
self:SetOverlayText( "Pod Controller" )
2007-03-19 19:43:40 +00:00
end
-- Link to pod
function ENT:Setup( pod )
self.Pod = pod
self.TTLFP = CurTime()
end
-- No inputs
function ENT:TriggerInput(iname, value)
end
function ENT:ShowOutput(value)
if (value ~= self.PrevOutput) then
2007-04-22 09:08:30 +00:00
self:SetOverlayText( "Pod Controller" )
2007-03-19 19:43:40 +00:00
self.PrevOutput = value
end
end
function ENT:OnRestore()
2007-03-23 06:51:08 +00:00
keys = { }
keys["W"] = IN_FORWARD
keys["A"] = IN_MOVELEFT
keys["S"] = IN_BACK
keys["D"] = IN_MOVERIGHT
keys["Mouse1"] = IN_ATTACK
keys["R"] = IN_RELOAD
2007-04-22 09:08:30 +00:00
self.BaseClass.OnRestore(self)
2007-03-19 19:43:40 +00:00
end
-- Called every 0.01 seconds, check for key down
function ENT:Think()
-- Check that we have a pod
if self.Pod then
-- Check if we should look for player entering/exiting the vehicle TTLFP = TimeToLookForPod
if self.TTLFP < CurTime() then
2007-05-05 01:54:41 +00:00
-- Check if the old player still is in our vehicle
2007-03-19 19:43:40 +00:00
if !(self.Ply and self.Ply:GetVehicle() == self.Pod) then
-- Get all players
local plys = player.GetAll()
self.Ply = nil
-- Loop through all players and check if their vehicle is our vehicle
for k,v in pairs(plys) do
if v:GetVehicle() == self.Pod then self.Ply = v end
end
if self.Ply then Wire_TriggerOutput( self.Entity, "Active", 1)
else Wire_TriggerOutput( self.Entity, "Active", 0) end
2007-03-19 19:43:40 +00:00
end
-- Look for players again in 1/10 second
self.TTLFP = CurTime() + 0.1
end
if self.Ply then
-- Loop through all the keys, and check if they was pressed last frame
for k, v in pairs( keys ) do
if self.Ply:KeyDownLast( v ) then Wire_TriggerOutput( self.Entity, k, 1 )
else Wire_TriggerOutput( self.Entity, k, 0 ) end
end
2007-05-05 01:54:41 +00:00
self.VPos = self.Ply:GetEyeTrace().HitPos
2007-03-19 19:43:40 +00:00
end
end
self.Entity:NextThink(CurTime() + 0.01)
return true
end
2007-05-05 01:54:41 +00:00
function ENT:GetBeaconPos(sensor)
return self.VPos
end
//Duplicator support to save pod link (TAD2020)
function ENT:BuildDupeInfo()
local info = self.BaseClass.BuildDupeInfo(self) or {}
if (self.Pod) and (self.Pod:IsValid()) then
info.pod = self.Pod:EntIndex()
end
return info
end
function ENT:ApplyDupeInfo(ply, ent, info, GetEntByID)
self.BaseClass.ApplyDupeInfo(self, ply, ent, info, GetEntByID)
if (info.pod) then
self.Pod = GetEntByID(info.pod)
if (!self.Pod) then
self.Pod = ents.GetByIndex(info.pod)
end
end
end