--[[
| 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/
--]]

AddCSLuaFile()

SWEP.HoldType               = "normal"

if CLIENT then
   SWEP.PrintName           = "vis_name"
   SWEP.Slot                = 6

   SWEP.ViewModelFOV        = 10
   SWEP.ViewModelFlip       = false
   SWEP.DrawCrosshair       = false

   SWEP.EquipMenuData = {
      type = "item_weapon",
      desc = "vis_desc"
   };

   SWEP.Icon                = "vgui/ttt/icon_cse"
end

SWEP.Base                   = "weapon_tttbase"

SWEP.ViewModel              = Model("models/weapons/v_crowbar.mdl")
SWEP.WorldModel             = Model("models/Items/battery.mdl")

SWEP.Primary.ClipSize       = -1
SWEP.Primary.DefaultClip    = -1
SWEP.Primary.Automatic      = false
SWEP.Primary.Ammo           = "none"
SWEP.Primary.Delay          = 1.0

SWEP.Secondary.ClipSize     = -1
SWEP.Secondary.DefaultClip  = -1
SWEP.Secondary.Automatic    = true
SWEP.Secondary.Ammo         = "none"
SWEP.Secondary.Delay        = 0.2

SWEP.Kind                   = WEAPON_EQUIP
SWEP.CanBuy                 = {ROLE_DETECTIVE} -- only detectives can buy
SWEP.WeaponID               = AMMO_CSE

SWEP.LimitedStock           = true -- only buyable once
SWEP.NoSights               = true
SWEP.AllowDrop              = false

SWEP.DeathScanDelay         = 15

function SWEP:PrimaryAttack()
   self:SetNextPrimaryFire( CurTime() + self.Primary.Delay )
   self:DropDevice()
end

function SWEP:SecondaryAttack()
   self:SetNextSecondaryFire( CurTime() + self.Secondary.Delay )
   self:DropDevice()
end

function SWEP:DrawWorldModel()
end

function SWEP:OnDrop()
   self:Remove()
end

function SWEP:PreDrop(isdeath)
   if isdeath then
      local cse = self:DropDevice()
      if IsValid(cse) then
         cse:SetDetonateTimer(self.DeathScanDelay or 10)
      end
   end
end

function SWEP:Reload()
   return false
end

function SWEP:OnRemove()
   if CLIENT and IsValid(self:GetOwner()) and self:GetOwner() == LocalPlayer() and self:GetOwner():Alive() then
      RunConsoleCommand("lastinv")
   end
end

local throwsound = Sound( "Weapon_SLAM.SatchelThrow" )

function SWEP:DropDevice()
   local cse = nil

   if SERVER then
      local ply = self:GetOwner()
      if not IsValid(ply) then return end

      if self.Planted then return end

      local vsrc = ply:GetShootPos()
      local vang = ply:GetAimVector()
      local vvel = ply:GetVelocity()
      
      local vthrow = vvel + vang * 200

      cse = ents.Create("ttt_cse_proj")
      if IsValid(cse) then
         cse:SetPos(vsrc + vang * 10)
         cse:SetOwner(ply)
         cse:SetThrower(ply)
         cse:Spawn()

         cse:PhysWake()
         local phys = cse:GetPhysicsObject()
         if IsValid(phys) then
            phys:SetVelocity(vthrow)
         end

         self:Remove()

         self.Planted = true
      end
   end

   self:EmitSound(throwsound)

   return cse
end

if CLIENT then
   function SWEP:Initialize()
      self:AddHUDHelp("vis_help_pri", nil, true)

      return self.BaseClass.Initialize(self)
   end
end


