about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--data/languages/bosnian.txt15
-rw-r--r--data/languages/czech.txt15
-rw-r--r--data/languages/dutch.txt15
-rw-r--r--data/languages/finnish.txt15
-rw-r--r--data/languages/french.txt15
-rw-r--r--data/languages/german.txt15
-rw-r--r--data/languages/italian.txt15
-rw-r--r--data/languages/polish.txt15
-rw-r--r--data/languages/portuguese.txt15
-rw-r--r--data/languages/russian.txt15
-rw-r--r--data/languages/serbian.txt15
-rw-r--r--data/languages/swedish.txt15
-rw-r--r--data/languages/ukrainian.txt15
-rw-r--r--src/game/client/components/menus.cpp73
-rw-r--r--src/game/client/components/menus.h5
15 files changed, 267 insertions, 6 deletions
diff --git a/data/languages/bosnian.txt b/data/languages/bosnian.txt
index 10fd1a82..6d6dd333 100644
--- a/data/languages/bosnian.txt
+++ b/data/languages/bosnian.txt
@@ -945,8 +945,23 @@ ZO
 [ctrl+p] Toggles proof borders. These borders represent what a player maximum can see.
 == 
 
+left
+== 
+
+minute
+== 
+
+minutes
+== 
+
 no limit
 == 
 
+second
+== 
+
+seconds
+== 
+
 ##### old translations #####
 
diff --git a/data/languages/czech.txt b/data/languages/czech.txt
index 4df483a4..e04a359c 100644
--- a/data/languages/czech.txt
+++ b/data/languages/czech.txt
@@ -945,8 +945,23 @@ ZO
 [ctrl+p] Toggles proof borders. These borders represent what a player maximum can see.
 == 
 
+left
+== 
+
+minute
+== 
+
+minutes
+== 
+
 no limit
 == 
 
+second
+== 
+
+seconds
+== 
+
 ##### old translations #####
 
diff --git a/data/languages/dutch.txt b/data/languages/dutch.txt
index e57db832..c0910e77 100644
--- a/data/languages/dutch.txt
+++ b/data/languages/dutch.txt
@@ -945,8 +945,23 @@ Max Screenshots
 Max demos
 == 
 
+left
+== 
+
+minute
+== 
+
+minutes
+== 
+
 no limit
 == 
 
+second
+== 
+
+seconds
+== 
+
 ##### old translations #####
 
diff --git a/data/languages/finnish.txt b/data/languages/finnish.txt
index 044deaf3..9e133c60 100644
--- a/data/languages/finnish.txt
+++ b/data/languages/finnish.txt
@@ -945,8 +945,23 @@ ZO
 [ctrl+p] Toggles proof borders. These borders represent what a player maximum can see.
 == 
 
+left
+== 
+
+minute
+== 
+
+minutes
+== 
+
 no limit
 == 
 
+second
+== 
+
+seconds
+== 
+
 ##### old translations #####
 
diff --git a/data/languages/french.txt b/data/languages/french.txt
index 24364c12..93602699 100644
--- a/data/languages/french.txt
+++ b/data/languages/french.txt
@@ -945,8 +945,23 @@ Y-axis of the envelope
 [ctrl+p] Toggles proof borders. These borders represent what a player maximum can see.
 == 
 
+left
+== 
+
+minute
+== 
+
+minutes
+== 
+
 no limit
 == 
 
+second
+== 
+
+seconds
+== 
+
 ##### old translations #####
 
diff --git a/data/languages/german.txt b/data/languages/german.txt
index f06d798f..4471ce8b 100644
--- a/data/languages/german.txt
+++ b/data/languages/german.txt
@@ -945,8 +945,23 @@ Max Screenshots
 Max demos
 == 
 
+left
+== 
+
+minute
+== 
+
+minutes
+== 
+
 no limit
 == 
 
+second
+== 
+
+seconds
+== 
+
 ##### old translations #####
 
diff --git a/data/languages/italian.txt b/data/languages/italian.txt
index 6ff7e07c..2a964567 100644
--- a/data/languages/italian.txt
+++ b/data/languages/italian.txt
@@ -945,8 +945,23 @@ ZO
 [ctrl+p] Toggles proof borders. These borders represent what a player maximum can see.
 == 
 
+left
+== 
+
+minute
+== 
+
+minutes
+== 
+
 no limit
 == 
 
+second
+== 
+
+seconds
+== 
+
 ##### old translations #####
 
