From 9e692c9ec391552ca0dd481c2abb279313a6531a Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 10 Mar 2026 14:25:00 +0600 Subject: [PATCH] added enter nicknamw --- proj-web/space-game001plain.html | 149 +++++++++++++++++++++- src/MenuManager.cpp | 61 ++++++++- src/network/WebSocketClientEmscripten.cpp | 4 +- 3 files changed, 206 insertions(+), 8 deletions(-) diff --git a/proj-web/space-game001plain.html b/proj-web/space-game001plain.html index d3c1953..2a89e76 100644 --- a/proj-web/space-game001plain.html +++ b/proj-web/space-game001plain.html @@ -18,12 +18,51 @@ border: none; } #status { color: white; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } + + /* Nick modal */ + #nickOverlay { + position: absolute; + inset: 0; + display: flex; + align-items: center; + justify-content: center; + background: rgba(0,0,0,0.85); + z-index: 9999; + } + #nickBox { + background: #111; + border: 1px solid #444; + padding: 24px; + width: 320px; + box-shadow: 0 8px 24px rgba(0,0,0,0.6); + text-align: center; + } + #nickBox h2 { margin: 0 0 12px 0; font-size: 18px; color: #eee; } + #nickBox input[type="text"] { + width: 100%; + padding: 10px; + font-size: 16px; + box-sizing: border-box; + margin-bottom: 12px; + border: 1px solid #333; + background: #000; + color: #fff; + } + #nickBox button { + padding: 10px 16px; + font-size: 16px; + background: #2a9fd6; + border: none; + color: #fff; + cursor: pointer; + } + #nickSkip { margin-left: 8px; background: #666; }
Downloading...
- + + + + + + \ No newline at end of file diff --git a/src/MenuManager.cpp b/src/MenuManager.cpp index e862e49..5383a5c 100644 --- a/src/MenuManager.cpp +++ b/src/MenuManager.cpp @@ -1,6 +1,11 @@ #include "MenuManager.h" #include +#ifdef EMSCRIPTEN +#include +#include +#endif + namespace ZL { MenuManager::MenuManager(Renderer& iRenderer) : @@ -53,15 +58,39 @@ namespace ZL { state = GameState::ShipSelectionSingle; uiManager.replaceRoot(shipSelectionRoot); - uiManager.setButtonCallback("spaceshipButton", [this](const std::string&) { + std::string initialNick; +#ifdef EMSCRIPTEN + char* savedNickC = emscripten_run_script_string("localStorage.getItem('spacegame_nick') || ''"); + if (savedNickC) { + initialNick = savedNickC; + free(savedNickC); + } +#endif + + auto tf = uiManager.findTextField("nicknameInput"); + if (tf) { + if (!initialNick.empty()) tf->text = initialNick; + +#ifdef EMSCRIPTEN + uiManager.setTextFieldCallback("nicknameInput", [](const std::string&, const std::string& value) { + EM_ASM_({ + try { localStorage.setItem('spacegame_nick', UTF8ToString($0)); } catch(e) {} + }, value.c_str()); + }); +#endif + } + + uiManager.setButtonCallback("spaceshipButton", [this, initialNick](const std::string&) { std::string nick = uiManager.getTextFieldValue("nicknameInput"); + if (nick.empty()) nick = initialNick; if (nick.empty()) nick = "Player"; enterGameplay(); if (onSingleplayerPressed) onSingleplayerPressed(nick, 0); }); - uiManager.setButtonCallback("cargoshipButton", [this](const std::string&) { + uiManager.setButtonCallback("cargoshipButton", [this, initialNick](const std::string&) { std::string nick = uiManager.getTextFieldValue("nicknameInput"); + if (nick.empty()) nick = initialNick; if (nick.empty()) nick = "Player"; enterGameplay(); if (onSingleplayerPressed) onSingleplayerPressed(nick, 1); @@ -79,8 +108,31 @@ namespace ZL { state = GameState::ShipSelectionMulti; uiManager.replaceRoot(shipSelectionRoot); - uiManager.setButtonCallback("spaceshipButton", [this](const std::string&) { + std::string initialNick; +#ifdef EMSCRIPTEN + char* savedNickC = emscripten_run_script_string("localStorage.getItem('spacegame_nick') || ''"); + if (savedNickC) { + initialNick = savedNickC; + free(savedNickC); + } +#endif + + auto tf = uiManager.findTextField("nicknameInput"); + if (tf) { + if (!initialNick.empty()) tf->text = initialNick; + +#ifdef EMSCRIPTEN + uiManager.setTextFieldCallback("nicknameInput", [](const std::string&, const std::string& value) { + EM_ASM_({ + try { localStorage.setItem('spacegame_nick', UTF8ToString($0)); } catch(e) {} + }, value.c_str()); + }); +#endif + } + + uiManager.setButtonCallback("spaceshipButton", [this, initialNick](const std::string&) { std::string nick = uiManager.getTextFieldValue("nicknameInput"); + if (nick.empty()) nick = initialNick; if (nick.empty()) nick = "Player"; pendingMultiNick = nick; pendingMultiShipType = 0; @@ -88,8 +140,9 @@ namespace ZL { if (onMultiplayerPressed) onMultiplayerPressed(nick, 0); }); - uiManager.setButtonCallback("cargoshipButton", [this](const std::string&) { + uiManager.setButtonCallback("cargoshipButton", [this, initialNick](const std::string&) { std::string nick = uiManager.getTextFieldValue("nicknameInput"); + if (nick.empty()) nick = initialNick; if (nick.empty()) nick = "Player"; pendingMultiNick = nick; pendingMultiShipType = 1; diff --git a/src/network/WebSocketClientEmscripten.cpp b/src/network/WebSocketClientEmscripten.cpp index 1cb8e96..6d815ae 100644 --- a/src/network/WebSocketClientEmscripten.cpp +++ b/src/network/WebSocketClientEmscripten.cpp @@ -8,8 +8,8 @@ namespace ZL { void WebSocketClientEmscripten::Connect(const std::string& host, uint16_t port) { // Формируем URL. Обратите внимание, что в Web часто лучше использовать ws://localhost //std::string url = "ws://" + host + ":" + std::to_string(port); - std::string url = "wss://api.spacegame.fishrungames.com"; - + //std::string url = "wss://api.spacegame.fishrungames.com"; + std::string url = "ws://localhost:8081"; EmscriptenWebSocketCreateAttributes attr = { url.c_str(), nullptr,