// Use this for initialization
    void Start()
    {
        trackedObject = viveCntrl.GetComponent <SteamVR_TrackedObject>();
        m_Pool        = PoolSystem.FindPool("Projectile");
        g_Pool        = PoolSystem.FindPool("Grenade");

        m_Stock  = GetComponentInChildren <StockAttributes>();
        m_Barrel = GetComponentInChildren <BarrelAttributes>();

        activeBarrelList.Add(m_BarrelParts[0]);
        activeStockList.Add(m_StockParts[0]);

        m_BarrelIndex = 0;
        m_StockIndex  = 0;

        //manager = GetComponentInChildren<PartManager>();
        Commander = GetComponent <SquadCommand>();

        aSource = GetComponent <AudioSource>();

        isShooting   = false;
        m_Ammunition = 200;

        m_Part         = Part.Barrel;
        m_StateMachine = WeaponState.Weapon;

        reset      = false;
        resetParts = true;

        feedback.enabled = false;
    }
    // Update is called once per frame
    void Update()
    {
        isShooting = false;

        //Tell WeaponController to re-get children using Event
        if (reset)
        {
            m_Stock  = GetComponentInChildren <StockAttributes>();
            m_Barrel = GetComponentInChildren <BarrelAttributes>();

            reset = false;
        }

        switch (m_StateMachine)
        {
        case WeaponState.Weapon:
            if (device.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad))
            {
                m_StateMachine = WeaponState.Command;
            }

            if (device.GetPressUp(SteamVR_Controller.ButtonMask.ApplicationMenu))
            {
                m_StateMachine = WeaponState.Custom;
                resetParts     = true;
            }

            if (m_Ammunition <= 0 && device.GetPress(SteamVR_Controller.ButtonMask.Trigger))
            {
                if (!aSource.isPlaying)
                {
                    aSource.PlayOneShot(empty);
                }
            }

            //Shooting
            if (m_Ammunition > 0 && device.GetPress(SteamVR_Controller.ButtonMask.Trigger))
            {
                isShooting = true;
                Fire();
            }
            break;

        case WeaponState.Custom:
            feedback.enabled = true;

            if (m_Part == Part.Barrel)
            {
                BarrelImg.color = Color.red;
                StockImg.color  = Color.white;
            }
            else
            {
                BarrelImg.color = Color.white;
                StockImg.color  = Color.red;
            }

            if (resetParts)
            {
                m_BarrelPosition.transform.localPosition = new Vector3(0, 0, moveToPosition);
                m_StockPosition.transform.localPosition  = new Vector3(0, 0, -moveToPosition);

                resetParts = false;
            }

            if (device.GetPress(SteamVR_Controller.ButtonMask.Trigger) || Input.GetKey(KeyCode.C))
            {
                m_BarrelPosition.transform.localPosition = new Vector3(0, 0, 0);
                m_StockPosition.transform.localPosition  = new Vector3(0, 0, 0);

                feedback.enabled = false;
                m_StateMachine   = WeaponState.Weapon;
            }

            if (Input.GetButtonUp("Fire1") || device.GetPressUp(SteamVR_Controller.ButtonMask.ApplicationMenu))
            {
                ToggleParts(m_Part);
            }

            if (Input.GetKeyUp(KeyCode.UpArrow) || device.GetAxis().y > 0 && device.GetAxis().x > -0.5f && device.GetAxis().x < 0.5f && device.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad))
            {
                //Up
                if (m_Part == Part.Barrel)
                {
                    m_Part = Part.Stock;
                }
                else
                {
                    m_Part = Part.Barrel;
                }
            }
            else if (Input.GetKeyUp(KeyCode.DownArrow) || device.GetAxis().y < 0 && device.GetAxis().x > -0.5f && device.GetAxis().x < 0.5f && device.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad))
            {
                //Down
                if (m_Part == Part.Barrel)
                {
                    m_Part = Part.Stock;
                }
                else
                {
                    m_Part = Part.Barrel;
                }
            }

            break;

        case WeaponState.Command:
            switch (Commander.GetOrder())
            {
            case SquadCommand.Order.Regroup:
                Commander.ReGroup();
                break;

            case SquadCommand.Order.Hold:
                Commander.Hold();
                break;

            case SquadCommand.Order.Roam:
                Commander.Roam();
                break;

            case SquadCommand.Order.Move:
                Commander.MoveToPosition();
                break;

            case SquadCommand.Order.NOTOUCH:
                m_StateMachine = WeaponState.Weapon;
                break;
            }

            break;
        }
    }