diff --git a/data/languages/polish.txt b/data/languages/polish.txt
index 85871f9a..91ef474b 100644
--- a/data/languages/polish.txt
+++ b/data/languages/polish.txt
@@ -945,8 +945,23 @@ Y-axis of the envelope
 [HOME] Restore map focus
 == 
 
+left
+== 
+
+minute
+== 
+
+minutes
+== 
+
 no limit
 == 
 
+second
+== 
+
+seconds
+== 
+
 ##### old translations #####
 
diff --git a/data/languages/portuguese.txt b/data/languages/portuguese.txt
index c1f33229..fd801303 100644
--- a/data/languages/portuguese.txt
+++ b/data/languages/portuguese.txt
@@ -945,8 +945,23 @@ ZO
 [ctrl+p] Toggles proof borders. These borders represent what a player maximum can see.
 == 
 
+left
+== 
+
+minute
+== 
+
+minutes
+== 
+
 no limit
 == 
 
+second
+== 
+
+seconds
+== 
+
 ##### old translations #####
 
diff --git a/data/languages/russian.txt b/data/languages/russian.txt
index 47bb9ac3..bbb377e3 100644
--- a/data/languages/russian.txt
+++ b/data/languages/russian.txt
@@ -945,8 +945,23 @@ Y-axis of the envelope
 [HOME] Restore map focus
 == 
 
+left
+== 
+
+minute
+== 
+
+minutes
+== 
+
 no limit
 == 
 
+second
+== 
+
+seconds
+== 
+
 ##### old translations #####
 
diff --git a/data/languages/serbian.txt b/data/languages/serbian.txt
index 0071e687..dd1cf879 100644
--- a/data/languages/serbian.txt
+++ b/data/languages/serbian.txt
@@ -945,8 +945,23 @@ ZO
 [ctrl+p] Toggles proof borders. These borders represent what a player maximum can see.
 == 
 
+left
+== 
+
+minute
+== 
+
+minutes
+== 
+
 no limit
 == 
 
+second
+== 
+
+seconds
+== 
+
 ##### old translations #####
 
diff --git a/data/languages/swedish.txt b/data/languages/swedish.txt
index 71dcd9ea..f2e77878 100644
--- a/data/languages/swedish.txt
+++ b/data/languages/swedish.txt
@@ -945,8 +945,23 @@ ZO
 [ctrl+p] Toggles proof borders. These borders represent what a player maximum can see.
 == 
 
+left
+== 
+
+minute
+== 
+
+minutes
+== 
+
 no limit
 == 
 
+second
+== 
+
+seconds
+== 
+
 ##### old translations #####
 
diff --git a/data/languages/ukrainian.txt b/data/languages/ukrainian.txt
index be8bea89..0a5266da 100644
--- a/data/languages/ukrainian.txt
+++ b/data/languages/ukrainian.txt
@@ -945,8 +945,23 @@ Y-axis of the envelope
 [HOME] Restore map focus
 == 
 
+left
+== 
+
+minute
+== 
+
+minutes
+== 
+
 no limit
 == 
 
+second
+== 
+
+seconds
+== 
+
 ##### old translations #####
 
diff --git a/src/game/client/components/menus.cpp b/src/game/client/components/menus.cpp
index 5d9c1bde..6d3c494e 100644
--- a/src/game/client/components/menus.cpp
+++ b/src/game/client/components/menus.cpp
@@ -854,8 +854,7 @@ int CMenus::Render()
 			if(Client()->MapDownloadTotalsize() > 0)
 			{
 				pTitle = Localize("Downloading map");
-				str_format(aBuf, sizeof(aBuf), "%d/%d KiB", Client()->MapDownloadAmount()/1024, Client()->MapDownloadTotalsize()/1024);
-				pExtraText = aBuf;
+				pExtraText = "";
 			}
 		}
 		else if(m_Popup == POPUP_DISCONNECTED)
@@ -971,6 +970,69 @@ int CMenus::Render()
 			static float Offset = 0.0f;
 			DoEditBox(&g_Config.m_Password, &TextBox, g_Config.m_Password, sizeof(g_Config.m_Password), 12.0f, &Offset, true);
 		}
