
AddCSLuaFile()

ENT.Type = "anim"

ENT.Carried = nil
ENT.CarriedMass = 0
ENT.PrevThink = 0
ENT.TargetPos = Vector(0,0,0)
ENT.TargetAng = Angle(0,0,0)
ENT.Owner = nil

function ENT:Initialize()
   if SERVER and IsValid(self.Carried) then
      
--      self:SetModel("models/weapons/w_bugbait.mdl")
      self:SetModel(self.Carried:GetModel())
--      self:SetSkin(self.Carried:GetSkin())
--      self:SetColor(se.Carried:GetColor())
   end
   self:PhysicsInit( SOLID_VPHYSICS )
   self:SetMoveType( MOVETYPE_VPHYSICS )
   self:SetSolid( SOLID_VPHYSICS )
   self:SetCollisionGroup(COLLISION_GROUP_NONE)
--   self:SetSolid(SOLID_NONE)
   self:SetNoDraw(true)

--   self:SetHealth(9999)



--   local ply = self:GetOwner()
--   self.Owner = ply
--   if IsValid(ply) then
--      self.TargetPos = ply:GetShootPos() + (ply:GetAimVector() * 70)
--      self.TargetAng = ply:GetAimVector()
--   end


   if SERVER and IsValid(self.Carried) then

      local phys = self:GetPhysicsObject()
      local carphys = self.Carried:GetPhysicsObject()

      if IsValid(phys) and IsValid(carphys) then
         phys:Wake()
         carphys:Wake()

         phys:SetMass(9999)

         phys:SetDamping(0, 1000)
         carphys:SetDamping(0, 1000)

--         if not carphys:IsPenetrating() then
--            phys:SetPos(carphys:GetPos())
--            phys:SetAngle(carphys:GetAngle())
--            carphys:SetPos( phys:GetPos() )
--            carphys:SetAngle( phys:GetAngle() )
--         end

      end

      self.Carried:SetGravity(false)
      self.Carried:SetOwner(self:GetOwner())
--      self.Carried:SetNoDraw(true)
--      self.Carried:SetSolid(SOLID_NONE)
   end
end

function ENT:OnRemove()
   if IsValid(self.Carried) then
      self.Carried:SetGravity(true)
      self.Carried:SetOwner(nil)
--      self.Carried:SetNoDraw(false)
--      self.Carried:SetSolid(SOLID_VPHYSICS)
      self.Carried:SetMoveType(MOVETYPE_VPHYSICS)
      
      local carphys = self.Carried:GetPhysicsObject()
      if IsValid(carphys) then
         carphys:SetDamping(0,0)
      end

      self.Carried:PhysWake()

   end
end


--function ENT:Think()
--   if CLIENT then return end
--
--   -- Check on all entities involved
--
--   local obj = self.Carried
--   local ply = self:GetOwner()
--   if not IsValid(obj) or not IsValid(ply) or not ply:Alive() then
--      self:Remove()
--      return
--   end
--
--
--
--   -- Check some other requirements
--   local spos = ply:GetShootPos()
--   if ply:GetGroundEntity() == obj or obj:NearestPoint(spos):Distance(spos) > 150 then
--      self:Remove()
--      return
--   end
--
--
--   self.TargetPos = spos + (ply:GetAimVector() * 70)
--   self.TargetAng = ply:GetAimVector()
--
--   local phys = self:GetPhysicsObject()
--   local carryphys = obj:GetPhysicsObject()
--   if IsValid(phys) and IsValid(carryphys) then
--      if phys:IsPenetrating() then
--         self:Remove()
--         return
----         self.TargetPos = phys:GetPos() + Vector(0,0,5)
----         phys:SetPos(self.TargetPos)
--      end
--
--      carryphys:SetPos(phys:GetPos())
--      carryphys:SetAngle(phys:GetAngles())
--      carryphys:SetVelocity(phys:GetVelocity())
--   end
--
--end


--function ENT:PhysicsSimulate(phys, delta)
--   phys:Wake()
--
--   local p = {}
--   p.pos = self.TargetPos
--   p.angle = self.TargetAng
--   p.secondstoarrive = 0.05
--   p.maxangular = 100
--   p.maxangulardamp = 10000
--   p.maxspeed = 100
--   p.maxspeeddamp = 1000
--   p.dampfactor = 0.8
--   p.teleportdistance = 0
--   p.deltatime = delta
--
--   phys:ComputeShadowControl(p)
--end


function ENT:OnTakeDamage(dmg)
   -- do nothing
end