// Use this for initialization
    private void Start()
    {
        if (isLocalPlayer)
        {
            m_CharacterController = GetComponent <CharacterController>();
            m_Camera = Camera.main;
            m_OriginalCameraPosition = m_Camera.transform.localPosition;
            m_FovKick.Setup(m_Camera);
            m_HeadBob.Setup(m_Camera, m_StepInterval);
            m_StepCycle = 0f;
            m_NextStep  = m_StepCycle / 2f;
            m_Jumping   = false;
            m_MouseLook.Init(transform, m_Camera.transform);

            currentPower = PowerUp.NONE;
            health       = gameObject.GetComponent <Health>();
            inventory    = gameObject.GetComponent <Inventory>();
            powerActive  = false; doubleDamageVar = false;
            pistol.SetActive(true); SMG.SetActive(false);
            chatUp = false;

            //Attaches the gun to the camera
            foreach (Transform child in transform)
            {
                if (child.CompareTag("Rifle"))
                {
                    child.SetParent(Camera.main.transform, false);
                    Vector3 newPos = child.position;
                    newPos.y      -= 0.5f;
                    newPos.z      -= 0.05f;
                    child.position = newPos;
                    break;
                }
            }

            powerUpTimerText      = GameObject.FindGameObjectWithTag("Timer").GetComponent <Text>();
            powerUpTimerText.text = "";

            powerEffect.Add(PowerUp.DOUBLE_DAMAGE, doubleDamage);
            powerEffect.Add(PowerUp.FAST_FIRE, fastFire);
            powerEffect.Add(PowerUp.FAST_MOVE, fastWalk);
            powerEffect.Add(PowerUp.JUMP_HIGH, jumpHigh);
            powerEffect.Add(PowerUp.INVINCIBLE, invincible);
        }
    }
    // Update is called once per frame
    private void Update()
    {
        if (!isLocalPlayer)
        {
            return;
        }
        Cursor.lockState = CursorLockMode.None;
        Cursor.lockState = CursorLockMode.Confined;
        Cursor.visible   = true;
        Camera.main.transform.position = transform.position + transform.up * 0.5f;
        Camera.main.transform.parent   = transform;

        if (Input.GetKeyDown(KeyCode.Escape))
        {
            chatUp = !chatUp;
        }

        if (!chatUp)
        {
            //equip smg
            if (Input.GetKeyDown(KeyCode.O))
            {
                Debug.Log("SMG equipped");
                smgE = true; pistolE = false;
                pistol.SetActive(false); SMG.SetActive(true);
                //equip pistol
            }
            else if (Input.GetKeyDown(KeyCode.P))
            {
                Debug.Log("Pistol equipped");
                smgE = false; pistolE = true;
                pistol.SetActive(true); SMG.SetActive(false);
            }

            //for activating power ups
            //testing purposes ONLY

            /*if (Input.GetKeyDown(KeyCode.I)) {
             *  inventory.AddPowerUp(PowerUp.FAST_MOVE);
             * }
             * else if (Input.GetKeyDown(KeyCode.G)) {
             *  inventory.AddPowerUp(PowerUp.DOUBLE_DAMAGE);
             * }
             * else if (Input.GetKeyDown(KeyCode.F)) {
             *  inventory.AddPowerUp(PowerUp.FAST_FIRE);
             * }
             * else if (Input.GetKeyDown(KeyCode.B)) {
             *  inventory.AddPowerUp(PowerUp.INVINCIBLE);
             * }
             * else if (Input.GetKeyDown(KeyCode.J)) {
             *  inventory.AddPowerUp(PowerUp.JUMP_HIGH);
             * }*/

            //Check if the player wishes to use a power up
            if (!powerActive)
            {
                if (Input.GetButtonDown("Inventory1"))
                {
                    currentPower = inventory.getPowerUp(1);
                    if (currentPower != PowerUp.NONE)
                    {
                        inventory.RemovePowerUp(1);
                        powerEffect[currentPower]();
                        powerActive = true;
                    }
                }
                else if (Input.GetButtonDown("Inventory2"))
                {
                    currentPower = inventory.getPowerUp(2);
                    if (currentPower != PowerUp.NONE)
                    {
                        inventory.RemovePowerUp(2);
                        powerEffect[currentPower]();
                        powerActive = true;
                    }
                }
                else if (Input.GetButtonDown("Inventory3"))
                {
                    currentPower = inventory.getPowerUp(3);
                    if (currentPower != PowerUp.NONE)
                    {
                        inventory.RemovePowerUp(3);
                        powerEffect[currentPower]();
                        powerActive = true;
                    }
                }
                else if (Input.GetButtonDown("Inventory4"))
                {
                    currentPower = inventory.getPowerUp(4);
                    if (currentPower != PowerUp.NONE)
                    {
                        inventory.RemovePowerUp(4);
                        powerEffect[currentPower]();
                        powerActive = true;
                    }
                }
                else if (Input.GetButtonDown("Inventory5"))
                {
                    currentPower = inventory.getPowerUp(5);
                    if (currentPower != PowerUp.NONE)
                    {
                        inventory.RemovePowerUp(5);
                        powerEffect[currentPower]();
                        powerActive = true;
                    }
                }
            }
            else
            {
                powerUpTimer -= Time.deltaTime;
                int g = (int)powerUpTimer;
                powerUpTimerText.text = g.ToString();
            }

            if (powerUpTimer <= 0.0f)
            {
                Debug.Log("Power up over");
                if (currentPower == PowerUp.INVINCIBLE)
                {
                    health.SwitchInvincibility();
                }

                powerUpTimerText.text = "";
                m_WalkSpeed           = 8; m_JumpSpeed = 6;
                nextFireP             = 0.7f; nextFireS = 0.1f;
                powerUpTimer          = 10.0f;
                currentPower          = PowerUp.NONE;
                doubleDamageVar       = false; powerActive = false;
            }

            //countdown timer to allow the player to shoot again its just always subtracting and resets when the player shoots
            nextFireP -= Time.deltaTime;
            nextFireS -= Time.deltaTime;

            //used to fire the guns
            if (Input.GetButton("Fire1"))
            {
                if (smgE && nextFireS <= 0.0f)
                {
                    CmdfireBullet();
                    //timer until can shoot again
                    if (currentPower == PowerUp.FAST_FIRE)
                    {
                        nextFireS = 0.05f;
                    }
                    else
                    {
                        nextFireS = 0.1f;
                    }
                }
                else if (pistolE && nextFireP <= 0.0f)
                {
                    CmdfireBullet();
                    //timer until can shoot again
                    if (currentPower == PowerUp.FAST_FIRE)
                    {
                        nextFireP = 0.35f;
                    }
                    else
                    {
                        nextFireP = 0.7f;
                    }
                }
            }

            RotateView();

            // the jump state needs to read here to make sure it is not missed
            if (!m_Jump)
            {
                m_Jump = CrossPlatformInputManager.GetButtonDown("Jump");
            }

            if (!m_PreviouslyGrounded && m_CharacterController.isGrounded)
            {
                StartCoroutine(m_JumpBob.DoBobCycle());
                m_MoveDir.y = 0f;
                m_Jumping   = false;
            }

            if (!m_CharacterController.isGrounded && !m_Jumping && m_PreviouslyGrounded)
            {
                m_MoveDir.y = 0f;
            }

            m_PreviouslyGrounded = m_CharacterController.isGrounded;
        }
    }