From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.Client/Common/XUI/XUI_TextEntry.cpp | 172 ++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 Minecraft.Client/Common/XUI/XUI_TextEntry.cpp (limited to 'Minecraft.Client/Common/XUI/XUI_TextEntry.cpp') diff --git a/Minecraft.Client/Common/XUI/XUI_TextEntry.cpp b/Minecraft.Client/Common/XUI/XUI_TextEntry.cpp new file mode 100644 index 00000000..8934350d --- /dev/null +++ b/Minecraft.Client/Common/XUI/XUI_TextEntry.cpp @@ -0,0 +1,172 @@ +#include "stdafx.h" +#include "XUI_TextEntry.h" +#include "..\..\MultiplayerLocalPlayer.h" + + +CScene_TextEntry::CommandParams CScene_TextEntry::CommandA[CScene_TextEntry::eCommand_MAX]= +{ + { L"goto", L"%s%c%d%c%d" }, + { L"give", L"%s%c%s" } +}; + +HRESULT CScene_TextEntry::Init_Commands() +{ + for(int i=0;ipvInitData; + m_iPad=params->iPad; + m_wchInitialChar=params->wch; + delete params; + + WCHAR wchEditText[40]; + + Init_Commands(); + + ZeroMemory(wchEditText,sizeof(WCHAR)*40); + wchEditText[0]=tolower(m_wchInitialChar); + + m_EditText.SetTextLimit(40); + m_EditText.SetText(wchEditText); + // set the caret to the end of the default text + m_EditText.SetCaretPosition(1); + + m_EditText.SetTitleAndText(IDS_NAME_WORLD,IDS_NAME_WORLD_TEXT); + + ui.SetTooltips( m_iPad, IDS_TOOLTIPS_EXECUTE_COMMAND, IDS_TOOLTIPS_BACK); + return S_OK; +} + +HRESULT CScene_TextEntry::OnNotifyValueChanged (HXUIOBJ hObjSource, XUINotifyValueChanged* pValueChangedData, BOOL& rfHandled) +{ + // If the user presses return, interpret the string, and exit + if(pValueChangedData->nValue==10) + { + LPCWSTR pText = m_EditText.GetText(); + + if(pText) + { + wstring wText = pText; + InterpretString(wText); + } + + app.NavigateBack(m_iPad); + rfHandled = TRUE; + } + + return S_OK; +} + +HRESULT CScene_TextEntry::OnKeyDown(XUIMessageInput* pInputData, BOOL& rfHandled) +{ + ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode); + + // Explicitly handle B button presses + switch(pInputData->dwKeyCode) + { + case VK_PAD_A: + { + LPCWSTR pText = m_EditText.GetText(); + + if(pText) + { + wstring wText = pText; + InterpretString(wText); + } + + app.NavigateBack(m_iPad); + rfHandled = TRUE; + } + break; + + case VK_PAD_B: + case VK_ESCAPE: + + app.NavigateBack(pInputData->UserIndex); + rfHandled = TRUE; + break; + } + return S_OK; +} + +HRESULT CScene_TextEntry::InterpretString(wstring &wsText) +{ + wstring wsFormat; + WCHAR wchCommand[40]; + int iCommand=-1; + WCHAR wchSep[2]; + +#ifdef __PS3__ + // 4J Stu - The Xbox version uses swscanf_s which isn't available in GCC. + swscanf(wsText.c_str(), L"%40s", wchCommand); +#else + swscanf_s(wsText.c_str(), L"%s", wchCommand,40); +#endif + + AUTO_VAR(it, m_CommandSet.find(wchCommand)); + if(it != m_CommandSet.end()) + { + // found it + + iCommand=it->second; + + switch(iCommand) + { + case eCommand_Teleport: + { + int x,z; + +#ifdef __PS3__ + // 4J Stu - The Xbox version uses swscanf_s which isn't available in GCC. + swscanf(wsText.c_str(), L"%40s%c%d%c%d", wchCommand,wchSep,&x,wchSep,&z); +#else + swscanf_s(wsText.c_str(), L"%s%c%d%c%d", wchCommand,40,wchSep,2,&x,wchSep,2, &z); +#endif + + app.DebugPrintf("eCommand_Teleport x=%d z=%d\n",x,z); + + // check the bounds + int iBound=54*16; + if( (x>-iBound) && (x-iBound) && (zlocalplayers[m_iPad]->teleportTo(x,pMinecraft->localplayers[m_iPad]->y,z); + } + } + break; + case eCommand_Give: + { + int iItem,iCount; + +#ifdef __PS3__ + // 4J Stu - The Xbox version uses swscanf_s which isn't available in GCC. + swscanf(wsText.c_str(), L"%40s%c%d%c%d", wchCommand,wchSep,&iItem,wchSep,&iCount); +#else + swscanf_s(wsText.c_str(), L"%s%c%d%c%d", wchCommand,40,wchSep,2,&iItem,wchSep,2, &iCount); +#endif + app.DebugPrintf("eCommand_Give, item=%d count=%d\n",iItem,iCount); + Minecraft *pMinecraft=Minecraft::GetInstance(); + for(int i=0;ilocalplayers[m_iPad]->drop(); // shared_ptr(new ItemInstance( iItem, 1, 0 )) ); + } + + break; + default: + app.DebugPrintf("Unknown command\n"); + break; + } + } + + return S_OK; +} \ No newline at end of file -- cgit v1.2.3