+		else if(m_Popup == POPUP_CONNECTING)
+		{
+			Box = Screen;
+			Box.VMargin(150.0f, &Box);
+			Box.HMargin(150.0f, &Box);
+			Box.HSplitBottom(20.f, &Box, &Part);
+			Box.HSplitBottom(24.f, &Box, &Part);
+			Part.VMargin(120.0f, &Part);
+
+			static int s_Button = 0;
+			if(DoButton_Menu(&s_Button, pButtonText, 0, &Part) || m_EscapePressed || m_EnterPressed)
+			{
+				Client()->Disconnect();
+				m_Popup = POPUP_NONE;
+			}
+
+			if(Client()->MapDownloadTotalsize() > 0)
+			{
+				int64 Now = time_get();
+				if(Now-m_DownloadLastCheckTime >= time_freq())
+				{
+					if(m_DownloadLastCheckSize > Client()->MapDownloadAmount())
+					{
+						// map downloaded restarted
+						m_DownloadLastCheckSize = 0;
+					}
+
+					// update download speed
+					float Diff = (Client()->MapDownloadAmount()-m_DownloadLastCheckSize)/1024.0f;
+					m_DownloadSpeed = (m_DownloadSpeed*(1.0f-(1.0f/m_DownloadSpeed))) + (Diff*(1.0f/m_DownloadSpeed));
+					m_DownloadLastCheckTime = Now;
+					m_DownloadLastCheckSize = Client()->MapDownloadAmount();
+				}
+
+				Box.HSplitTop(64.f, 0, &Box);
+				Box.HSplitTop(24.f, &Part, &Box);
+				str_format(aBuf, sizeof(aBuf), "%d/%d KiB (%.1f KiB/s)", Client()->MapDownloadAmount()/1024, Client()->MapDownloadTotalsize()/1024,	m_DownloadSpeed);
+				UI()->DoLabel(&Part, aBuf, 20.f, 0, -1);
+				
+				// time left
+				const char *pTimeLeftString;
+				int TimeLeft = (Client()->MapDownloadTotalsize()-Client()->MapDownloadAmount())/(m_DownloadSpeed*1024)+1;
+				if(TimeLeft >= 60)
+				{
+					TimeLeft /= 60;
+					pTimeLeftString = TimeLeft == 1 ? Localize("minute") : Localize("minutes");
+				}
+				else
+					pTimeLeftString = TimeLeft == 1 ? Localize("second") : Localize("seconds");
+				Box.HSplitTop(20.f, 0, &Box);
+				Box.HSplitTop(24.f, &Part, &Box);
+				str_format(aBuf, sizeof(aBuf), "%i %s %s", TimeLeft, pTimeLeftString, Localize("left"));
+				UI()->DoLabel(&Part, aBuf, 20.f, 0, -1);
+
+				// progress bar
+				Box.HSplitTop(20.f, 0, &Box);
+				Box.HSplitTop(24.f, &Part, &Box);
+				Part.VMargin(40.0f, &Part);
+				RenderTools()->DrawUIRect(&Part, vec4(1.0f, 1.0f, 1.0f, 0.25f), CUI::CORNER_ALL, 5.0f);
+				Part.w = max(10.0f, (Part.w*Client()->MapDownloadAmount())/Client()->MapDownloadTotalsize());
+				RenderTools()->DrawUIRect(&Part, vec4(1.0f, 1.0f, 1.0f, 0.5f), CUI::CORNER_ALL, 5.0f);
+			}
+		}
 		else if(m_Popup == POPUP_LANGUAGE)
 		{
 			Box = Screen;
@@ -1042,11 +1104,7 @@ int CMenus::Render()
 
 			static int s_Button = 0;
 			if(DoButton_Menu(&s_Button, pButtonText, 0, &Part) || m_EscapePressed || m_EnterPressed)
-			{
-				if(m_Popup == POPUP_CONNECTING)
-					Client()->Disconnect();
 				m_Popup = POPUP_NONE;
-			}
 		}
 	}
 	
@@ -1149,6 +1207,9 @@ void CMenus::OnStateChange(int NewState, int OldState)
 	else if(NewState == IClient::STATE_LOADING)
 	{
 		m_Popup = POPUP_CONNECTING;
+		m_DownloadLastCheckTime = time_get();
+		m_DownloadLastCheckSize = 0;
+		m_DownloadSpeed = 1.0f;
 		//client_serverinfo_request();
 	}
 	else if(NewState == IClient::STATE_CONNECTING)
diff --git a/src/game/client/components/menus.h b/src/game/client/components/menus.h
index 9ca21dae..37d34224 100644
--- a/src/game/client/components/menus.h
+++ b/src/game/client/components/menus.h
@@ -150,6 +150,11 @@ class CMenus : public CComponent
 	bool m_EscapePressed;
 	bool m_EnterPressed;
 	bool m_DeletePressed;
+
+	// for map download popup
+	int64 m_DownloadLastCheckTime;
+	int m_DownloadLastCheckSize;
+	float m_DownloadSpeed;
 	
 	// for call vote
 	int m_CallvoteSelectedOption;