Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 40 additions & 12 deletions lua/glide/client/lock_on.lua
Original file line number Diff line number Diff line change
Expand Up @@ -153,22 +153,50 @@ function LockOnHandler:Think()
end
end

local isInVehicle = false
local glideVehicle = nil
local GetParent = FindMetaTable( "Entity" ).GetParent
local GetVehicle = FindMetaTable( "Player" ).GetVehicle
local IsValid = IsValid

local function EnterVehicle( vehicle )
if not IsValid( vehicle ) then return end
local vehicleSelect = IsValid( GetParent( vehicle ) ) and GetParent( vehicle ) or vehicle
if glideVehicle == vehicleSelect then return end

LockOnHandler:Setup( vehicleSelect )
glideVehicle = vehicleSelect
end

timer.Create( "Glide.LockOnEnableCheck", 0.5, 0, function()
local user = LocalPlayer()
if not IsValid( user ) then return end
hook.Add( "Glide_OnLocalEnterVehicle", "Glide.LockOnHandlerSetup", EnterVehicle )
hook.Add( "Glide_OnLocalEnterNotGlideVehicle", "Glide.LockOnHandlerSetup", function( vehicle )
-- In vehicle systems, a passenger's GetParent is nil. Moving to the next frame isn't enough; you need to add 0.1 seconds.
timer.Create( "Glide.LockOnHandlerSetup", 0.1, 1, function()
EnterVehicle( vehicle )
end )
end )

local veh = user:GetVehicle()
local function ExitVehicle( bIsGlide )
timer.Simple( 0.5, function()
local ply = LocalPlayer()
if not IsValid( ply ) then return end

if IsValid( veh ) then
if not isInVehicle then
isInVehicle = true
LockOnHandler:Setup( veh )
local vehicle = ply:GlideGetVehicle()
if not bIsGlide then
local vehicleTarget = GetVehicle( ply )
vehicle = IsValid( vehicleTarget ) and GetParent( vehicleTarget ) or vehicleTarget
end

elseif isInVehicle then
isInVehicle = false
if IsValid( vehicle ) and glideVehicle == vehicle then return end

LockOnHandler:Cleanup()
end
glideVehicle = nil
end )
end

hook.Add( "Glide_OnLocalExitVehicle", "Glide.LockOnHandlerCleanup", function()
ExitVehicle( true )
end )

hook.Add( "Glide_OnLocalExitNotGlideVehicle", "Glide.LockOnHandlerCleanup", function()
ExitVehicle( false )
end )
13 changes: 13 additions & 0 deletions lua/glide/client/network.lua
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,19 @@ commands[Glide.CMD_FORCE_THIRDPERSON] = function()
Glide.Camera:SetFirstPerson( not useThirdPerson )
end

commands[Glide.CMD_MANAGE_VEHICLE] = function()
local action = net.ReadUInt( 2 )
local seat = net.ReadEntity()

if not IsValid( seat ) then return end

if action == 1 then
hook.Run( "Glide_OnLocalEnterNotGlideVehicle", seat, LocalPlayer() )
elseif action == 2 then
hook.Run( "Glide_OnLocalExitNotGlideVehicle", seat, LocalPlayer() )
end
end

net.Receive( "glide.command", function()
local cmd = net.ReadUInt( Glide.CMD_SIZE )

Expand Down
20 changes: 18 additions & 2 deletions lua/glide/server/events.lua
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,15 @@ hook.Add( "PlayerEnteredVehicle", "Glide.OnEnterSeat", function( ply, seat )

-- Make sure this seat was created by Glide
local seatIndex = seat.GlideSeatIndex
if not seatIndex then return end
if not seatIndex then

Glide.StartCommand( Glide.CMD_MANAGE_VEHICLE, false )
net.WriteUInt( 1, 2 ) -- 1 = Entered
net.WriteEntity( seat )
net.Send( ply )

return
end

-- Is this seat's parent a Glide vehicle?
local parent = seat:GetParent()
Expand Down Expand Up @@ -61,7 +69,15 @@ end )
-- Once a player leaves a Glide vehicle, cleanup network variables
-- and trigger the `Glide_OnExitVehicle` hook.
hook.Add( "PlayerLeaveVehicle", "Glide.OnExitSeat", function( ply, seat )
if not ply.IsUsingGlideVehicle then return end
if not ply.IsUsingGlideVehicle then

Glide.StartCommand( Glide.CMD_MANAGE_VEHICLE, false )
net.WriteUInt( 2, 2 ) -- 2 = Exited
net.WriteEntity( seat )
net.Send( ply )

return
end

local seatIndex = seat.GlideSeatIndex
if not seatIndex then return end
Expand Down
2 changes: 1 addition & 1 deletion lua/glide/sh_network.lua
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Glide.CMD_VIEW_PUNCH = 5
Glide.CMD_SET_HEADLIGHTS = 6
Glide.CMD_NOTIFY = 7
Glide.CMD_SHOW_KEY_NOTIFICATION = 8
-- Slot 9 is free
Glide.CMD_MANAGE_VEHICLE = 9
Glide.CMD_UPLOAD_ENGINE_STREAM_PRESET = 10
Glide.CMD_UPLOAD_MISC_SOUNDS_PRESET = 11
Glide.CMD_RELOAD_VSWEP = 13
Expand Down
Loading