GUI_Multiplayer::GUI_Multiplayer() : clients(0) , lineheight(16) , msgwin(0) { setSingleton(this); // allocate some buffers clients = (client_t *)calloc(MAX_PEERS,sizeof(client_t)); // tooltip window tooltipPanel = MyGUI::Gui::getInstance().createWidget<MyGUI::Widget>("PanelSkin", 0, 0, 200, 20, MyGUI::Align::Default, "ToolTip"); tooltipText = tooltipPanel->createWidget<MyGUI::TextBox>("TextBox", 4, 2, 200, 16, MyGUI::Align::Default); tooltipText->setFontName("VeraMono"); //tooltipPanel->setAlpha(0.9f); tooltipText->setFontHeight(16); tooltipPanel->setVisible(false); // message window msgwin = MyGUI::Gui::getInstance().createWidget<MyGUI::Window>("WindowCSX", 0, 0, 400, 300, MyGUI::Align::Center, "Overlapped"); msgwin->setCaption(_L("Player Information")); msgtext = msgwin->createWidget<MyGUI::Edit>("EditStretch", 0, 0, 400, 300, MyGUI::Align::Default, "helptext"); msgtext->setCaption(""); msgtext->setEditWordWrap(true); msgtext->setEditStatic(true); msgwin->setVisible(false); // network quality warning netmsgwin = MyGUI::Gui::getInstance().createWidget<MyGUI::Window>("FlowContainer", 5, 30, 300, 40, MyGUI::Align::Default, "Main"); netmsgwin->setAlpha(0.8f); MyGUI::ImageBox *nimg = netmsgwin->createWidget<MyGUI::ImageBox>("ImageBox", 0, 0, 16, 16, MyGUI::Align::Default, "Main"); nimg->setImageTexture("error.png"); netmsgtext = netmsgwin->createWidget<MyGUI::TextBox>("TextBox", 18, 2, 300, 40, MyGUI::Align::Default, "helptext"); netmsgtext->setCaption(_L("Slow Network Download")); netmsgtext->setFontName("DefaultBig"); netmsgtext->setTextColour(MyGUI::Colour::Red); netmsgtext->setFontHeight(lineheight); netmsgwin->setVisible(false); // now the main GUI MyGUI::IntSize gui_area = MyGUI::RenderManager::getInstance().getViewSize(); int x=gui_area.width - 300, y=30; MyGUI::ImageBox *ib = MyGUI::Gui::getInstance().createWidget<MyGUI::ImageBox>("ImageBox", x, y, sidebarWidth, gui_area.height, MyGUI::Align::Default, "Main"); ib->setImageTexture("mpbg.png"); mpPanel = ib; //->createWidget<MyGUI::Widget>("FlowContainer", x, y, sidebarWidth, gui_area.height, MyGUI::Align::Default, "Main"); mpPanel->setVisible(true); y=5; UTFString tmp; for (int i = 0; i < MAX_PEERS + 1; i++) // plus 1 for local entry { x=100; // space for icons player_row_t *row = &player_rows[i]; row->playername = mpPanel->createWidget<MyGUI::TextBox>("TextBox", x, y+1, sidebarWidth, lineheight, MyGUI::Align::Default, "Main"); row->playername->setCaption("Player " + TOSTRING(i)); row->playername->setFontName("DefaultBig"); tmp = _L("user name"); row->playername->setUserString("tooltip", tmp.asUTF8()); row->playername->eventToolTip += MyGUI::newDelegate(this, &GUI_Multiplayer::openToolTip); row->playername->setNeedToolTip(true); row->playername->setVisible(false); row->playername->setFontHeight(lineheight); row->playername->setAlpha(1); x -= 18; row->flagimg = mpPanel->createWidget<MyGUI::ImageBox>("ImageBox", x, y + 3, 16, 11, MyGUI::Align::Default, "Main"); tmp = _L("user country"); row->flagimg->setUserString("tooltip", tmp.asUTF8()); row->flagimg->eventToolTip += MyGUI::newDelegate(this, &GUI_Multiplayer::openToolTip); row->flagimg->setNeedToolTip(true); row->flagimg->setVisible(false); x -= 18; row->statimg = mpPanel->createWidget<MyGUI::ImageBox>("ImageBox", x, y, 16, 16, MyGUI::Align::Default, "Main"); tmp = _L("user authentication level"); row->statimg->setUserString("tooltip", tmp.asUTF8()); row->statimg->eventToolTip += MyGUI::newDelegate(this, &GUI_Multiplayer::openToolTip); row->statimg->setNeedToolTip(true); row->statimg->setVisible(false); x -= 18; row->userTruckOKImg = mpPanel->createWidget<MyGUI::ImageBox>("ImageBox", x, y, 16, 16, MyGUI::Align::Default, "Main"); tmp = _L("truck loading state"); row->userTruckOKImg->setUserString("tooltip", tmp.asUTF8()); row->userTruckOKImg->eventToolTip += MyGUI::newDelegate(this, &GUI_Multiplayer::openToolTip); row->userTruckOKImg->setNeedToolTip(true); row->userTruckOKImg->setVisible(false); row->userTruckOKImg->eventMouseButtonClick += MyGUI::newDelegate(this, &GUI_Multiplayer::clickInfoIcon); x -= 18; row->userTruckOKRemoteImg = mpPanel->createWidget<MyGUI::ImageBox>("ImageBox", x, y, 16, 16, MyGUI::Align::Default, "Main"); tmp = _L("remote truck loading state"); row->userTruckOKRemoteImg->setUserString("tooltip", tmp.asUTF8()); row->userTruckOKRemoteImg->eventToolTip += MyGUI::newDelegate(this, &GUI_Multiplayer::openToolTip); row->userTruckOKRemoteImg->setNeedToolTip(true); row->userTruckOKRemoteImg->setVisible(false); row->userTruckOKRemoteImg->eventMouseButtonClick += MyGUI::newDelegate(this, &GUI_Multiplayer::clickInfoIcon); x -= 18; row->usergoimg = mpPanel->createWidget<MyGUI::ImageBox>("ImageBox", x, y, 16, 16, MyGUI::Align::Default, "Main"); row->usergoimg->setUserString("num", TOSTRING(i)); tmp = _L("go to user"); row->usergoimg->setUserString("tooltip", tmp.asUTF8()); row->usergoimg->setImageTexture("user_go.png"); row->usergoimg->eventToolTip += MyGUI::newDelegate(this, &GUI_Multiplayer::openToolTip); row->usergoimg->setNeedToolTip(true); row->usergoimg->setVisible(false); row->usergoimg->eventMouseButtonClick += MyGUI::newDelegate(this, &GUI_Multiplayer::clickUserGoIcon); /* img = MyGUI::Gui::getInstance().createWidget<MyGUI::ImageBox>("ImageBox", x-36, y, 16, 16, MyGUI::Align::Default, "Overlapped"); img->setImageTexture("information.png"); img->eventMouseButtonClick += MyGUI::newDelegate(this, &GUI_Multiplayer::clickInfoIcon); img->eventToolTip += MyGUI::newDelegate(this, &GUI_Multiplayer::openToolTip); img->setNeedToolTip(true); img->setUserString("info", TOSTRING(i)); img->setUserString("tooltip", _L("information about the user")); */ y += lineheight; } }
void GUI_Multiplayer::updateSlot(player_row_t *row, user_info_t *c, bool self) { if (!row || !c) return; int x = 100; int y = row->playername->getPosition().top; // name row->playername->setCaption(c->username); ColourValue col = PlayerColours::getSingleton().getColour(c->colournum); row->playername->setTextColour(MyGUI::Colour(col.r, col.g, col.b, col.a)); row->playername->setVisible(true); x -= 18; // flag StringVector parts = StringUtil::split(String(c->language), "_"); if (parts.size() == 2) { String lang = parts[1]; StringUtil::toLowerCase(lang); row->flagimg->setImageTexture(lang + ".png"); row->flagimg->setUserString("tooltip", _L("user language: ") + parts[0] + _L(" user country: ") + parts[1]); row->flagimg->setVisible(true); row->flagimg->setPosition(x, y); x -= 18; } else { row->flagimg->setVisible(false); } UTFString tmp; // auth if (c->authstatus == AUTH_NONE) { row->statimg->setVisible(false); } else if (c->authstatus & AUTH_ADMIN) { row->statimg->setVisible(true); row->statimg->setImageTexture("flag_red.png"); tmp = _L("Server Administrator"); row->statimg->setUserString("tooltip", tmp.asUTF8()); row->statimg->setPosition(x, y); x -= 18; } else if (c->authstatus & AUTH_MOD) { row->statimg->setVisible(true); row->statimg->setImageTexture("flag_blue.png"); tmp = _L("Server Moderator"); row->statimg->setUserString("tooltip", tmp.asUTF8()); row->statimg->setPosition(x, y); x -= 18; } else if (c->authstatus & AUTH_RANKED) { row->statimg->setVisible(true); row->statimg->setImageTexture("flag_green.png"); tmp = _L("ranked user"); row->statimg->setUserString("tooltip", tmp.asUTF8()); row->statimg->setPosition(x, y); x -= 18; } // truck ok image if (!self) { row->userTruckOKImg->setVisible(true); row->userTruckOKRemoteImg->setVisible(true); row->userTruckOKImg->setUserString("uid", TOSTRING(c->uniqueid)); row->userTruckOKRemoteImg->setUserString("uid", TOSTRING(c->uniqueid)); row->userTruckOKImg->setPosition(x, y); x -= 10; row->userTruckOKRemoteImg->setPosition(x, y); x -= 10; int ok = BeamFactory::getSingleton().checkStreamsOK(c->uniqueid); if (ok == 0) { row->userTruckOKImg->setImageTexture("arrow_down_red.png"); tmp = _L("Truck loading errors"); row->userTruckOKImg->setUserString("tooltip", tmp.asUTF8()); } else if (ok == 1) { row->userTruckOKImg->setImageTexture("arrow_down.png"); tmp = _L("Truck loaded correctly, no errors"); row->userTruckOKImg->setUserString("tooltip", tmp.asUTF8()); } else if (ok == 2) { row->userTruckOKImg->setImageTexture("arrow_down_grey.png"); tmp = _L("no truck loaded"); row->userTruckOKImg->setUserString("tooltip", tmp.asUTF8()); } int rok = BeamFactory::getSingleton().checkStreamsRemoteOK(c->uniqueid); if (rok == 0) { row->userTruckOKRemoteImg->setImageTexture("arrow_up_red.png"); tmp = _L("Remote Truck loading errors"); row->userTruckOKRemoteImg->setUserString("tooltip", tmp.asUTF8()); } else if (rok == 1) { row->userTruckOKRemoteImg->setImageTexture("arrow_up.png"); tmp = _L("Remote Truck loaded correctly, no errors"); row->userTruckOKRemoteImg->setUserString("tooltip", tmp.asUTF8()); } else if (rok == 2) { row->userTruckOKRemoteImg->setImageTexture("arrow_up_grey.png"); tmp = _L("No Trucks loaded"); row->userTruckOKRemoteImg->setUserString("tooltip", tmp.asUTF8()); } } else { row->userTruckOKImg->setVisible(false); row->userTruckOKRemoteImg->setVisible(false); } // user go img row->usergoimg->setVisible(false); }