aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/NameEntryScreen.cpp
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/NameEntryScreen.cpp
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.Client/NameEntryScreen.cpp')
-rw-r--r--Minecraft.Client/NameEntryScreen.cpp78
1 files changed, 78 insertions, 0 deletions
diff --git a/Minecraft.Client/NameEntryScreen.cpp b/Minecraft.Client/NameEntryScreen.cpp
new file mode 100644
index 00000000..c9df7024
--- /dev/null
+++ b/Minecraft.Client/NameEntryScreen.cpp
@@ -0,0 +1,78 @@
+#include "stdafx.h"
+#include "NameEntryScreen.h"
+#include "Button.h"
+#include "..\Minecraft.World\StringHelpers.h"
+
+const wstring NameEntryScreen::allowedChars = L"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ,.:-_'*!\"#%/()=+?[]{}<>";
+
+NameEntryScreen::NameEntryScreen(Screen *lastScreen, const wstring& oldName, int slot)
+{
+ frame = 0; // 4J added
+
+ this->lastScreen = lastScreen;
+ this->slot = slot;
+ this->name = oldName;
+ if (name==L"-") name = L"";
+}
+
+void NameEntryScreen::init()
+{
+ buttons.clear();
+ Keyboard::enableRepeatEvents(true);
+ buttons.push_back(new Button(0, width / 2 - 100, height / 4 + 24 * 5, L"Save"));
+ buttons.push_back(new Button(1, width / 2 - 100, height / 4 + 24 * 6, L"Cancel"));
+ buttons[0]->active = trimString(name).length() > 1;
+}
+
+void NameEntryScreen::removed()
+{
+ Keyboard::enableRepeatEvents(false);
+}
+
+void NameEntryScreen::tick()
+{
+ frame++;
+}
+
+void NameEntryScreen::buttonClicked(Button button)
+{
+ if (!button.active) return;
+
+ if (button.id == 0 && trimString(name).length() > 1)
+ {
+ minecraft->saveSlot(slot, trimString(name));
+ minecraft->setScreen(NULL);
+// minecraft->grabMouse(); // 4J - removed
+ }
+ if (button.id == 1)
+ {
+ minecraft->setScreen(lastScreen);
+ }
+}
+
+void NameEntryScreen::keyPressed(wchar_t ch, int eventKey)
+{
+ if (eventKey == Keyboard::KEY_BACK && name.length() > 0) name = name.substr(0, name.length() - 1);
+ if (allowedChars.find(ch) != wstring::npos && name.length()<64)
+ {
+ name += ch;
+ }
+ buttons[0]->active = trimString(name).length() > 1;
+}
+
+void NameEntryScreen::render(int xm, int ym, float a)
+{
+ renderBackground();
+
+ drawCenteredString(font, title, width / 2, 40, 0xffffff);
+
+ int bx = width / 2 - 100;
+ int by = height / 2 - 10;
+ int bw = 200;
+ int bh = 20;
+ fill(bx - 1, by - 1, bx + bw + 1, by + bh + 1, 0xffa0a0a0);
+ fill(bx, by, bx + bw, by + bh, 0xff000000);
+ drawString(font, name + (frame / 6 % 2 == 0 ? L"_" : L""), bx + 4, by + (bh - 8) / 2, 0xe0e0e0);
+
+ Screen::render(xm, ym, a);
+} \ No newline at end of file