about summary refs log tree commit diff
path: root/src/game
diff options
context:
space:
mode:
Diffstat (limited to 'src/game')
-rw-r--r--src/game/client/components/menus.cpp2
-rw-r--r--src/game/client/components/menus.h1
-rw-r--r--src/game/client/components/menus_browser.cpp10
-rw-r--r--src/game/client/components/scoreboard.cpp5
-rw-r--r--src/game/editor/ed_editor.cpp69
-rw-r--r--src/game/server/entities/character.cpp7
6 files changed, 59 insertions, 35 deletions
diff --git a/src/game/client/components/menus.cpp b/src/game/client/components/menus.cpp
index f3dddac7..42f68978 100644
--- a/src/game/client/components/menus.cpp
+++ b/src/game/client/components/menus.cpp
@@ -712,6 +712,8 @@ void CMenus::OnInit()
 	if(g_Config.m_ClShowWelcome)
 		m_Popup = POPUP_FIRST_LAUNCH;
 	g_Config.m_ClShowWelcome = 0;
+
+	Console()->Chain("add_favorite", ConchainServerbrowserUpdate, this);
 }
 
 void CMenus::PopupMessage(const char *pTopic, const char *pBody, const char *pButton)
diff --git a/src/game/client/components/menus.h b/src/game/client/components/menus.h
index 9ea9c6ef..3ad737e5 100644
--- a/src/game/client/components/menus.h
+++ b/src/game/client/components/menus.h
@@ -191,6 +191,7 @@ class CMenus : public CComponent
 	void RenderServerbrowserServerDetail(CUIRect View);
 	void RenderServerbrowserFilters(CUIRect View);
 	void RenderServerbrowser(CUIRect MainView);
+	static void ConchainServerbrowserUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
 	
 	// found in menus_settings.cpp
 	void RenderSettingsGeneral(CUIRect MainView);
diff --git a/src/game/client/components/menus_browser.cpp b/src/game/client/components/menus_browser.cpp
index 32243a2a..7d9c9d7e 100644
--- a/src/game/client/components/menus_browser.cpp
+++ b/src/game/client/components/menus_browser.cpp
@@ -566,7 +566,8 @@ void CMenus::RenderServerbrowserServerDetail(CUIRect View)
 			Row.VSplitLeft(25.0f, 0x0, &Row);
 
 			CTextCursor Cursor;
-			TextRender()->SetCursor(&Cursor, Row.x, Row.y, 12.0f, TEXTFLAG_RENDER);
+			TextRender()->SetCursor(&Cursor, Row.x, Row.y, FontSize, TEXTFLAG_RENDER|TEXTFLAG_STOP_AT_END);
+			Cursor.m_LineWidth = Row.w;
 
 			const char *pName = pSelectedServer->m_aPlayers[i].m_aName;
 			if(g_Config.m_BrFilterString[0])
@@ -709,3 +710,10 @@ void CMenus::RenderServerbrowser(CUIRect MainView)
 		UI()->DoLabel(&Button, Localize("Host address"), 14.0f, -1);
 	}
 }
