Initial commit
This commit is contained in:
commit
b0e73a61aa
16345 files changed
+3104967
No files matched your search
@@ -0,0 +1,184 @@
|
||||
#include "stdafx.h"
|
||||
#include "UI.h"
|
||||
#include "UIScene_SignEntryMenu.h"
|
||||
#include "..\..\Minecraft.h"
|
||||
#include "..\..\MultiPlayerLocalPlayer.h"
|
||||
#include "..\..\MultiPlayerLevel.h"
|
||||
#include "..\..\ClientConnection.h"
|
||||
#include "..\..\..\Minecraft.World\net.minecraft.world.level.h"
|
||||
#include "..\..\..\Minecraft.World\net.minecraft.world.level.tile.entity.h"
|
||||
|
||||
UIScene_SignEntryMenu::UIScene_SignEntryMenu(int iPad, void *_initData, UILayer *parentLayer) : UIScene(iPad, parentLayer)
|
||||
{
|
||||
// Setup all the Iggy references we need for this scene
|
||||
initialiseMovie();
|
||||
|
||||
SignEntryScreenInput* initData = (SignEntryScreenInput*)_initData;
|
||||
m_sign = initData->sign;
|
||||
|
||||
m_bConfirmed = false;
|
||||
m_bIgnoreInput = false;
|
||||
|
||||
m_buttonConfirm.init(app.GetString(IDS_DONE), eControl_Confirm);
|
||||
m_labelMessage.init(app.GetString(IDS_EDIT_SIGN_MESSAGE));
|
||||
|
||||
for(unsigned int i = 0; i<4; ++i)
|
||||
{
|
||||
#if TO_BE_IMPLEMENTED
|
||||
// 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:
|
||||
case XC_LANGUAGE_RUSSIAN:
|
||||
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);
|
||||
#endif
|
||||
m_textInputLines[i].init(m_sign->GetMessage(i).c_str(), i);
|
||||
}
|
||||
|
||||
parentLayer->addComponent(iPad,eUIComponent_MenuBackground);
|
||||
}
|
||||
|
||||
UIScene_SignEntryMenu::~UIScene_SignEntryMenu()
|
||||
{
|
||||
m_parentLayer->removeComponent(eUIComponent_MenuBackground);
|
||||
}
|
||||
|
||||
wstring UIScene_SignEntryMenu::getMoviePath()
|
||||
{
|
||||
if(app.GetLocalPlayerCount() > 1)
|
||||
{
|
||||
return L"SignEntryMenuSplit";
|
||||
}
|
||||
else
|
||||
{
|
||||
return L"SignEntryMenu";
|
||||
}
|
||||
}
|
||||
|
||||
void UIScene_SignEntryMenu::updateTooltips()
|
||||
{
|
||||
ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK);
|
||||
}
|
||||
|
||||
void UIScene_SignEntryMenu::tick()
|
||||
{
|
||||
UIScene::tick();
|
||||
|
||||
if(m_bConfirmed)
|
||||
{
|
||||
m_bConfirmed = false;
|
||||
|
||||
// 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_textInputLines[i].getLabel();
|
||||
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[m_iPad];
|
||||
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()) ) );
|
||||
}
|
||||
}
|
||||
ui.CloseUIScenes(m_iPad);
|
||||
}
|
||||
}
|
||||
|
||||
void UIScene_SignEntryMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled)
|
||||
{
|
||||
if(m_bConfirmed || m_bIgnoreInput) return;
|
||||
|
||||
ui.AnimateKeyPress(iPad, key, repeat, pressed, released);
|
||||
|
||||
switch(key)
|
||||
{
|
||||
case ACTION_MENU_CANCEL:
|
||||
if(pressed)
|
||||
{
|
||||
// user backed out, so wipe the sign
|
||||
wstring temp=L"";
|
||||
|
||||
for(int i=0;i<4;i++)
|
||||
{
|
||||
m_sign->SetMessage(i,temp);
|
||||
}
|
||||
|
||||
navigateBack();
|
||||
ui.PlayUISFX(eSFX_Back);
|
||||
handled = true;
|
||||
}
|
||||
break;
|
||||
case ACTION_MENU_OK:
|
||||
case ACTION_MENU_UP:
|
||||
case ACTION_MENU_DOWN:
|
||||
sendInputToMovie(key, repeat, pressed, released);
|
||||
handled = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int UIScene_SignEntryMenu::KeyboardCompleteCallback(LPVOID lpParam,bool bRes)
|
||||
{
|
||||
// 4J HEG - No reason to set value if keyboard was cancelled
|
||||
UIScene_SignEntryMenu *pClass=(UIScene_SignEntryMenu *)lpParam;
|
||||
pClass->m_bIgnoreInput = false;
|
||||
if (bRes)
|
||||
{
|
||||
uint16_t pchText[128];
|
||||
ZeroMemory(pchText, 128 * sizeof(uint16_t) );
|
||||
InputManager.GetText(pchText);
|
||||
pClass->m_textInputLines[pClass->m_iEditingLine].setLabel((wchar_t *)pchText);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void UIScene_SignEntryMenu::handlePress(F64 controlId, F64 childId)
|
||||
{
|
||||
switch((int)controlId)
|
||||
{
|
||||
case eControl_Confirm:
|
||||
{
|
||||
m_bConfirmed = true;
|
||||
}
|
||||
break;
|
||||
case eControl_Line1:
|
||||
case eControl_Line2:
|
||||
case eControl_Line3:
|
||||
case eControl_Line4:
|
||||
{
|
||||
m_iEditingLine = (int)controlId;
|
||||
m_bIgnoreInput = true;
|
||||
InputManager.RequestKeyboard(app.GetString(IDS_SIGN_TITLE),m_textInputLines[m_iEditingLine].getLabel(),(DWORD)m_iPad,15,&UIScene_SignEntryMenu::KeyboardCompleteCallback,this,C_4JInput::EKeyboardMode_Alphabet);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void UIScene_SignEntryMenu::handleDestroy()
|
||||
{
|
||||
|
||||
// another player destroyed the anvil, so shut down the keyboard if it is displayed
|
||||
#if defined __PS3__
|
||||
InputManager.DestroyKeyboard();
|
||||
#endif
|
||||
}
|
||||
Reference in new issue
Block a user