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

140 lines
4.0 KiB
Lua
Raw Normal View History

AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")
2007-02-04 01:16:06 +00:00
ENT.WireDebugName = "Adv. Input"
ENT.OverlayDelay = 0.1
ENT.OverlayRandom = 0.025
local MODEL = Model("models/jaanus/wiretool/wiretool_input.mdl")
function ENT:Initialize()
self.Entity:SetModel( MODEL )
self.Entity:PhysicsInit( SOLID_VPHYSICS )
self.Entity:SetMoveType( MOVETYPE_VPHYSICS )
self.Entity:SetSolid( SOLID_VPHYSICS )
self.Inputs = Wire_CreateInputs(self.Entity,{"Reset"})
self.Outputs = Wire_CreateOutputs(self.Entity,{"Out"})
2007-02-04 01:16:06 +00:00
end
function ENT:Setup(key_more,key_less,toggle,value_min,value_max,value_start,speed)
2007-02-04 01:16:06 +00:00
self.KeyMore = key_more
self.KeyLess = key_less
self.Toggle = (toggle == 1)
self.ValueMin = value_min
self.ValueMax = value_max
self.Value = value_start
self.Value_Start = value_start
2007-02-04 01:16:06 +00:00
self.Speed = speed
self:ShowOutput()
Wire_TriggerOutput(self.Entity,"Out",self.Value)
2007-02-04 01:16:06 +00:00
end
function ENT:TriggerInput(iname, value)
if(iname == "Reset")then
if(value != 0)then
self.Value = self.Value_Start
self:ShowOutput()
Wire_TriggerOutput(self.Entity,"Out",self.Value)
end
end
end
function ENT:InputActivate(mul)
if (self.Toggle) then
2007-02-04 01:16:06 +00:00
return self:Switch( !self.On, mul )
end
return self:Switch( true, mul )
end
function ENT:InputDeactivate( mul )
if (self.Toggle) then return true end
2007-02-04 01:16:06 +00:00
return self:Switch( false, mul )
end
function ENT:Switch( on, mul )
if (!self.Entity:IsValid()) then return false end
self.On = on
if(on) then
2007-02-04 01:16:06 +00:00
self.dir = mul
else
self.dir = 0
end
return true
end
function ENT:Think()
self.BaseClass.Think(self)
local timediff = CurTime()-(self.LastThink or 0)
2007-02-04 01:16:06 +00:00
self.LastThink = (self.LastThink or 0)+timediff
if (self.On == true) then
self.Value = self.Value+self.Speed*timediff*self.dir
2007-02-04 01:16:06 +00:00
if (self.Value < self.ValueMin) then
self.Value = self.ValueMin
elseif (self.Value > self.ValueMax) then
self.Value = self.ValueMax
end
self:ShowOutput()
Wire_TriggerOutput(self.Entity,"Out",self.Value)
2007-02-04 01:16:06 +00:00
self.Entity:NextThink(CurTime()+0.02)
return true
end
end
function ENT:ShowOutput()
self:SetOverlayText("(" .. self.ValueMin .. " - " .. self.ValueMax .. ") = " .. self.Value)
2007-02-04 01:16:06 +00:00
end
local function On( pl, ent, mul )
if (!ent:IsValid()) then return false end
return ent:InputActivate( mul )
end
local function Off( pl, ent, mul )
if (!ent:IsValid()) then return false end
return ent:InputDeactivate( mul )
end
numpad.Register( "WireAdvInput_On",On)
numpad.Register( "WireAdvInput_Off",Off)
function MakeWireAdvInput( pl, Pos, Ang, keymore, keyless, toggle, value_min, value_max, value_start, speed, Vel, aVel, frozen )
if ( !pl:CheckLimit( "wire_adv_inputs" ) ) then return false end
local wire_adv_input = ents.Create( "gmod_wire_adv_input" )
if (!wire_adv_input:IsValid()) then return false end
wire_adv_input:SetAngles( Ang )
wire_adv_input:SetPos( Pos )
wire_adv_input:SetModel( Model("models/jaanus/wiretool/wiretool_input.mdl") )
wire_adv_input:Spawn()
wire_adv_input:Setup( keymore, keyless, toggle, value_min, value_max, value_start, speed )
wire_adv_input:SetPlayer( pl )
numpad.OnDown( pl, keymore, "WireAdvInput_On", wire_adv_input, 1 )
numpad.OnUp( pl, keymore, "WireAdvInput_Off", wire_adv_input, 1 )
numpad.OnDown( pl, keyless, "WireAdvInput_On", wire_adv_input, -1 )
numpad.OnUp( pl, keyless, "WireAdvInput_Off", wire_adv_input, -1 )
local ttable = {
keymore = keymore,
keyless = keyless,
toggle = toggle,
value_min = value_min,
value_max = value_max,
value_start = value_start,
speed = speed,
pl = pl
}
table.Merge(wire_adv_input:GetTable(), ttable )
pl:AddCount( "wire_adv_inputs", wire_adv_input )
return wire_adv_input
end
duplicator.RegisterEntityClass("gmod_wire_adv_input", MakeWireAdvInput, "Pos", "Ang", "keymore", "keyless", "toggle", "value_min", "value_max", "value_start", "speed", "Vel", "aVel", "frozen")