// FIX ISSUES HERE with http://answers.unity3d.com/questions/13443/is-there-a-way-to-measure-the-pixel-withheight-of.html void DrawChatBox() { Rect rView = m_rectBox; rView.x = 0; rView.y = 0; rView.height = m_listChatEntries.Count * 30; Rect rBox = m_rectBox; rBox.width += 20; //GUI.BeginScrollView(rBox, m_v2ScrollPos, rView, false, false); //m_v2ScrollPos = new Vector2(m_v2ScrollPos.x, rView.height); if (m_listChatEntries.Count < 7) // quick fix for something frustating { m_v2ScrollPos.y = 0; } UnityGUIExt.BeginScrollView(rBox, m_v2ScrollPos, rView, false, false); m_oScrollbar.Initialise(m_rectBox, rView, m_rectBox.width + 5, 0, m_rectBox.height, (m_rectBox.height / rView.height) * m_rectBox.height, m_v2ScrollPos); m_v2ScrollPos = m_oScrollbar.DoUpdate(); if (m_rectBox.height / rView.height < 1.0f) { m_bDrawScroll = true; } else { m_bDrawScroll = false; } foreach (CChatEntry cEntry in m_listChatEntries) { if (cEntry.sName == "") { //Game message GUILayout.Label(cEntry.sMessage); } else { GUILayout.Label(cEntry.sName + ": " + cEntry.sMessage); } } //GUI.EndScrollView(); UnityGUIExt.EndScrollView(); }
void ProcessServerListGUI() { ServerScanner.TServerInfo[] taOnlineServers = GetComponent <ServerScanner>().GetServerList(); if (taOnlineServers != null && taOnlineServers.Length > 0) { // This box contains the box that contains the server list. It acts as the parent to everything. m_rectServer = UnityGUIExt.CreateRect(-99.0f, 325.0f, 542.0f, 386.0f, UnityGUIExt.GUI_ALLIGN.TOP_CENTRE, UnityGUIExt.GUI_ALLIGN.CENTRE); Rect rectHostEntry = new Rect(0, 0, 543.0f, 95.0f); Rect rectHostName = new Rect(130, 11, 100.0f, 100.0f); Rect rectNumPlayers = new Rect(105, 53, 100.0f, 100.0f); // This box contains the list of servers // It is relatively positioned to the parent // The height is determined by the number of hosted games m_rectServersContainer = new Rect(0.0f, 0.0f, 525.0f, 0.0f); m_rectServersContainer.height = (taOnlineServers.Length * rectHostEntry.height); GUI.BeginScrollView(m_rectServer, m_v2ScrollPos, m_rectServersContainer); // Work out if a scroll bar is needed // If the box containing the server list is larger than the parent box then we need a scrollbar float fScrollbarSize = (m_rectServer.height / m_rectServersContainer.height); if (fScrollbarSize < 1.0f) { m_oScroller.Initialise(m_rectServer, m_rectServersContainer, m_rectServer.width - 15, 0, m_rectServer.height, fScrollbarSize * m_rectServer.height, m_v2ScrollPos); m_v2ScrollPos = m_oScroller.DoUpdate(); } // Grab the mouse pos and convert it into the parent box's space Vector2 vCursor = GameApp.GetInstance().GetCursor().GetScreenPosition(); vCursor.x -= m_rectServer.x; vCursor.y -= m_rectServer.y - m_v2ScrollPos.y; int i = 0; foreach (ServerScanner.TServerInfo tServerInfo in taOnlineServers) { // Draw the entry GUI.DrawTexture(rectHostEntry, m_HostEntry); GUI.Label(rectHostName, tServerInfo.sGameName); GUI.Label(rectNumPlayers, tServerInfo.uiNumConnectedPlayers + " / " + tServerInfo.uiPlayerLimit); // Check for selection if (rectHostEntry.Contains(vCursor)) { if (GameApp.GetInstance().GetCursor().IsMouseDown()) { m_iChosenServer = i; } // // Double click // // Does not function properly Event evMouse = Event.current; if (evMouse.isMouse && evMouse.clickCount == 2) { JoinGame(taOnlineServers[m_iChosenServer].saIp[0], m_strPlayerName); } } // Highlight the chosen server if (m_iChosenServer == i) { GUI.DrawTexture(rectHostEntry, m_tSelected); } // Increment to/for next entry rectHostEntry.y += rectHostEntry.height; rectHostName.y += rectHostEntry.height; rectNumPlayers.y += rectHostEntry.height; ++i; } // Store the IP of the chosen server if (m_iChosenServer != m_kiINVALID) { m_sChosenServer = taOnlineServers[m_iChosenServer].saIp[0]; } GUI.EndScrollView(); } }