private void GetMouseInput(float a_deltaTime)
    {
        if (Time.timeSinceLevelLoad < 0.5f)
        {
            return;
        }
        bool    flag          = !m_inventory.IsVisible() && !m_communicator.IsActive() && !m_popupGui.IsActive();
        Vector3 mousePosition = Input.mousePosition;
        bool    flag2         = (m_lastMousePos - mousePosition).sqrMagnitude > 4f;

        m_lastMousePos = mousePosition;
        Ray ray = Camera.main.ScreenPointToRay(mousePosition);

        if (flag2)
        {
            m_hideCursorTime = Time.time + 1f;
        }
        bool flag3 = Time.time < m_hideCursorTime;

        if (flag3 != Screen.showCursor)
        {
            Screen.showCursor = flag3;
        }
        if (Input.GetMouseButton(1) && flag)
        {
            m_buildRot += a_deltaTime * 90f;
            while (m_buildRot > 360f)
            {
                m_buildRot -= 360f;
            }
        }
        if (Input.GetMouseButtonDown(1))
        {
            RaycastHit hitInfo;
            if (Physics.Raycast(ray, out hitInfo, 100f, 665600))
            {
                switch (hitInfo.transform.gameObject.layer)
                {
                case 17:
                    if (!m_inventory.IsShopActive())
                    {
                        RemoteItem component2 = hitInfo.transform.GetComponent <RemoteItem>();
                        if (null != component2 && m_inventory.IsVisible())
                        {
                            m_itemGui.Show(component2, ray.GetPoint(4.5f));
                        }
                    }
                    break;

                case 13:
                {
                    if (!flag)
                    {
                        break;
                    }
                    RemoteCharacter component = hitInfo.transform.GetComponent <RemoteCharacter>();
                    if (null != component && null != m_client)
                    {
                        ulong steamId = m_client.GetSteamId(component.m_id);
                        if (Global.isSteamActive && 0 < steamId)
                        {
                            SteamFriends.ActivateGameOverlayToUser("steamid", new CSteamID(steamId));
                        }
                    }
                    break;
                }
                }
            }
        }
        else if (Input.GetMouseButtonDown(0))
        {
            if (flag)
            {
                ResetTarget();
            }
            bool       flag4 = false;
            RaycastHit hitInfo2;
            if (Physics.Raycast(ray, out hitInfo2, 100f, 6995488))
            {
                switch (hitInfo2.transform.gameObject.layer)
                {
                case 9:
                case 13:
                {
                    if (!flag)
                    {
                        break;
                    }
                    RemoteCharacter component3 = hitInfo2.transform.GetComponent <RemoteCharacter>();
                    if (null != component3)
                    {
                        if (!component3.m_isOwnPlayer)
                        {
                            m_currentTarget = component3;
                            flag4           = true;
                        }
                    }
                    else if (flag && Input.GetAxis("Vertical") == 0f && Input.GetAxis("Horizontal") == 0f)
                    {
                        CalculatePath(hitInfo2.point, 12 != hitInfo2.transform.gameObject.layer);
                    }
                    break;
                }

                case 17:
                    if (m_inventory.IsShopActive())
                    {
                        RemoteItem component4 = hitInfo2.transform.GetComponent <RemoteItem>();
                        if (null != component4 && component4.m_type != 254 && m_inventory.IsVisible())
                        {
                            m_buySellPos = m_inventory.ToWorldPos(component4.transform.localPosition);
                            bool    flag5   = m_buySellPos.x < 6f;
                            float   num     = (!flag5) ? m_inventory.GetShopBuyMultiplier() : m_inventory.GetShopSellMultiplier();
                            string  text    = (!flag5) ? LNG.Get("BUY") : LNG.Get("SELL");
                            int     num2    = (int)(Items.GetValue(component4.m_type, component4.m_amountOrCond) * num + 0.5f);
                            string  text2   = (!Items.HasCondition(component4.m_type)) ? ("x " + component4.m_amountOrCond) : (component4.m_amountOrCond + "%");
                            ItemDef itemDef = Items.GetItemDef(component4.m_type);
                            if (flag5 || m_client.GetGoldCount() >= num2)
                            {
                                string a_caption = text + "\n" + LNG.Get(itemDef.ident) + "\n" + text2 + "\nfor " + num2 + " " + LNG.Get("CURRENCY") + "?";
                                m_buySellPopupSessionId = m_popupGui.ShowGui(true, a_caption);
                            }
                            else
                            {
                                string a_caption2 = LNG.Get("ITEMSHOP_TOO_LESS_GOLD") + "\n" + num2 + " " + LNG.Get("CURRENCY");
                                m_popupGui.ShowGui(true, a_caption2);
                            }
                        }
                    }
                    else if (Time.time < m_doubleClickTime)
                    {
                        m_doubleClickTime = 0f;
                        if (null != hitInfo2.transform)
                        {
                            Vector3 a_startPos = hitInfo2.transform.localPosition;
                            Vector3 a_endPos   = Vector3.zero;
                            if (m_inventory.DragDrop(ref a_startPos, ref a_endPos))
                            {
                                m_sendDragPos = a_startPos;
                                m_sendDropPos = Vector3.zero;
                            }
                        }
                    }
                    else
                    {
                        m_dragItem     = hitInfo2.transform;
                        m_startDragPos = m_dragItem.localPosition;
                    }
                    break;

                case 10:
                case 12:
                case 21:
                    if (flag && Input.GetAxis("Vertical") == 0f && Input.GetAxis("Horizontal") == 0f && null != m_client && !m_client.IsInVehicle())
                    {
                        Vector3   point         = hitInfo2.point;
                        Transform walkIndicator = m_walkIndicator;
                        Vector3   point2        = hitInfo2.point;
                        float     x             = point2.x;
                        Vector3   point3        = hitInfo2.point;
                        walkIndicator.position = new Vector3(x, 0.1f, point3.z);
                        CalculatePath(point, 12 != hitInfo2.transform.gameObject.layer);
                    }
                    break;

                case 11:
                case 15:
                case 19:
                case 22:
                    flag4 = flag;
                    break;
                }
            }
            if (flag4)
            {
                CalculateRotTowardsMouse(mousePosition);
                m_stopAttackingTime = Time.time + 0.3f;
            }
        }
        else if (Input.GetMouseButtonUp(0) && null != m_dragItem)
        {
            Vector3 a_startPos2 = m_startDragPos;
            Vector3 a_endPos2   = m_dragItem.localPosition;
            if (m_inventory.DragDrop(ref a_startPos2, ref a_endPos2))
            {
                if (a_startPos2 != a_endPos2)
                {
                    m_sendDragPos = a_startPos2;
                    m_sendDropPos = a_endPos2;
                }
                else
                {
                    m_dragItem.localPosition = m_startDragPos;
                    m_doubleClickTime        = Time.time + 0.5f;
                }
            }
            m_dragItem = null;
        }
        if (null != m_dragItem)
        {
            m_dragItem.position = ray.GetPoint(5f);
            Vector3 localPosition = m_dragItem.localPosition;
            localPosition.z          = 0f;
            m_dragItem.localPosition = localPosition;
        }
        else if (!flag2)
        {
            if (m_mouseOverDur == -1f)
            {
                return;
            }
            m_mouseOverDur += a_deltaTime;
            if (!(m_mouseOverDur > 0.1f))
            {
                return;
            }
            m_buildingHealthIndicator.position = Vector3.up * 1000f;
            m_tooltip.position     = Vector3.up * 1000f;
            m_tooltipHudR.position = Vector3.up * 1000f;
            m_tooltipHudR.parent   = null;
            m_tooltipHudL.position = Vector3.up * 1000f;
            m_tooltipHudL.parent   = null;
            if (m_mouseOverRenderers != null && m_mouseOverRenderers.Length != 0)
            {
                Renderer[] mouseOverRenderers = m_mouseOverRenderers;
                foreach (Renderer renderer in mouseOverRenderers)
                {
                    if (null != renderer)
                    {
                        renderer.gameObject.layer = m_mouseOverLayer;
                    }
                }
                m_mouseOverRenderers = null;
            }
            if (null != m_mouseOverTransform)
            {
                m_mouseOverTransform.localScale = m_initialMouseOverScale;
                m_mouseOverTransform            = null;
            }
            RaycastHit hitInfo3;
            if (Physics.Raycast(ray, out hitInfo3, 100f, 7007776))
            {
                if (hitInfo3.transform.gameObject.layer == 5)
                {
                    string[] array = hitInfo3.transform.gameObject.name.Split('-');
                    if (array != null && 1 < array.Length)
                    {
                        if ("tooltip" == array[0])
                        {
                            m_tooltipHudRText.text = LNG.Get(array[1]);
                            m_tooltipHudR.position = hitInfo3.transform.position - hitInfo3.transform.right * 0.3f;
                            m_tooltipHudR.rotation = hitInfo3.transform.rotation;
                            m_tooltipHudR.parent   = hitInfo3.transform;
                        }
                        else if ("mission" == array[0])
                        {
                            int a_index = 0;
                            try
                            {
                                a_index = int.Parse(array[1]);
                            }
                            catch (Exception ex)
                            {
                                Debug.LogWarning("ClientInput.cs: " + ex.ToString());
                            }
                            Mission mission = m_client.GetMission(a_index);
                            if (mission != null)
                            {
                                m_tooltipHudLText.text = GetMissionText(mission) + LNG.Get("TIME_LEFT") + ": " + (int)(mission.m_dieTime / 60f) + " min";
                                m_tooltipHudL.position = hitInfo3.transform.position + hitInfo3.transform.right * 0.3f;
                                m_tooltipHudL.rotation = hitInfo3.transform.rotation;
                                m_tooltipHudL.parent   = hitInfo3.transform;
                            }
                        }
                    }
                }
                else
                {
                    m_mouseOverTransform    = hitInfo3.transform;
                    m_initialMouseOverScale = m_mouseOverTransform.localScale;
                    if (hitInfo3.transform.gameObject.layer == 17)
                    {
                        if (m_inventory.IsVisible())
                        {
                            m_inventory.ShowInfo(hitInfo3.transform.position);
                        }
                    }
                    else if (hitInfo3.transform.gameObject.layer == 10)
                    {
                        m_mouseOverTransform.localScale *= 1.33f;
                    }
                    else if (hitInfo3.transform.gameObject.layer == 19)
                    {
                        RemoteBuilding component5 = hitInfo3.transform.parent.GetComponent <RemoteBuilding>();
                        if (null != m_buildingHealthIndicator && null != component5)
                        {
                            Vector3 b  = Vector3.up * 4f;
                            float   x2 = 0.25f * (float)(3 - (int)(component5.m_health * 0.033f));
                            m_buildingHealthIndicator.renderer.material.mainTextureOffset = new Vector2(x2, 0f);
                            m_buildingHealthIndicator.position = hitInfo3.transform.position + b;
                        }
                    }
                    else if (hitInfo3.transform.gameObject.layer == 15)
                    {
                        bool    flag6 = "building_10" == hitInfo3.transform.gameObject.name || "building_11" == hitInfo3.transform.gameObject.name;
                        Vector3 b2    = Vector3.up * ((!flag6) ? 3f : 6.5f);
                        m_tooltipText.text = LNG.Get("TOOLTIP_RESOURCE");
                        m_tooltip.position = hitInfo3.transform.position + b2;
                    }
                    else if (hitInfo3.transform.gameObject.layer == 21)
                    {
                        Vector3 b3 = Vector3.up * 2f;
                        m_tooltipText.text = LNG.Get("TOOLTIP_ITEMSTORAGE");
                        m_tooltip.position = hitInfo3.transform.position + b3;
                    }
                    else if (hitInfo3.transform.gameObject.layer == 9)
                    {
                        RemoteCharacter component6 = hitInfo3.transform.GetComponent <RemoteCharacter>();
                        if (null == component6)
                        {
                            Vector3 b4 = Vector3.up * 3f;
                            m_tooltipText.text = LNG.Get("TOOLTIP_INTERACT");
                            m_tooltip.position = hitInfo3.transform.position + b4;
                        }
                    }
                    else if (hitInfo3.transform.gameObject.layer == 22)
                    {
                        MissionObjective component7 = hitInfo3.transform.GetComponent <MissionObjective>();
                        if (null != component7)
                        {
                            Vector3 b5 = Vector3.up * 3f;
                            m_tooltipText.text = LNG.Get("MISSION_TYPE_" + component7.m_type.ToString("d"));
                            m_tooltip.position = hitInfo3.transform.position + b5;
                        }
                    }
                    m_mouseOverRenderers = hitInfo3.transform.GetComponentsInChildren <Renderer>();
                    if (m_mouseOverRenderers.Length == 0 && null != hitInfo3.transform.parent)
                    {
                        m_mouseOverRenderers = hitInfo3.transform.parent.GetComponentsInChildren <Renderer>();
                    }
                    if (m_mouseOverRenderers.Length != 0)
                    {
                        m_mouseOverLayer = m_mouseOverRenderers[0].gameObject.layer;
                        Renderer[] mouseOverRenderers2 = m_mouseOverRenderers;
                        foreach (Renderer renderer2 in mouseOverRenderers2)
                        {
                            renderer2.gameObject.layer = 20;
                        }
                    }
                }
            }
            m_mouseOverDur = -1f;
        }
        else
        {
            m_mouseOverDur = 0f;
        }
    }