Display all votes in the RHS of tracks screen
This commit is contained in:
parent
ee64a22349
commit
cfd1de43bb
@ -2,7 +2,7 @@
|
||||
<stkgui>
|
||||
<icon-button id="back" x="0" y="0" height="8%" icon="gui/back.png"/>
|
||||
|
||||
<div x="1%" y="1%" width="98%" height="96%" layout="vertical-row" >
|
||||
<div id="all-track" x="1%" y="1%" width="60%" height="96%" layout="vertical-row" >
|
||||
<header width="80%" I18N="In the track selection screen" text="All Tracks"
|
||||
align="center" text_align="center" />
|
||||
|
||||
@ -38,4 +38,11 @@
|
||||
</div>
|
||||
</box>
|
||||
</div>
|
||||
<div id="vote" x="63%" y="1%" width="37%" height="96%" layout="vertical-row">
|
||||
<div width="95%" proportion="2" layout="horizontal-row">
|
||||
<box proportion="2" height="100%" layout="vertical-row">
|
||||
<label id="vote-text" word_wrap="true" id="text" proportion="3" width="100%" height="100%" text_valign="top"/>
|
||||
</box>
|
||||
</div>
|
||||
</div>
|
||||
</stkgui>
|
||||
|
@ -101,7 +101,7 @@ private:
|
||||
|
||||
public:
|
||||
TextMessage(MessageQueue::MessageType mt, const core::stringw &message) :
|
||||
Message(mt == MessageQueue::MT_NETWORK_MSG ? 1.0f : 5.0f)
|
||||
Message(5.0f)
|
||||
{
|
||||
m_message_type = mt;
|
||||
m_message = message;
|
||||
@ -111,8 +111,7 @@ public:
|
||||
m_render_type = "achievement-message::neutral";
|
||||
else if (mt == MessageQueue::MT_ERROR)
|
||||
m_render_type = "error-message::neutral";
|
||||
else if (mt == MessageQueue::MT_GENERIC ||
|
||||
mt == MessageQueue::MT_NETWORK_MSG)
|
||||
else if (mt == MessageQueue::MT_GENERIC)
|
||||
m_render_type = "generic-message::neutral";
|
||||
else
|
||||
m_render_type = "friend-message::neutral";
|
||||
|
@ -40,7 +40,6 @@ namespace MessageQueue
|
||||
MT_ACHIEVEMENT,
|
||||
MT_ERROR,
|
||||
MT_GENERIC,
|
||||
MT_NETWORK_MSG,
|
||||
MT_PROGRESS
|
||||
};
|
||||
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include "states_screens/network_kart_selection.hpp"
|
||||
#include "states_screens/race_result_gui.hpp"
|
||||
#include "states_screens/state_manager.hpp"
|
||||
#include "states_screens/tracks_screen.hpp"
|
||||
#include "tracks/track.hpp"
|
||||
#include "tracks/track_manager.hpp"
|
||||
#include "utils/log.hpp"
|
||||
@ -296,6 +297,7 @@ void ClientLobby::update(float dt)
|
||||
{
|
||||
// In case the user opened a user info dialog
|
||||
GUIEngine::ModalDialog::dismiss();
|
||||
TracksScreen::getInstance()->resetVote();
|
||||
NetworkKartSelectionScreen* screen =
|
||||
NetworkKartSelectionScreen::getInstance();
|
||||
screen->setAvailableKartsFromServer(m_available_karts);
|
||||
@ -325,9 +327,12 @@ void ClientLobby::displayPlayerVote(Event* event)
|
||||
{
|
||||
if (!checkDataSize(event, 4)) return;
|
||||
// Get the player name who voted
|
||||
core::stringw player_name;
|
||||
NetworkString& data = event->data();
|
||||
data.decodeStringW(&player_name);
|
||||
float timeout = data.getFloat();
|
||||
TracksScreen::getInstance()->setVoteTimeout(timeout);
|
||||
std::string player_name;
|
||||
data.decodeString(&player_name);
|
||||
uint32_t host_id = data.getUInt32();
|
||||
player_name += ": ";
|
||||
std::string track_name;
|
||||
data.decodeString(&track_name);
|
||||
@ -337,14 +342,14 @@ void ClientLobby::displayPlayerVote(Event* event)
|
||||
core::stringw track_readable = track->getName();
|
||||
int lap = data.getUInt8();
|
||||
int rev = data.getUInt8();
|
||||
int t = data.getUInt8();
|
||||
core::stringw yes = _("Yes");
|
||||
core::stringw no = _("No");
|
||||
//I18N: Vote message in network game from a player
|
||||
core::stringw vote_msg = _("Track: %s, laps: %d, reversed: %s, "
|
||||
"remaining time: %ds", track_readable, lap, rev == 1 ? yes : no, t);
|
||||
vote_msg = player_name + vote_msg;
|
||||
MessageQueue::add(MessageQueue::MT_NETWORK_MSG, vote_msg);
|
||||
core::stringw vote_msg = _("Track: %s,\nlaps: %d, reversed: %s",
|
||||
track_readable, lap, rev == 1 ? yes : no);
|
||||
vote_msg = StringUtils::utf8ToWide(player_name) + vote_msg;
|
||||
TracksScreen::getInstance()->addVoteMessage(player_name +
|
||||
StringUtils::toString(host_id), vote_msg);
|
||||
} // displayPlayerVote
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
@ -1052,8 +1052,10 @@ void ServerLobby::playerVote(Event* event)
|
||||
|
||||
NetworkString& data = event->data();
|
||||
NetworkString other = NetworkString(PROTOCOL_LOBBY_ROOM);
|
||||
other.addUInt8(LE_VOTE).encodeString(event->getPeer()
|
||||
std::string name = StringUtils::wideToUtf8(event->getPeer()
|
||||
->getPlayerProfiles()[0]->getName());
|
||||
other.addUInt8(LE_VOTE).addFloat(m_timeout).encodeString(name)
|
||||
.addUInt32(event->getPeer()->getHostId());
|
||||
other += data;
|
||||
|
||||
std::string track_name;
|
||||
@ -1062,7 +1064,6 @@ void ServerLobby::playerVote(Event* event)
|
||||
uint8_t reverse = data.getUInt8();
|
||||
m_peers_votes[event->getPeerSP()] =
|
||||
std::make_tuple(track_name, lap, reverse == 1);
|
||||
other.addUInt8((uint8_t)remaining_time);
|
||||
sendMessageToPeersChangingToken(&other);
|
||||
|
||||
} // playerVote
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "config/player_manager.hpp"
|
||||
#include "config/user_config.hpp"
|
||||
#include "graphics/stk_tex_manager.hpp"
|
||||
#include "guiengine/scalable_font.hpp"
|
||||
#include "guiengine/widget.hpp"
|
||||
#include "guiengine/widgets/check_box_widget.hpp"
|
||||
#include "guiengine/widgets/dynamic_ribbon_widget.hpp"
|
||||
@ -139,6 +140,7 @@ bool TracksScreen::onEscapePressed()
|
||||
void TracksScreen::tearDown()
|
||||
{
|
||||
m_network_tracks = false;
|
||||
m_vote_timeout = -1.0f;
|
||||
} // tearDown
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
@ -146,6 +148,7 @@ void TracksScreen::loadedFromFile()
|
||||
{
|
||||
m_reversed = NULL;
|
||||
m_laps = NULL;
|
||||
m_votes = NULL;
|
||||
} // loadedFromFile
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
@ -158,6 +161,7 @@ void TracksScreen::beforeAddingWidget()
|
||||
if (m_bottom_box_height == -1)
|
||||
m_bottom_box_height = rect_box->m_h;
|
||||
|
||||
m_votes = getWidget<LabelWidget>("vote-text");
|
||||
if (m_network_tracks)
|
||||
{
|
||||
rect_box->setVisible(true);
|
||||
@ -174,6 +178,9 @@ void TracksScreen::beforeAddingWidget()
|
||||
m_reversed = getWidget<CheckBoxWidget>("reverse");
|
||||
assert(m_reversed != NULL);
|
||||
m_reversed->m_properties[GUIEngine::PROP_ALIGN] = "center";
|
||||
getWidget("all-track")->m_properties[GUIEngine::PROP_WIDTH] = "60%";
|
||||
getWidget("vote")->setVisible(true);
|
||||
m_votes->setVisible(true);
|
||||
calculateLayout();
|
||||
}
|
||||
else
|
||||
@ -186,9 +193,11 @@ void TracksScreen::beforeAddingWidget()
|
||||
getWidget("lap-spinner")->setVisible(false);
|
||||
getWidget("reverse-text")->setVisible(false);
|
||||
getWidget("reverse")->setVisible(false);
|
||||
getWidget("all-track")->m_properties[GUIEngine::PROP_WIDTH] = "98%";
|
||||
getWidget("vote")->setVisible(false);
|
||||
m_votes->setVisible(false);
|
||||
calculateLayout();
|
||||
}
|
||||
|
||||
RibbonWidget* tabs = getWidget<RibbonWidget>("trackgroups");
|
||||
tabs->clearAllChildren();
|
||||
|
||||
@ -346,3 +355,33 @@ void TracksScreen::setFocusOnTrack(const std::string& trackName)
|
||||
// so it's safe to use 'PLAYER_ID_GAME_MASTER'
|
||||
tracks_widget->setSelection(trackName, PLAYER_ID_GAME_MASTER, true);
|
||||
} // setFocusOnTrack
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
void TracksScreen::onUpdate(float dt)
|
||||
{
|
||||
if (m_vote_timeout == -1.0f)
|
||||
{
|
||||
return;
|
||||
}
|
||||
assert(m_votes);
|
||||
m_votes->setVisible(true);
|
||||
int remaining_time = int(m_vote_timeout - float(StkTime::getRealTime()));
|
||||
if (remaining_time < 0)
|
||||
remaining_time = 0;
|
||||
//I18N: In tracks screen, about voting of tracks in network
|
||||
core::stringw message = _("Remaining time: %d\n", remaining_time);
|
||||
unsigned height = GUIEngine::getFont()->getDimension(L"X").Height;
|
||||
const unsigned total_height = m_votes->getDimension().Height;
|
||||
m_vote_messages.lock();
|
||||
for (auto& p : m_vote_messages.getData())
|
||||
{
|
||||
height += GUIEngine::getFont()->getDimension(L"X").Height * 2;
|
||||
if (height > total_height)
|
||||
break;
|
||||
message += p.second;
|
||||
message += L"\n";
|
||||
}
|
||||
m_vote_messages.unlock();
|
||||
m_votes->setText(message, true);
|
||||
|
||||
} // onUpdate
|
||||
|
@ -19,11 +19,15 @@
|
||||
#define HEADER_TRACKS_SCREEN_HPP
|
||||
|
||||
#include "guiengine/screen.hpp"
|
||||
#include "utils/synchronised.hpp"
|
||||
#include <deque>
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
namespace GUIEngine
|
||||
{
|
||||
class CheckBoxWidget;
|
||||
class LabelWidget;
|
||||
class SpinnerWidget;
|
||||
}
|
||||
|
||||
@ -45,10 +49,16 @@ private:
|
||||
|
||||
GUIEngine::CheckBoxWidget* m_reversed;
|
||||
GUIEngine::SpinnerWidget* m_laps;
|
||||
GUIEngine::LabelWidget* m_votes;
|
||||
|
||||
bool m_network_tracks, m_reverse_checked;
|
||||
|
||||
int m_bottom_box_height = -1;
|
||||
|
||||
float m_vote_timeout = -1.0f;
|
||||
|
||||
Synchronised<std::map<std::string, core::stringw> > m_vote_messages;
|
||||
|
||||
/** adds the tracks from the current track group into the tracks ribbon */
|
||||
void buildTrackList();
|
||||
|
||||
@ -76,9 +86,36 @@ public:
|
||||
/** \brief implement callback from parent class GUIEngine::Screen */
|
||||
virtual bool onEscapePressed() OVERRIDE;
|
||||
|
||||
/** \brief implement callback from parent class GUIEngine::Screen */
|
||||
virtual void onUpdate(float dt) OVERRIDE;
|
||||
|
||||
void setFocusOnTrack(const std::string& trackName);
|
||||
|
||||
void setNetworkTracks() { m_network_tracks = true; }
|
||||
|
||||
void resetVote()
|
||||
{
|
||||
m_vote_messages.lock();
|
||||
m_vote_messages.getData().clear();
|
||||
m_vote_messages.unlock();
|
||||
m_vote_timeout = -1.0f;
|
||||
}
|
||||
|
||||
void setVoteTimeout(float timeout)
|
||||
{
|
||||
if (m_vote_timeout != -1.0f)
|
||||
return;
|
||||
m_vote_timeout = timeout;
|
||||
}
|
||||
|
||||
void addVoteMessage(const std::string& user,
|
||||
const irr::core::stringw& message)
|
||||
{
|
||||
m_vote_messages.lock();
|
||||
m_vote_messages.getData()[user] = message;
|
||||
m_vote_messages.unlock();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user