@@ -665,11 +665,14 @@ function ENT:Think()
665665 self :NextThink ( time )
666666
667667 -- Update speed variables
668- selfTbl .localVelocity = self :WorldToLocal ( self :GetPos () + self :GetVelocity () )
668+ local pos = self :GetPos ()
669+ local velocity = self :GetVelocity ()
670+ velocity :Add ( pos )
671+
672+ selfTbl .localVelocity = self :WorldToLocal ( velocity )
669673 selfTbl .totalSpeed = selfTbl .localVelocity :Length ()
670674
671675 local forwardSpeed = selfTbl .localVelocity [1 ]
672-
673676 selfTbl .forwardAcceleration = ( forwardSpeed - selfTbl .forwardSpeed ) / dt
674677 selfTbl .forwardSpeed = forwardSpeed
675678
@@ -679,25 +682,25 @@ function ENT:Think()
679682 local driverSeat = selfTbl .seats [1 ]
680683 local driver = IsValid ( driverSeat ) and driverSeat :GetDriver () or NULL
681684
682- if driver ~= self : GetDriver () then
683- self : SetDriver ( driver )
684- self : ClearLockOnTarget ()
685+ if driver ~= selfTbl . GetDriver ( self ) then
686+ selfTbl . SetDriver ( self , driver )
687+ selfTbl . ClearLockOnTarget ( self )
685688
686689 if IsValid ( driver ) then
687690 if TriggerOutput then
688691 TriggerOutput ( self , " Active" , 1 )
689692 TriggerOutput ( self , " Driver" , driver )
690693 end
691694
692- self : OnDriverEnter ()
695+ selfTbl . OnDriverEnter ( self )
693696 selfTbl .lastDriver = driver
694697 else
695698 if TriggerOutput then
696699 TriggerOutput ( self , " Active" , 0 )
697700 TriggerOutput ( self , " Driver" , NULL )
698701 end
699702
700- self : OnDriverExit ()
703+ selfTbl . OnDriverExit ( self )
701704 end
702705
703706 selfTbl .hasTheDriverBeenRagdolled = nil
@@ -706,16 +709,16 @@ function ENT:Think()
706709
707710 -- Update weapons
708711 if selfTbl .weaponCount > 0 then
709- self : WeaponThink ( selfTbl )
712+ selfTbl . WeaponThink ( self , selfTbl )
710713 end
711714
712715 -- Update water logic
713- self : WaterThink ( selfTbl )
716+ selfTbl . WaterThink ( self , selfTbl )
714717
715718 -- Deal engine fire damage over time
716- if self : GetIsEngineOnFire () then
719+ if selfTbl . GetIsEngineOnFire ( self ) then
717720 if self :WaterLevel () > 2 then
718- self : SetIsEngineOnFire ( false )
721+ selfTbl . SetIsEngineOnFire ( self , false )
719722 else
720723 local attacker = IsValid ( selfTbl .lastDamageAttacker ) and selfTbl .lastDamageAttacker or self
721724 local inflictor = IsValid ( selfTbl .lastDamageInflictor ) and selfTbl .lastDamageInflictor or self
@@ -726,42 +729,42 @@ function ENT:Think()
726729 dmg :SetInflictor ( inflictor )
727730 dmg :SetDamageType ( 0 )
728731 dmg :SetDamageForce ( Vector () )
729- dmg :SetDamagePosition ( self : GetPos () )
732+ dmg :SetDamagePosition ( pos )
730733 self :TakeDamageInfo ( dmg )
731734 end
732735 end
733736
734737 -- Update wheels
735738 if selfTbl .wheelCount > 0 then
736- self : WheelThink ( dt , selfTbl )
739+ selfTbl . WheelThink ( self , dt , selfTbl )
737740 end
738741
739742 -- Update trailer sockets
740743 if selfTbl .socketCount > 0 then
741- self : SocketThink ( dt , time )
744+ selfTbl . SocketThink ( self , dt , time , selfTbl )
742745 end
743746
744747 -- Handle hold input actions
745748 for action , data in pairs ( selfTbl .holdInputActions ) do
746749 -- If this action has been held for long enough...
747750 if data .timer and time > data .timer then
748751 data .timer = nil
749- self : OnHoldInputAction ( action , data )
752+ selfTbl . OnHoldInputAction ( self , action , data )
750753
751754 elseif data .shouldRelease then
752755 data .shouldRelease = nil
753- self : SetInputBool ( 1 , action , false )
756+ selfTbl . SetInputBool ( self , 1 , action , false )
754757 end
755758 end
756759
757760 -- Update bodygroups
758- self : UpdateLightBodygroups ()
761+ selfTbl . UpdateLightBodygroups ( self , selfTbl )
759762
760763 -- Let children classes do their own stuff
761- self : OnPostThink ( dt , selfTbl )
764+ selfTbl . OnPostThink ( self , dt , selfTbl )
762765
763766 -- Let children classes update their features
764- self : OnUpdateFeatures ( dt )
767+ selfTbl . OnUpdateFeatures ( self , dt )
765768
766769 local phys = self :GetPhysicsObject ()
767770
@@ -775,10 +778,10 @@ function ENT:Think()
775778 -- Make sure the physics stay awake when necessary,
776779 -- otherwise the driver's input won't do anything.
777780 local driverInput =
778- self : GetInputFloat ( 1 , " accelerate" , selfTbl ) +
779- self : GetInputFloat ( 1 , " brake" , selfTbl ) +
780- self : GetInputFloat ( 1 , " steer" , selfTbl ) +
781- self : GetInputFloat ( 1 , " throttle" , selfTbl )
781+ selfTbl . GetInputFloat ( self , 1 , " accelerate" , selfTbl ) +
782+ selfTbl . GetInputFloat ( self , 1 , " brake" , selfTbl ) +
783+ selfTbl . GetInputFloat ( self , 1 , " steer" , selfTbl ) +
784+ selfTbl . GetInputFloat ( self , 1 , " throttle" , selfTbl )
782785
783786 if phys :IsAsleep () and Abs ( driverInput ) > 0.01 then
784787 phys :Wake ()
0 commit comments