aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/JoinMultiplayerScreen.cpp
blob: f8e13fbbfc786c8f532643c660549d1c1bb96e51 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include "stdafx.h"
#include "JoinMultiplayerScreen.h"
#include "Button.h"
#include "EditBox.h"
#include "Options.h"
#include "..\Minecraft.World\net.minecraft.locale.h"

JoinMultiplayerScreen::JoinMultiplayerScreen(Screen *lastScreen)
{
	ipEdit = nullptr;
	this->lastScreen = lastScreen;
}

void JoinMultiplayerScreen::tick()
{
	ipEdit->tick();
}

void JoinMultiplayerScreen::init()
{
    Language *language = Language::getInstance();

    Keyboard::enableRepeatEvents(true);
    buttons.clear();
    buttons.push_back(new Button(0, width / 2 - 100, height / 4 + 24 * 4 + 12, language->getElement(L"multiplayer.connect")));
    buttons.push_back(new Button(1, width / 2 - 100, height / 4 + 24 * 5 + 12, language->getElement(L"gui.cancel")));
    wstring ip = replaceAll(minecraft->options->lastMpIp,L"_", L":");
    buttons[0]->active = ip.length() > 0;

    ipEdit = new EditBox(this, font, width / 2 - 100, height / 4 - 10 + 50 + 18, 200, 20, ip);
    ipEdit->inFocus = true;
    ipEdit->setMaxLength(128);

}

void JoinMultiplayerScreen::removed()
{
	Keyboard::enableRepeatEvents(false);
}

void JoinMultiplayerScreen::buttonClicked(Button *button)
{
    if (!button->active) return;
    if (button->id == 1)
	{
        minecraft->setScreen(lastScreen);
    }
	else if (button->id == 0)
	{
        wstring ip = trimString(ipEdit->getValue());

        minecraft->options->lastMpIp = replaceAll(ip,L":", L"_");
        minecraft->options->save();

        vector<wstring> parts = stringSplit(ip,L'L');
        if (ip[0]==L'[')
		{
            size_t pos = ip.find(L"]");
            if (pos != wstring::npos)
			{
                wstring path = ip.substr(1, pos);
                wstring port = trimString(ip.substr(pos + 1));
                if (port[0]==L':' && port.length() > 0)
				{
                    port = port.substr(1);
                    parts.clear();
					parts.push_back(path);
                    parts.push_back(port);
                }
				else
				{
					parts.clear();
                    parts.push_back(path);
                }
            }

        }
        if (parts.size() > 2)
		{
			parts.clear();
			parts.push_back(ip);
        }

		// 4J - TODO
//        minecraft->setScreen(new ConnectScreen(minecraft, parts[0], parts.length > 1 ? parseInt(parts[1], 25565) : 25565));
    }
}

int  JoinMultiplayerScreen::parseInt(const wstring& str, int def)
{
	return _fromString<int>(str);
}

void JoinMultiplayerScreen::keyPressed(wchar_t ch, int eventKey)
{
    ipEdit->keyPressed(ch, eventKey);

    if (ch == 13)
	{
        buttonClicked(buttons[0]);
    }
    buttons[0]->active = ipEdit->getValue().length() > 0;
}

void JoinMultiplayerScreen::mouseClicked(int x, int y, int buttonNum)
{
    Screen::mouseClicked(x, y, buttonNum);

    ipEdit->mouseClicked(x, y, buttonNum);
}

void JoinMultiplayerScreen::render(int xm, int ym, float a)
{
    Language *language = Language::getInstance();

    // fill(0, 0, width, height, 0x40000000);
    renderBackground();

    drawCenteredString(font, language->getElement(L"multiplayer.title"), width / 2, height / 4 - 60 + 20, 0xffffff);
    drawString(font, language->getElement(L"multiplayer.info1"), width / 2 - 140, height / 4 - 60 + 60 + 9 * 0, 0xa0a0a0);
    drawString(font, language->getElement(L"multiplayer.info2"), width / 2 - 140, height / 4 - 60 + 60 + 9 * 1, 0xa0a0a0);
    drawString(font, language->getElement(L"multiplayer.ipinfo"), width / 2 - 140, height / 4 - 60 + 60 + 9 * 4, 0xa0a0a0);

    ipEdit->render();

    Screen::render(xm, ym, a);

}