Discord
Steam
/
Garry's Mod
/
Developers
/
How do I make ..
Login/Join
Event Log
How do I make a vehicle have proper third-person?
0 replies, posted
Search
In This Thread
So I want my ODST drop pod to have a nice third person view. The current view only shows what is inside of the pod, and it's pretty annoying. [url]http://imgur.com/h56XQKU[/url] Yuck. I know that CalcView is used, but I don't know how to apply it (I'm abysmal at lua) Here's the code to the Drop pod: [lua] AddCSLuaFile( "cl_init.lua" ) AddCSLuaFile( "shared.lua" ) include("shared.lua") function ENT:Initialize() self.Entity:SetModel( self.Model ) self.Entity:PhysicsInit( SOLID_VPHYSICS ) self.Entity:SetMoveType( MOVETYPE_VPHYSICS ) self.Entity:SetSolid( SOLID_VPHYSICS ) self.Entity:SetUseType(SIMPLE_USE) local phys = self.Entity:GetPhysicsObject() if (phys:IsValid()) then phys:Wake() end if (self.Entity.Door == nil) then local doormodel = ents.Create( "odst_pod_door" ) doormodel:SetPos( self.Entity:GetPos() ) doormodel:SetAngles(self.Entity:GetAngles()) doormodel:Spawn() doormodel:GetPhysicsObject():SetMass( 1 ) doormodel:GetPhysicsObject():EnableDrag( false ) doormodel:SetParent(self.Entity) constraint.Weld(self.Entity, doormodel, 0, 0, 0, true) doormodel.pod = self.Entity self.Door = doormodel constraint.NoCollide( self.Entity, doormodel, 0, 0 ) end if (self.Seat == nil) then local seat = ents.Create( "prop_vehicle_prisoner_pod" ) seat:SetModel( "models/Nova/airboat_seat.mdl" ) local seatoff = Vector( 0, 5, 32 ) seatoff:Rotate (self:GetAngles()) seat:SetPos( self.Entity:GetPos() + seatoff ) seat:SetAngles(self:GetAngles() + Angle( 0, 0, -10 )) seat:SetKeyValue("vehiclescript", "scripts/vehicles/prisoner_pod.txt") seat:SetKeyValue("limitview", 0) seat:Spawn() seat:Activate() local seatTB = seat:GetTable() seatTB.HandleAnimation = function (vec, ply) return ply:SelectWeightedSequence( ACT_HL2MP_SIT ) end seat:SetTable(seatTB) seat.HPType = "Vehicle" seat.APPos = Vector(-20,0,-46) seat.APAng = Angle(0,0,180) seat:SetParent(self.Entity) constraint.Weld(self.Entity, seat, 0, 0, 0, true) self.Seat = seat self.Seat:SetColor( 255, 255, 255, 0 ) end if (self.Entity.R == nil) then local rmodel = ents.Create( "odst_pod_r" ) rmodel:SetPos( self.Entity:GetPos() ) rmodel:SetAngles(self.Entity:GetAngles()) rmodel:Spawn() rmodel:GetPhysicsObject():SetMass( 1 ) rmodel:SetParent(self.Entity) rmodel.pod = self.Entity constraint.Weld(self.Entity, rmodel, 0, 0, 0, true) self.R = rmodel constraint.NoCollide( self.Entity, rmodel, 0, 0 ) end if (self.Entity.L == nil) then local lmodel = ents.Create( "odst_pod_l" ) lmodel:SetPos( self.Entity:GetPos() ) lmodel:SetAngles(self.Entity:GetAngles()) lmodel:Spawn() lmodel:GetPhysicsObject():SetMass( 1 ) lmodel:SetParent(self.Entity) lmodel.pod = self.Entity constraint.Weld(self.Entity, lmodel, 0, 0, 0, true) self.L = lmodel constraint.NoCollide( self.Entity, lmodel, 0, 0 ) end self.podsound = CreateSound( self.Entity, self.ChuteSnds ) end --------dev functions function ENT:showbox( posone, postwo ) local effectdata = EffectData() effectdata:SetStart( postwo ) effectdata:SetOrigin( posone ) effectdata:SetScale( 1 ) util.Effect( "HelicopterMegaBomb", effectdata ) end -------- function ENT:landcheck() local podang = self.Entity:GetAngles() local podphys = self.Entity:GetPhysicsObject() local boxpos1 = Vector( -15, -15, -30 ) local boxpos2 = Vector( 15, 15, -10 ) boxpos1:Rotate (self.Entity:GetAngles()) boxpos2:Rotate (self.Entity:GetAngles()) local boxmin = boxpos1 + self.Entity:GetPos() local boxmax = boxpos2 + self.Entity:GetPos() local scanbox = ents.FindInBox( boxmin, boxmax ) local parentent = nil local skipw = false for k, v in pairs( scanbox ) do if v != self.Entity && v != self.Entity.Door && v != self.Entity.Chute && v:GetPhysicsObject():IsValid() then if skipw == false && v:IsWorld() then skipw = true parentent = v elseif parentent == nil && skipw == false then parentent = v elseif skipw == false then if !parentent:IsWorld() && !v:IsWorld() && v:GetPhysicsObject():IsValid() && parentent:GetPhysicsObject():IsValid() then if parentent:GetPhysicsObject():GetVolume() < v:GetPhysicsObject():GetVolume() then parentent = v end end end end end if podang.p > -15 && podang.p < 15 && podang.r > -15 && podang.r < 15 then if parentent != nil && parentent:IsValid() then if parentent:IsWorld() then podphys:EnableMotion( false ) self:SetNetworkedInt( "odstpodstat", 5 ) sound.Play( self.LandSnds[ math.random( 1, 3 ) ], self:GetPos(), 100, 100 ) self.Stage = 6 else timer.Simple(0, function() constraint.Weld( self.Entity, parentent, 0, 0, 0, true ) end) self.ParentEnt = parentent self:SetNetworkedInt( "odstpodstat", 5 ) sound.Play( self.LandSnds[ math.random( 1, 3 ) ], self:GetPos(), 100, 100 ) self.Stage = 6 end end end end function ENT:playerexit() local plyuse = self.PlayerUsing if plyuse != nil and CurTime() > self.NextExit then local spawnvector = Vector( 0, 100, 20 ) local selfpos = self.Entity:GetPos() local selfang = self.Entity:GetAngles() local linepos1 = Vector(20, 0, 50) local linepos2 = Vector(100, 0, 50) linepos1:Rotate (selfang) linepos2:Rotate (selfang) local pos5 = selfpos + linepos2 local pos25 = selfpos + linepos2 local tracedata = {} tracedata.start = pos5 tracedata.endpos = pos25 tracedata.filter = self.Entity local trace = util.TraceLine(tracedata) local selfpos = self.Entity:GetPos() local selfang = self.Entity:GetAngles() local linepos1 = Vector(20, 0, 50) local linepos2 = Vector(0, 100, 50) linepos1:Rotate (selfang) linepos2:Rotate (selfang) local pos5 = selfpos + linepos2 local pos25 = selfpos + linepos2 local tracedata = {} tracedata.start = pos5 tracedata.endpos = pos25 tracedata.filter = self.Entity local trace2 = util.TraceLine(tracedata) if trace.Hit == true then spawnvector = Vector( 100, 0, 20 ) elseif trace2.Hit == true then spawnvector = Vector( -100, 0, 20 ) end spawnvector:Rotate (self.Entity:GetAngles()) plyuse:ExitVehicle() plyuse:SetNetworkedBool( "odstisinpod", false ) plyuse:SetNetworkedEntity( "odstpodin", nil ) -- plyuse:Spawn() plyuse:SetPos( self.Entity:GetPos() + spawnvector ) plyuse:SetEyeAngles( Angle( 0, self.Entity:GetAngles().y + 90, 0) ) plyuse:SetHealth( self.plyhealth ) self.PlayerUsing = nil end end function ENT:podslowdown() local podphys = self.Entity:GetPhysicsObject() local podspeed = podphys:GetVelocity().z local slowspeed = nil local stblzspeed = nil if self.Stage == 3 then slowspeed = -1000 - podspeed stblzspeed = 2000 end if self.PodFuel1 > 0 then if self.Stage == 5 || self.Stage == 6 then slowspeed = -100 - podspeed stblzspeed = 500 self.PodFuel1 = self.PodFuel1 - self.FuelUse1 end if slowspeed > 1 then local podslowdown = Vector( 0,0, 18 * slowspeed ) podslowdown:Rotate (self.Entity:GetAngles()) podphys:ApplyForceCenter( podslowdown ) end local podstabalizeup = Vector(0,0,20) podstabalizeup:Rotate (self.Entity:GetAngles()) podphys:ApplyForceOffset( Vector( 0, 0, stblzspeed ), podstabalizeup ) local podstabalizedown = Vector(0,0,-20) podstabalizedown:Rotate (self.Entity:GetAngles()) podphys:ApplyForceOffset( Vector( 0, 0, -stblzspeed ), podstabalizedown ) ----stops rotation of the pod when it is upright local anglevelo = podphys:GetAngleVelocity() local podang = self.Entity:GetAngles() if (podang.p > -2 && podang.p < 2 && podang.r > -2 && podang.r < 2) then podphys:AddAngleVelocity(Vector( -anglevelo.x, -anglevelo.y, 0)) end self.PlayerUsing:SetNetworkedInt( "odstpodf1", self.PodFuel1 ) end end function ENT:playercontrol() if self.PlayerUsing != nil then local playerriding = self.PlayerUsing local podphysobject = self.Entity:GetPhysicsObject() if playerriding:KeyDown( IN_FORWARD ) && self.PodFuel2 >
Sorry, you need to
Log In
to post a reply to this thread.