+
+void CMenus::ConchainServerbrowserUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
+{
+	pfnCallback(pResult, pCallbackUserData);
+	if(pResult->NumArguments() && g_Config.m_UiPage == PAGE_FAVORITES && ((CMenus *)pUserData)->Client()->State() == IClient::STATE_OFFLINE)
+		((CMenus *)pUserData)->ServerBrowser()->Refresh(IServerBrowser::TYPE_FAVORITES);
+}
diff --git a/src/game/client/components/scoreboard.cpp b/src/game/client/components/scoreboard.cpp
index 80330e9c..9558c840 100644
--- a/src/game/client/components/scoreboard.cpp
+++ b/src/game/client/components/scoreboard.cpp
@@ -226,7 +226,10 @@ void CScoreboard::RenderScoreboard(float x, float y, float w, int Team, const ch
 		str_format(aBuf, sizeof(aBuf), "%4d", pInfo->m_Score);
 		TextRender()->Text(0, x+60-TextRender()->TextWidth(0, FontSize,aBuf,-1), y, FontSize, aBuf, -1);
 		
-		TextRender()->Text(0, x+128, y, FontSize, m_pClient->m_aClients[pInfo->m_ClientId].m_aName, -1);
+		float FontSizeName = FontSize;
+		while(TextRender()->TextWidth(0, FontSizeName, m_pClient->m_aClients[pInfo->m_ClientId].m_aName, -1) > w-200)
+			--FontSizeName;
+		TextRender()->Text(0, x+128, y+(FontSize-FontSizeName)/2, FontSizeName, m_pClient->m_aClients[pInfo->m_ClientId].m_aName, -1);
 
 		str_format(aBuf, sizeof(aBuf), "%4d", pInfo->m_Latency);
 		float tw = TextRender()->TextWidth(0, FontSize, aBuf, -1);
diff --git a/src/game/editor/ed_editor.cpp b/src/game/editor/ed_editor.cpp
index da97ed61..c951912d 100644
--- a/src/game/editor/ed_editor.cpp
+++ b/src/game/editor/ed_editor.cpp
@@ -1674,17 +1674,18 @@ void CEditor::RenderLayers(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 	if(ValidGroup && m_SelectedLayer >= 0 && m_SelectedLayer < m_Map.m_lGroups[m_SelectedGroup]->m_lLayers.size())
 		ValidLayer = 1;
 
-	int Num = (int)(View.h/16.0f);
+	float LayersHeight = 12.0f;	 // Height of AddGroup button
 	static int s_ScrollBar = 0;
 	static float s_ScrollValue = 0;
 
-	int LayerNum = 0;
 	for(int g = 0; g < m_Map.m_lGroups.size(); g++)
-		LayerNum += m_Map.m_lGroups[g]->m_lLayers.size() + 1;
+		// Each group is 19.0f
+		// Each layer is 14.0f
+		LayersHeight += 19.0f + m_Map.m_lGroups[g]->m_lLayers.size() * 14.0f;
 
-	int ScrollNum = LayerNum-Num+10;
+	float ScrollDifference = LayersHeight - LayersBox.h;
 
-	if(LayerNum > Num)	// Do we even need a scrollbar?
+	if(LayersHeight > LayersBox.h)	// Do we even need a scrollbar?
 	{
 		CUIRect Scroll;
 		LayersBox.VSplitRight(15.0f, &LayersBox, &Scroll);
@@ -1693,12 +1694,12 @@ void CEditor::RenderLayers(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 		s_ScrollValue = UiDoScrollbarV(&s_ScrollBar, &Scroll, s_ScrollValue);
 	}
 
-	int LayerStartAt = (int)(ScrollNum*s_ScrollValue);
-	if(LayerStartAt < 0)
-		LayerStartAt = 0;
+	float LayerStartAt = ScrollDifference * s_ScrollValue;
+	if(LayerStartAt < 0.0f)
+		LayerStartAt = 0.0f;
 
-	int LayerStopAt = LayerStartAt+Num;
-	int LayerCur = 0;
+	float LayerStopAt = LayersHeight - ScrollDifference * (1 - s_ScrollValue);
+	float LayerCur = 0;
 
 	// render layers
 	{
@@ -1706,9 +1707,9 @@ void CEditor::RenderLayers(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 		{
 			if(LayerCur > LayerStopAt)
 				break;
-			else if(LayerCur + m_Map.m_lGroups[g]->m_lLayers.size() + 1 < LayerStartAt)
+			else if(LayerCur + m_Map.m_lGroups[g]->m_lLayers.size() * 14.0f + 19.0f < LayerStartAt)
 			{
-				LayerCur += m_Map.m_lGroups[g]->m_lLayers.size() + 1;
+				LayerCur += m_Map.m_lGroups[g]->m_lLayers.size() * 14.0f + 19.0f;
 				continue;
 			}
 
@@ -1733,13 +1734,15 @@ void CEditor::RenderLayers(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 				}
 				LayersBox.HSplitTop(2.0f, &Slot, &LayersBox);
 			}
-			LayerCur++;
+			LayerCur += 14.0f;
 
 			for(int i = 0; i < m_Map.m_lGroups[g]->m_lLayers.size(); i++)
 			{
-				if(LayerCur < LayerStartAt || LayerCur > LayerStopAt)
+				if(LayerCur > LayerStopAt)
+					break;
+				else if(LayerCur < LayerStartAt)
 				{
-					LayerCur++;
+					LayerCur += 14.0f;
 					continue;
 				}
 
@@ -1762,10 +1765,12 @@ void CEditor::RenderLayers(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 						UiInvokePopupMenu(&s_LayerPopupId, 0, UI()->MouseX(), UI()->MouseY(), 120, 150, PopupLayer);
 				}
 
-				LayerCur++;
+				LayerCur += 14.0f;
 				LayersBox.HSplitTop(2.0f, &Slot, &LayersBox);
 			}
-			LayersBox.HSplitTop(5.0f, &Slot, &LayersBox);
+			if(LayerCur > LayerStartAt && LayerCur < LayerStopAt)
+				LayersBox.HSplitTop(5.0f, &Slot, &LayersBox);
+			LayerCur += 5.0f;
 		}
 	}
 
@@ -1780,9 +1785,6 @@ void CEditor::RenderLayers(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 			m_SelectedGroup = m_Map.m_lGroups.size()-1;
 		}
 	}
-
-	//LayersBox.HSplitTop(5.0f, &Slot, &LayersBox);
-
 }
 
 static void ExtractName(const char *pFileName, char *pName)
@@ -1962,14 +1964,12 @@ void CEditor::SortImages()
 
 void CEditor::RenderImages(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 {
-	int Num = (int)(View.h/15.0f);
 	static int s_ScrollBar = 0;
 	static float s_ScrollValue = 0;
+	float ImagesHeight = 30.0f + 14.0f * m_Map.m_lImages.size() + 27.0f;
+	float ScrollDifference = ImagesHeight - ToolBox.h;
 
-	int ImageNum = m_Map.m_lImages.size();
-	int ScrollNum = ImageNum-Num+10;
-
-	if(ImageNum > Num)	// Do we even need a scrollbar?
+	if(ImagesHeight > ToolBox.h)	// Do we even need a scrollbar?
 	{
 		CUIRect Scroll;
 		ToolBox.VSplitRight(15.0f, &ToolBox, &Scroll);
@@ -1978,12 +1978,12 @@ void CEditor::RenderImages(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 		s_ScrollValue = UiDoScrollbarV(&s_ScrollBar, &Scroll, s_ScrollValue);
 	}
 
-	int ImageStartAt = (int)(ScrollNum*s_ScrollValue);
-	if(ImageStartAt < 0)
-		ImageStartAt = 0;
+	float ImageStartAt = ScrollDifference * s_ScrollValue;
+	if(ImageStartAt < 0.0f)
+		ImageStartAt = 0.0f;
 
-	int ImageStopAt = ImageStartAt+Num;
-	int ImageCur = 0;
+	float ImageStopAt = ImagesHeight - ScrollDifference * (1 - s_ScrollValue);
+	float ImageCur = 0.0f;
 
 	for(int e = 0; e < 2; e++) // two passes, first embedded, then external
 	{
@@ -2000,7 +2000,7 @@ void CEditor::RenderImages(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 			else
 				UI()->DoLabel(&Slot, Localize("External"), 12.0f, 0);
 		}
-		ImageCur++;
+		ImageCur += 15.0f;
 
 		for(int i = 0; i < m_Map.m_lImages.size(); i++)
 		{
@@ -2014,10 +2014,10 @@ void CEditor::RenderImages(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 				break;
 			else if(ImageCur < ImageStartAt)
 			{
-				ImageCur++;
+				ImageCur += 14.0f;
 				continue;
 			}
-			ImageCur++;
+			ImageCur += 14.0f;
 
 			char aBuf[128];
 			str_copy(aBuf, m_Map.m_lImages[i]->m_aName, sizeof(aBuf));
@@ -2055,6 +2055,9 @@ void CEditor::RenderImages(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 		}
 	}
 
+	if(ImageCur + 27.0f > ImageStopAt)
+		return;
+
 	CUIRect Slot;
 	ToolBox.HSplitTop(5.0f, &Slot, &ToolBox);
 
diff --git a/src/game/server/entities/character.cpp b/src/game/server/entities/character.cpp
index 81d1f85b..8203aa8f 100644
--- a/src/game/server/entities/character.cpp
+++ b/src/game/server/entities/character.cpp
@@ -551,6 +551,13 @@ void CCharacter::Tick()
 		Die(m_pPlayer->GetCID(), WEAPON_WORLD);
 	}
 
+	// kill player when leaving gamelayer
+	if((int)m_Pos.x/32 < -200 || (int)m_Pos.x/32 > GameServer()->Collision()->GetWidth()+200 ||
+		(int)m_Pos.y/32 < -200 || (int)m_Pos.y/32 > GameServer()->Collision()->GetHeight()+200)
+	{
+		Die(m_pPlayer->GetCID(), WEAPON_WORLD);
+	}
+	
 	// handle Weapons
 	HandleWeapons();