mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-25 00:03:37 +00:00
112 lines
4.2 KiB
C++
112 lines
4.2 KiB
C++
#include "../../Minecraft.World/Platform/stdafx.h"
|
|
#include "../../Minecraft.Client/MultiplayerLevel.h"
|
|
#include "../../Minecraft.World/Blocks/TileEntities/SignTileEntity.h"
|
|
#include "../../Minecraft.World/Entities/Entity.h"
|
|
#include "../../Minecraft.World/Level/Level.h"
|
|
#include "../../Minecraft.Client/Player/LocalPlayer.h"
|
|
#include "../../Minecraft.Client/Network/ClientConnection.h"
|
|
#include "../../Minecraft.Client/Player/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++) {
|
|
std::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) {
|
|
std::shared_ptr<MultiplayerLocalPlayer> player =
|
|
pMinecraft->localplayers[pNotifyPressData->UserIndex];
|
|
if (player != NULL && player->connection &&
|
|
player->connection->isStarted()) {
|
|
player->connection->send(
|
|
std::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
|
|
std::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;
|
|
} |