mirror of
https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1.git
synced 2026-03-20 06:53:30 +00:00
the whole game
This commit is contained in:
167
src/client/gui/screens/JoinGameScreen.cpp
Executable file
167
src/client/gui/screens/JoinGameScreen.cpp
Executable file
@@ -0,0 +1,167 @@
|
||||
#include "JoinGameScreen.h"
|
||||
#include "StartMenuScreen.h"
|
||||
#include "ProgressScreen.h"
|
||||
#include "../Font.h"
|
||||
#include "../../../network/RakNetInstance.h"
|
||||
|
||||
JoinGameScreen::JoinGameScreen()
|
||||
: bJoin( 2, "Join Game"),
|
||||
bBack( 3, "Back"),
|
||||
gamesList(NULL)
|
||||
{
|
||||
bJoin.active = false;
|
||||
//gamesList->yInertia = 0.5f;
|
||||
}
|
||||
|
||||
JoinGameScreen::~JoinGameScreen()
|
||||
{
|
||||
delete gamesList;
|
||||
}
|
||||
|
||||
void JoinGameScreen::buttonClicked(Button* button)
|
||||
{
|
||||
if (button->id == bJoin.id)
|
||||
{
|
||||
if (isIndexValid(gamesList->selectedItem))
|
||||
{
|
||||
PingedCompatibleServer selectedServer = gamesList->copiedServerList[gamesList->selectedItem];
|
||||
minecraft->joinMultiplayer(selectedServer);
|
||||
{
|
||||
bJoin.active = false;
|
||||
bBack.active = false;
|
||||
minecraft->setScreen(new ProgressScreen());
|
||||
}
|
||||
}
|
||||
//minecraft->locateMultiplayer();
|
||||
//minecraft->setScreen(new JoinGameScreen());
|
||||
}
|
||||
if (button->id == bBack.id)
|
||||
{
|
||||
minecraft->cancelLocateMultiplayer();
|
||||
minecraft->screenChooser.setScreen(SCREEN_STARTMENU);
|
||||
}
|
||||
}
|
||||
|
||||
bool JoinGameScreen::handleBackEvent(bool isDown)
|
||||
{
|
||||
if (!isDown)
|
||||
{
|
||||
minecraft->cancelLocateMultiplayer();
|
||||
minecraft->screenChooser.setScreen(SCREEN_STARTMENU);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool JoinGameScreen::isIndexValid( int index )
|
||||
{
|
||||
return gamesList && index >= 0 && index < gamesList->getNumberOfItems();
|
||||
}
|
||||
|
||||
void JoinGameScreen::tick()
|
||||
{
|
||||
const ServerList& orgServerList = minecraft->raknetInstance->getServerList();
|
||||
ServerList serverList;
|
||||
for (unsigned int i = 0; i < orgServerList.size(); ++i)
|
||||
if (orgServerList[i].name.GetLength() > 0)
|
||||
serverList.push_back(orgServerList[i]);
|
||||
|
||||
if (serverList.size() != gamesList->copiedServerList.size())
|
||||
{
|
||||
// copy the currently selected item
|
||||
PingedCompatibleServer selectedServer;
|
||||
bool hasSelection = false;
|
||||
if (isIndexValid(gamesList->selectedItem))
|
||||
{
|
||||
selectedServer = gamesList->copiedServerList[gamesList->selectedItem];
|
||||
hasSelection = true;
|
||||
}
|
||||
|
||||
gamesList->copiedServerList = serverList;
|
||||
gamesList->selectItem(-1, false);
|
||||
|
||||
// re-select previous item if it still exists
|
||||
if (hasSelection)
|
||||
{
|
||||
for (unsigned int i = 0; i < gamesList->copiedServerList.size(); i++)
|
||||
{
|
||||
if (gamesList->copiedServerList[i].address == selectedServer.address)
|
||||
{
|
||||
gamesList->selectItem(i, false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (int i = (int)gamesList->copiedServerList.size()-1; i >= 0 ; --i) {
|
||||
for (int j = 0; j < (int) serverList.size(); ++j)
|
||||
if (serverList[j].address == gamesList->copiedServerList[i].address)
|
||||
gamesList->copiedServerList[i].name = serverList[j].name;
|
||||
}
|
||||
}
|
||||
|
||||
bJoin.active = isIndexValid(gamesList->selectedItem);
|
||||
}
|
||||
|
||||
void JoinGameScreen::init()
|
||||
{
|
||||
buttons.push_back(&bJoin);
|
||||
buttons.push_back(&bBack);
|
||||
|
||||
minecraft->raknetInstance->clearServerList();
|
||||
gamesList = new AvailableGamesList(minecraft, width, height);
|
||||
|
||||
#ifdef ANDROID
|
||||
tabButtons.push_back(&bJoin);
|
||||
tabButtons.push_back(&bBack);
|
||||
#endif
|
||||
}
|
||||
|
||||
void JoinGameScreen::setupPositions() {
|
||||
int yBase = height - 26;
|
||||
|
||||
//#ifdef ANDROID
|
||||
bJoin.y = yBase;
|
||||
bBack.y = yBase;
|
||||
|
||||
bBack.width = bJoin.width = 120;
|
||||
//#endif
|
||||
|
||||
// Center buttons
|
||||
bJoin.x = width / 2 - 4 - bJoin.width;
|
||||
bBack.x = width / 2 + 4;
|
||||
}
|
||||
|
||||
void JoinGameScreen::render( int xm, int ym, float a )
|
||||
{
|
||||
bool hasNetwork = minecraft->platform()->isNetworkEnabled(true);
|
||||
#ifdef WIN32
|
||||
hasNetwork = hasNetwork && !GetAsyncKeyState(VK_TAB);
|
||||
#endif
|
||||
|
||||
renderBackground();
|
||||
if (hasNetwork) gamesList->render(xm, ym, a);
|
||||
Screen::render(xm, ym, a);
|
||||
|
||||
if (hasNetwork) {
|
||||
#ifdef RPI
|
||||
std::string s = "Scanning for Local Network Games...";
|
||||
#else
|
||||
std::string s = "Scanning for WiFi Games...";
|
||||
#endif
|
||||
drawCenteredString(minecraft->font, s, width / 2, 8, 0xffffffff);
|
||||
|
||||
const int textWidth = minecraft->font->width(s);
|
||||
const int spinnerX = width/2 + textWidth / 2 + 6;
|
||||
|
||||
static const char* spinnerTexts[] = {"-", "\\", "|", "/"};
|
||||
int n = ((int)(5.5f * getTimeS()) % 4);
|
||||
drawCenteredString(minecraft->font, spinnerTexts[n], spinnerX, 8, 0xffffffff);
|
||||
} else {
|
||||
std::string s = "WiFi is disabled";
|
||||
const int yy = height / 2 - 8;
|
||||
drawCenteredString(minecraft->font, s, width / 2, yy, 0xffffffff);
|
||||
}
|
||||
}
|
||||
|
||||
bool JoinGameScreen::isInGameScreen() { return false; }
|
||||
Reference in New Issue
Block a user