aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Common/XUI/XUI_SignEntry.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.Client/Common/XUI/XUI_SignEntry.cpp')
-rw-r--r--Minecraft.Client/Common/XUI/XUI_SignEntry.cpp113
1 files changed, 113 insertions, 0 deletions
diff --git a/Minecraft.Client/Common/XUI/XUI_SignEntry.cpp b/Minecraft.Client/Common/XUI/XUI_SignEntry.cpp
new file mode 100644
index 00000000..378ac147
--- /dev/null
+++ b/Minecraft.Client/Common/XUI/XUI_SignEntry.cpp
@@ -0,0 +1,113 @@
+#include "stdafx.h"
+#include "..\..\..\MultiplayerLevel.h"
+#include "..\..\..\Minecraft.World\SignTileEntity.h"
+#include "..\..\..\Minecraft.World\Entity.h"
+#include "..\..\..\Minecraft.World\Level.h"
+#include "..\..\..\Minecraft.Client\LocalPlayer.h"
+#include "..\..\..\Minecraft.Client\ClientConnection.h"
+#include "..\..\..\Minecraft.Client\MultiPlayerLocalPlayer.h"
+#include "XUI_SignEntry.h"
+
+HRESULT CScene_SignEntry::OnInit( XUIMessageInit* pInitData, BOOL& bHandled )
+{
+ MapChildControls();
+
+ XuiControlSetText(m_ButtonDone,app.GetString(IDS_DONE));
+ XuiControlSetText(m_labelEditSign,app.GetString(IDS_EDIT_SIGN_MESSAGE));
+
+ SignEntryScreenInput* initData = (SignEntryScreenInput*)pInitData->pvInitData;
+ m_sign = initData->sign;
+
+ CXuiSceneBase::ShowDarkOverlay( initData->iPad, TRUE );
+ CXuiSceneBase::ShowLogo( initData->iPad, FALSE);
+ ui.SetTooltips( initData->iPad, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK);
+
+ if(app.GetLocalPlayerCount()>1)
+ {
+ app.AdjustSplitscreenScene(m_hObj,&m_OriginalPosition,initData->iPad);
+ }
+
+
+ for(unsigned int i = 0; i<SIGN_ENTRY_ROWS_MAX; ++i)
+ {
+ // Have to have the Latin alphabet here, since that's what we have on the sign in-game
+ // but because the JAP/KOR/CHN fonts don't have extended European characters, let's restrict those languages to not having the extended character set, since they can't see what they are typing
+ switch(XGetLanguage())
+ {
+ case XC_LANGUAGE_JAPANESE:
+ case XC_LANGUAGE_TCHINESE:
+ case XC_LANGUAGE_KOREAN:
+ m_signRows[i].SetKeyboardType(C_4JInput::EKeyboardMode_Alphabet);
+ break;
+ default:
+ m_signRows[i].SetKeyboardType(C_4JInput::EKeyboardMode_Full);
+ break;
+ }
+
+ m_signRows[i].SetText( m_sign->GetMessage(i).c_str() );
+ m_signRows[i].SetTextLimit(15);
+ // Set the title and desc for the edit keyboard popup
+ m_signRows[i].SetTitleAndText(IDS_SIGN_TITLE,IDS_SIGN_TITLE_TEXT);
+ }
+
+
+ return S_OK;
+}
+
+HRESULT CScene_SignEntry::OnNotifyPressEx(HXUIOBJ hObjPressed, XUINotifyPress* pNotifyPressData, BOOL& rfHandled)
+{
+ // This assumes all buttons can only be pressed with the A button
+ ui.AnimateKeyPress(pNotifyPressData->UserIndex, VK_PAD_A);
+
+ if(hObjPressed==m_ButtonDone)
+ {
+ // Set the sign text here so we on;y call the verify once it has been set, not while we're typing in to it
+ for(int i=0;i<4;i++)
+ {
+ wstring temp=m_signRows[i].GetText();
+ m_sign->SetMessage(i,temp);
+ }
+
+ m_sign->setChanged();
+
+ Minecraft *pMinecraft=Minecraft::GetInstance();
+ // need to send the new data
+ if (pMinecraft->level->isClientSide)
+ {
+ shared_ptr<MultiplayerLocalPlayer> player = pMinecraft->localplayers[pNotifyPressData->UserIndex];
+ if(player != NULL && player->connection && player->connection->isStarted())
+ {
+ player->connection->send( shared_ptr<SignUpdatePacket>( new SignUpdatePacket(m_sign->x, m_sign->y, m_sign->z, m_sign->IsVerified(), m_sign->IsCensored(), m_sign->GetMessages()) ) );
+ }
+ }
+ app.CloseXuiScenes(pNotifyPressData->UserIndex);
+ }
+ return S_OK;
+}
+
+HRESULT CScene_SignEntry::OnKeyDown(XUIMessageInput* pInputData, BOOL& rfHandled)
+{
+ ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode);
+
+ switch(pInputData->dwKeyCode)
+ {
+ case VK_PAD_B:
+ case VK_ESCAPE:
+ // user backed out, so wipe the sign
+ wstring temp=L"";
+
+ for(int i=0;i<4;i++)
+ {
+ m_sign->SetMessage(i,temp);
+ }
+
+ app.CloseXuiScenes(pInputData->UserIndex);
+ rfHandled = TRUE;
+
+ CXuiSceneBase::PlayUISFX(eSFX_Back);
+ break;
+ }
+
+
+ return S_OK;
+} \ No newline at end of file