AddCSLuaFile( "cl_init.lua" )
AddCSLuaFile( "shared.lua" )
util.PrecacheSound( "Airboat_engine_idle" )
util.PrecacheSound( "Airboat_engine_stop" )
util.PrecacheSound( "apc_engine_start" )
include('shared.lua')
local Ground = 1 + 0 + 2 + 8 + 32
local Juice_Increment = 80
local Energy_Increment = 10
function ENT:Initialize()
self.BaseClass.Initialize(self)
self.Active = 0
self.overdrive = 0
self.damaged = 0
self.lastused = 0
LS_RegisterEnt(self.Entity, "Generator")
if not (WireAddon == nil) then
self.WireDebugName = self.PrintName
self.Inputs = Wire_CreateInputs(self.Entity, { "On", "Overdrive" })
self.Outputs = Wire_CreateOutputs(self.Entity, {"On", "Overdrive" })
end
end
function ENT:TurnOn()
self.Entity:EmitSound( "Airboat_engine_idle" )
self.Active = 1
if not (WireAddon == nil) then Wire_TriggerOutput(self.Entity, "On", self.Active) end
if ( self.overdrive == 1 ) then
self:TurnOnOverdrive()
else
self:SetOOO(1)
end
end
function ENT:TurnOff()
self.Entity:StopSound( "Airboat_engine_idle" )
self.Entity:EmitSound( "Airboat_engine_stop" )
self.Entity:StopSound( "apc_engine_start" )
self.Active = 0
self.overdrive = 0
if not (WireAddon == nil) then Wire_TriggerOutput(self.Entity, "On", self.Active) end
self:SetOOO(0)
end
function ENT:TurnOnOverdrive()
if ( self.Active == 1 ) then
self.Entity:StopSound( "Airboat_engine_idle" )
self.Entity:EmitSound( "Airboat_engine_idle" )
self.Entity:EmitSound( "apc_engine_start" )
self:SetOOO(2)
end
self.overdrive = 1
if not (WireAddon == nil) then Wire_TriggerOutput(self.Entity, "Overdrive", self.overdrive) end
end
function ENT:TurnOffOverdrive()
if ( self.Active == 1 ) then
self.Entity:StopSound( "Airboat_engine_idle" )
self.Entity:EmitSound( "Airboat_engine_idle" )
self.Entity:StopSound( "apc_engine_start" )
self:SetOOO(1)
end
self.overdrive = 0
if not (WireAddon == nil) then Wire_TriggerOutput(self.Entity, "Overdrive", self.overdrive) end
end
function ENT:SetActive( value )
if (value) then
if (value != 0 and self.Active == 0 ) then
self:TurnOn()
elseif (value == 0 and self.Active == 1 ) then
self:TurnOff()
end
else
if ( self.Active == 0 ) then
self.lastused = CurTime()
self:TurnOn()
else
if ((( CurTime() - self.lastused) < 2 ) and ( self.overdrive == 0 )) then
self:TurnOnOverdrive()
else
self.overdrive = 0
self:TurnOff()
end
end
end
end
function ENT:TriggerInput(iname, value)
if (iname == "On") then
self:SetActive(value)
elseif (iname == "Overdrive") then
if (value ~= 0) then
self:TurnOnOverdrive()
else
self:TurnOffOverdrive()
end
end
end
function ENT:Damage()
if (self.damaged == 0) then
self.damaged = 1
end
if ((self.Active == 1) and (math.random(1, 10) <= 4)) then
self:TurnOff()
end
end
function ENT:Repair()
self.Entity:SetColor(255, 255, 255, 255)
self.health = self.maxhealth
self.damaged = 0
end
function ENT:Destruct()
LS_Destruct( self.Entity, true )
end
function ENT:OnRemove()
self.BaseClass.OnRemove(self)
self.Entity:StopSound( "Airboat_engine_idle" )
end
function ENT:Pump_Terrajuice()
local energy = RD_GetResourceAmount(self, "energy")
local water = RD_GetResourceAmount(self, "water")
local rtc = RD_GetResourceAmount(self, "redterracrystal")
local gtc = RD_GetResourceAmount(self, "greenterracrystal")
local coolant = RD_GetResourceAmount(self, "coolant")
local einc = Energy_Increment + (self.overdrive*Energy_Increment*3)
local inc = Juice_Increment
if ( self.overdrive == 1 ) then
inc = inc * 3
DamageLS(self, math.random(2, 3))
end
RD_ConsumeResource(self, "energy", einc)
RD_ConsumeResource(self, "coolant", einc/2)
RD_ConsumeResource(self, "water", 5)
RD_SupplyResource(self, "terrajuice", inc)
end
function ENT:Think()
self.BaseClass.Think(self)
if ( self.Active == 1 ) then self:Pump_Terrajuice() end
self.Entity:NextThink( CurTime() + 1 )
return true
end