mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
227 lines
4.3 KiB
Lua
227 lines
4.3 KiB
Lua
|
|
--[[
|
||
|
|
| This file was obtained through the combined efforts
|
||
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
||
|
|
|
|
||
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
||
|
|
|
|
||
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||
|
|
--]]
|
||
|
|
|
||
|
|
include("shared.lua")
|
||
|
|
include( "sh_weapons.lua" )
|
||
|
|
include( "cl_effects.lua" )
|
||
|
|
include( "cl_hud.lua" )
|
||
|
|
include( "cl_seatswitcher.lua" )
|
||
|
|
include( "cl_trailsystem.lua" )
|
||
|
|
include( "cl_boneposeparemeter.lua" )
|
||
|
|
|
||
|
|
local Zoom = 0
|
||
|
|
|
||
|
|
function ENT:LVSCalcFov( fov, ply )
|
||
|
|
|
||
|
|
local TargetZoom = ply:lvsKeyDown( "ZOOM" ) and 0 or 1
|
||
|
|
|
||
|
|
Zoom = Zoom + (TargetZoom - Zoom) * RealFrameTime() * 10
|
||
|
|
|
||
|
|
local newfov = fov * Zoom + (self.ZoomFov or 40) * (1 - Zoom)
|
||
|
|
|
||
|
|
return newfov
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:LVSCalcView( ply, pos, angles, fov, pod )
|
||
|
|
return LVS:CalcView( self, ply, pos, angles, fov, pod )
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:PreDraw( flags )
|
||
|
|
return true
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:PreDrawTranslucent( flags )
|
||
|
|
return true
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:PostDraw( flags )
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:PostDrawTranslucent( flags )
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:Draw( flags )
|
||
|
|
if self:PreDraw( flags ) then
|
||
|
|
if self.lvsLegacyDraw then
|
||
|
|
self:DrawModel() -- ugly, but required in order to fix old addons. Refract wont work on these.
|
||
|
|
else
|
||
|
|
self:DrawModel( flags )
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
self:PostDraw( flags )
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:DrawTranslucent( flags )
|
||
|
|
self:DrawTrail()
|
||
|
|
|
||
|
|
if self:PreDrawTranslucent( flags ) then
|
||
|
|
self:DrawModel( flags )
|
||
|
|
else
|
||
|
|
self.lvsLegacyDraw = true -- insert puke simley
|
||
|
|
end
|
||
|
|
|
||
|
|
self:PostDrawTranslucent( flags )
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:Initialize()
|
||
|
|
self:OnSpawn()
|
||
|
|
|
||
|
|
if not istable( self.GibModels ) then return end
|
||
|
|
|
||
|
|
for _, modelName in ipairs( self.GibModels ) do
|
||
|
|
util.PrecacheModel( modelName )
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:OnSpawn()
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:OnFrameActive()
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:OnFrame()
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:OnEngineActiveChanged( Active )
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:OnActiveChanged( Active )
|
||
|
|
end
|
||
|
|
|
||
|
|
ENT._oldActive = false
|
||
|
|
ENT._oldEnActive = false
|
||
|
|
|
||
|
|
function ENT:HandleActive()
|
||
|
|
local EntTable = self:GetTable()
|
||
|
|
|
||
|
|
local Active = self:GetActive()
|
||
|
|
local EngineActive = self:GetEngineActive()
|
||
|
|
local ActiveChanged = false
|
||
|
|
|
||
|
|
if EntTable._oldActive ~= Active then
|
||
|
|
EntTable._oldActive = Active
|
||
|
|
EntTable:OnActiveChanged( Active )
|
||
|
|
ActiveChanged = true
|
||
|
|
end
|
||
|
|
|
||
|
|
if EntTable._oldEnActive ~= EngineActive then
|
||
|
|
EntTable._oldEnActive = EngineActive
|
||
|
|
self:OnEngineActiveChanged( EngineActive )
|
||
|
|
ActiveChanged = true
|
||
|
|
end
|
||
|
|
|
||
|
|
if ActiveChanged then
|
||
|
|
if Active or EngineActive then
|
||
|
|
self:StartWindSounds()
|
||
|
|
else
|
||
|
|
self:StopWindSounds()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
if Active or EngineActive then
|
||
|
|
self:DoVehicleFX()
|
||
|
|
end
|
||
|
|
|
||
|
|
self:FlyByThink()
|
||
|
|
|
||
|
|
return EngineActive
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:Think()
|
||
|
|
if not self:IsInitialized() then return end
|
||
|
|
|
||
|
|
if self:HandleActive() then
|
||
|
|
self:OnFrameActive()
|
||
|
|
end
|
||
|
|
|
||
|
|
self:HandleTrail()
|
||
|
|
self:OnFrame()
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:OnRemove()
|
||
|
|
self:StopEmitter()
|
||
|
|
self:StopWindSounds()
|
||
|
|
self:StopFlyBy()
|
||
|
|
self:StopDeathSound()
|
||
|
|
|
||
|
|
self:OnRemoved()
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:OnRemoved()
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:CalcDoppler( Ent )
|
||
|
|
if not IsValid( Ent ) then return 1 end
|
||
|
|
|
||
|
|
if Ent:IsPlayer() then
|
||
|
|
local ViewEnt = Ent:GetViewEntity()
|
||
|
|
local Vehicle = Ent:lvsGetVehicle()
|
||
|
|
|
||
|
|
if IsValid( Vehicle ) then
|
||
|
|
if Ent == ViewEnt then
|
||
|
|
Ent = Vehicle
|
||
|
|
end
|
||
|
|
else
|
||
|
|
if IsValid( ViewEnt ) then
|
||
|
|
Ent = ViewEnt
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local sVel = self:GetVelocity()
|
||
|
|
local oVel = Ent:GetVelocity()
|
||
|
|
|
||
|
|
local SubVel = oVel - sVel
|
||
|
|
local SubPos = self:GetPos() - Ent:GetPos()
|
||
|
|
|
||
|
|
local DirPos = SubPos:GetNormalized()
|
||
|
|
local DirVel = SubVel:GetNormalized()
|
||
|
|
|
||
|
|
local A = math.acos( math.Clamp( DirVel:Dot( DirPos ) ,-1,1) )
|
||
|
|
|
||
|
|
return (1 + math.cos( A ) * SubVel:Length() / 13503.9)
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:GetCrosshairFilterEnts()
|
||
|
|
if not self:IsInitialized() then return { self } end -- wait for the server to be ready
|
||
|
|
|
||
|
|
if not istable( self.CrosshairFilterEnts ) then
|
||
|
|
self.CrosshairFilterEnts = {self}
|
||
|
|
|
||
|
|
-- lets ask the server to build the filter for us because it has access to constraint.GetAllConstrainedEntities()
|
||
|
|
net.Start( "lvs_player_request_filter" )
|
||
|
|
net.WriteEntity( self )
|
||
|
|
net.SendToServer()
|
||
|
|
end
|
||
|
|
|
||
|
|
return self.CrosshairFilterEnts
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:FlyByThink()
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:StopFlyBy()
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:StopDeathSound()
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:OnDestroyed()
|
||
|
|
end
|
||
|
|
|
||
|
|
net.Receive( "lvs_vehicle_destroy", function( len )
|
||
|
|
local ent = net.ReadEntity()
|
||
|
|
|
||
|
|
if not IsValid( ent ) or not isfunction( ent.OnDestroyed ) then return end
|
||
|
|
|
||
|
|
ent:OnDestroyed()
|
||
|
|
end )
|