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

function EFFECT:Init(data)
    local pos = data:GetOrigin()
    local wpn = data:GetEntity()

    if !IsValid(wpn) then return end

    local muzzle = wpn.MuzzleEffect
    local overridemuzzle = wpn:GetBuff_Override("Override_MuzzleEffect")

    local gmmuzzle = wpn:GetBuff_Override("Override_GMMuzzleEffect") or wpn.GMMuzzleEffect

    muzzle = overridemuzzle or muzzle

    if wpn.GetInUBGL and wpn:GetInUBGL() then
        muzzle = wpn:GetBuff_Override("UBGL_MuzzleEffect") or muzzle
    end

    if ArcCW.ConVars["fastmuzzles"]:GetBool() then
        muzzle = wpn.FastMuzzleEffect or "CS_MuzzleFlash"

        gmmuzzle = true

        if overridemuzzle then
            muzzle = nil
        end

        muzzle = wpn:GetBuff_Override("Override_FastMuzzleEffect") or muzzle
    end

    local att = data:GetAttachment() or 1

    local wm = false

    local Owner = wpn:GetOwner()
    if (LocalPlayer():ShouldDrawLocalPlayer() or Owner != LocalPlayer()) and !wpn.AlwaysWM then
        wm = true
        att = 1
    end

    if Owner != LocalPlayer() and !ArcCW.ConVars["muzzleeffects"]:GetBool() then
        return
    end

    local mdl = wpn:GetMuzzleDevice(wm)
    local parent = mdl

    if !wm then
        parent = LocalPlayer():GetViewModel()
    end

    if !IsValid(mdl) then return end

    pos = (mdl:GetAttachment(att) or {}).Pos
    ang = (mdl:GetAttachment(att) or {}).Ang

    if gmmuzzle then
        if muzzle then
            if !pos then return end

            local fx = EffectData()

            fx:SetOrigin(pos)
            fx:SetEntity(parent)
            fx:SetAttachment(att)
            fx:SetNormal((ang or Angle(0, 0, 0)):Forward())
            fx:SetStart(pos)
            fx:SetScale(1)

            util.Effect(muzzle, fx)
        end
    else
        if muzzle then
            ParticleEffectAttach(muzzle, PATTACH_POINT_FOLLOW, mdl, att)
        end
    end

    if !pos then return end

    if !ArcCW.ConVars["fastmuzzles"]:GetBool() and !wpn.NoFlash
            and !wpn:GetBuff_Override("Silencer")
            and !wpn:GetBuff_Override("FlashHider") then
        local light = DynamicLight(self:EntIndex())
        local clr = wpn:GetBuff_Override("Override_MuzzleFlashColor", wpn.MuzzleFlashColor) or Color(244, 209, 66)
        if (light) then
            light.Pos = pos
            light.r = clr.r
            light.g = clr.g
            light.b = clr.b
            light.Brightness = 2
            light.Decay = 2500
            light.Size = Owner == LocalPlayer() and 256 or 128
            light.DieTime = CurTime() + 0.1
        end
    end
end

function EFFECT:Think()
    return false
end

function EFFECT:Render()
    return false
end