87 ImGuiWindowFlags flags = ImGuiWindowFlags_NoCollapse |
88 ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoScrollbar;
89 const float content_width = 225.f;
90 ImGui::SetNextWindowContentWidth(content_width);
91 ImGui::SetNextWindowPos(ImVec2(
92 ImGui::GetIO().DisplaySize.x - (content_width + (2*ImGui::GetStyle().WindowPadding.x) + theme.
screen_edge_padding.x),
95 int y = 20 + (ImGui::GetTextLineHeightWithSpacing() *
m_users.size());
102 ImGui::SetNextWindowSize(ImVec2((content_width + (2*ImGui::GetStyle().WindowPadding.x)),
y));
104 ImGui::Begin(
"Peers",
nullptr, flags);
110 ImGui::PushID(user.uniqueid);
111 const ImVec2 hover_tl = ImGui::GetCursorScreenPos();
114 if (user.uniqueid == local_user.
uniqueid)
116 ImGui::Dummy(ImVec2(ImGui::CalcTextSize(
" < ").
x + ImGui::GetStyle().FramePadding.x*2 , ImGui::GetTextLineHeight()));
118 else if (ImGui::SmallButton(
" < "))
133 Ogre::TexturePtr flag_tex;
134 Ogre::TexturePtr auth_tex;
135 Ogre::TexturePtr down_tex;
136 Ogre::TexturePtr up_tex;
139 if (user.uniqueid != local_user.
uniqueid &&
160 this->
DrawIcon(down_tex, ImVec2(8.f, ImGui::GetTextLineHeight()));
161 this->
DrawIcon(up_tex, ImVec2(8.f, ImGui::GetTextLineHeight()));
168 this->
DrawIcon(auth_tex, ImVec2(14.f, ImGui::GetTextLineHeight()));
171 StringVector parts = StringUtil::split(user.language,
"_");
172 if (parts.size() == 2)
174 StringUtil::toLowerCase(parts[1]);
175 flag_tex =
FetchIcon((parts[1] +
".png").c_str());
176 this->
DrawIcon(flag_tex, ImVec2(16.f, ImGui::GetTextLineHeight()));
180 ImGui::SetCursorPosX(ImGui::GetCursorPosX() + ImGui::GetStyle().ItemSpacing.x);
182 ImGui::TextColored(ImVec4(col.r, col.g, col.b, col.a),
"%s", user.username);
183 const ImVec2 hover_br = hover_tl + ImVec2(content_width, ImGui::GetTextLineHeight());
184 const float HOVER_TL_SHIFTX = 20.f;
186 = hover_br.x > ImGui::GetIO().MousePos.x
187 && hover_br.y > ImGui::GetIO().MousePos.y
188 && ImGui::GetIO().MousePos.x > (hover_tl.x + HOVER_TL_SHIFTX)
189 && ImGui::GetIO().MousePos.y > hover_tl.y;
194 ImGui::BeginTooltip();
198 ImGui::TextDisabled(
"%s: ",
_LC(
"MultiplayerClientList",
"user name"));
200 ImGui::TextColored(ImVec4(col.r, col.g, col.b, col.a),
"%s", user.username);
203 ImGui::TextDisabled(
"%s: ",
_LC(
"MultiplayerClientList",
"user uid"));
205 ImGui::Text(
"%d", user.uniqueid);
207 ImGui::TextDisabled(
"%s",
_LC(
"MultiplayerClientList",
"user language: "));
209 ImGui::Text(
"%s", parts[0].c_str());
211 ImGui::TextDisabled(
"%s",
_LC(
"MultiplayerClientList",
"user country: "));
213 ImGui::Text(
"%s", parts[1].c_str());
217 ImGui::Image(
reinterpret_cast<ImTextureID
>(flag_tex->getHandle()),
218 ImVec2(flag_tex->getWidth(), flag_tex->getHeight()));
222 ImGui::TextDisabled(
"%s",
_LC(
"MultiplayerClientList",
"user authentication level"));
225 ImGui::Image(
reinterpret_cast<ImTextureID
>(auth_tex->getHandle()),
226 ImVec2(auth_tex->getWidth(), auth_tex->getHeight()));
230 ImGui::Text(
"%s",
App::GetNetwork()->UserAuthToStringLong(user).c_str());
233 if (user.uniqueid != local_user.
uniqueid &&
237 ImGui::TextDisabled(
"%s",
_LC(
"MultiplayerClientList",
"truck loading state"));
240 ImGui::Image(
reinterpret_cast<ImTextureID
>(down_tex->getHandle()),
241 ImVec2(down_tex->getWidth(), down_tex->getHeight()));
252 ImGui::TextDisabled(
"%s",
_LC(
"MultiplayerClientList",
"remote truck loading state"));
255 ImGui::Image(
reinterpret_cast<ImTextureID
>(up_tex->getHandle()),
256 ImVec2(up_tex->getWidth(), up_tex->getHeight()));
280 ImGui::TextColored(
App::GetGuiManager()->GetTheme().error_text_color,
"%s",
_LC(
"MultiplayerClientList",
"Slow Network Download"));
284 ImGui::PopStyleColor(1);
Game state manager and message-queue provider.
void PushMessage(Message m)
Doesn't guarantee order! Use ChainMessage() if order matters.
void ChainMessage(Message m)
Add to last pushed message's chain.