format Platform/Common/UI

This commit is contained in:
Tropical
2026-03-22 04:25:54 -05:00
parent 0a348b7f2f
commit 4dd9b683bf
222 changed files with 40396 additions and 39503 deletions

View File

@@ -6,433 +6,569 @@
#include "../../Minecraft.Client/Network/ClientConnection.h"
#include "../../Minecraft.World/Headers/net.minecraft.network.packet.h"
#define CHECKBOXES_TIMER_ID 0
#define CHECKBOXES_TIMER_TIME 100
UIScene_InGamePlayerOptionsMenu::UIScene_InGamePlayerOptionsMenu(int iPad, void *_initData, UILayer *parentLayer) : UIScene(iPad, parentLayer)
{
// Setup all the Iggy references we need for this scene
initialiseMovie();
UIScene_InGamePlayerOptionsMenu::UIScene_InGamePlayerOptionsMenu(
int iPad, void* _initData, UILayer* parentLayer)
: UIScene(iPad, parentLayer) {
// Setup all the Iggy references we need for this scene
initialiseMovie();
m_bShouldNavBack = false;
m_bShouldNavBack = false;
InGamePlayerOptionsInitData *initData = (InGamePlayerOptionsInitData *)_initData;
m_networkSmallId = initData->networkSmallId;
m_playerPrivileges = initData->playerPrivileges;
InGamePlayerOptionsInitData* initData =
(InGamePlayerOptionsInitData*)_initData;
m_networkSmallId = initData->networkSmallId;
m_playerPrivileges = initData->playerPrivileges;
INetworkPlayer *localPlayer = g_NetworkManager.GetLocalPlayerByUserIndex( m_iPad );
INetworkPlayer *editingPlayer = g_NetworkManager.GetPlayerBySmallId(m_networkSmallId);
INetworkPlayer* localPlayer =
g_NetworkManager.GetLocalPlayerByUserIndex(m_iPad);
INetworkPlayer* editingPlayer =
g_NetworkManager.GetPlayerBySmallId(m_networkSmallId);
if(editingPlayer != NULL)
{
m_labelGamertag.init(editingPlayer->GetDisplayName());
}
if (editingPlayer != NULL) {
m_labelGamertag.init(editingPlayer->GetDisplayName());
}
bool trustPlayers = app.GetGameHostOption(eGameHostOption_TrustPlayers) != 0;
bool cheats = app.GetGameHostOption(eGameHostOption_CheatsEnabled) != 0;
m_editingSelf = (localPlayer != NULL && localPlayer == editingPlayer);
bool trustPlayers =
app.GetGameHostOption(eGameHostOption_TrustPlayers) != 0;
bool cheats = app.GetGameHostOption(eGameHostOption_CheatsEnabled) != 0;
m_editingSelf = (localPlayer != NULL && localPlayer == editingPlayer);
if( m_editingSelf || trustPlayers || editingPlayer->IsHost())
{
removeControl( &m_checkboxes[eControl_BuildAndMine], true );
removeControl( &m_checkboxes[eControl_UseDoorsAndSwitches], true );
removeControl( &m_checkboxes[eControl_UseContainers], true );
removeControl( &m_checkboxes[eControl_AttackPlayers], true );
removeControl( &m_checkboxes[eControl_AttackAnimals], true );
}
else
{
bool checked = (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CannotMine)==0 && Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CannotBuild)==0);
m_checkboxes[eControl_BuildAndMine].init( app.GetString(IDS_CAN_BUILD_AND_MINE), eControl_BuildAndMine, checked);
if (m_editingSelf || trustPlayers || editingPlayer->IsHost()) {
removeControl(&m_checkboxes[eControl_BuildAndMine], true);
removeControl(&m_checkboxes[eControl_UseDoorsAndSwitches], true);
removeControl(&m_checkboxes[eControl_UseContainers], true);
removeControl(&m_checkboxes[eControl_AttackPlayers], true);
removeControl(&m_checkboxes[eControl_AttackAnimals], true);
} else {
bool checked = (Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CannotMine) == 0 &&
Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CannotBuild) == 0);
m_checkboxes[eControl_BuildAndMine].init(
app.GetString(IDS_CAN_BUILD_AND_MINE), eControl_BuildAndMine,
checked);
checked = (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanUseDoorsAndSwitches)!=0);
m_checkboxes[eControl_UseDoorsAndSwitches].init( app.GetString(IDS_CAN_USE_DOORS_AND_SWITCHES), eControl_UseDoorsAndSwitches, checked);
checked =
(Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CanUseDoorsAndSwitches) != 0);
m_checkboxes[eControl_UseDoorsAndSwitches].init(
app.GetString(IDS_CAN_USE_DOORS_AND_SWITCHES),
eControl_UseDoorsAndSwitches, checked);
checked = (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanUseContainers)!=0);
m_checkboxes[eControl_UseContainers].init( app.GetString(IDS_CAN_OPEN_CONTAINERS), eControl_UseContainers, checked);
checked = (Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CanUseContainers) != 0);
m_checkboxes[eControl_UseContainers].init(
app.GetString(IDS_CAN_OPEN_CONTAINERS), eControl_UseContainers,
checked);
checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CannotAttackPlayers)==0;
m_checkboxes[eControl_AttackPlayers].init( app.GetString(IDS_CAN_ATTACK_PLAYERS), eControl_AttackPlayers, checked);
checked = Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CannotAttackPlayers) == 0;
m_checkboxes[eControl_AttackPlayers].init(
app.GetString(IDS_CAN_ATTACK_PLAYERS), eControl_AttackPlayers,
checked);
checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CannotAttackAnimals)==0;
m_checkboxes[eControl_AttackAnimals].init( app.GetString(IDS_CAN_ATTACK_ANIMALS), eControl_AttackAnimals, checked);
}
checked = Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CannotAttackAnimals) == 0;
m_checkboxes[eControl_AttackAnimals].init(
app.GetString(IDS_CAN_ATTACK_ANIMALS), eControl_AttackAnimals,
checked);
}
if(m_editingSelf)
{
#if (defined(_CONTENT_PACKAGE) || defined(_FINAL_BUILD) && !defined(_DEBUG_MENUS_ENABLED))
removeControl( &m_checkboxes[eControl_Op], true );
if (m_editingSelf) {
#if (defined(_CONTENT_PACKAGE) || \
defined(_FINAL_BUILD) && !defined(_DEBUG_MENUS_ENABLED))
removeControl(&m_checkboxes[eControl_Op], true);
#else
m_checkboxes[eControl_Op].init(L"DEBUG: Creative",eControl_Op,Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode));
m_checkboxes[eControl_Op].init(
L"DEBUG: Creative", eControl_Op,
Player::getPlayerGamePrivilege(
m_playerPrivileges, Player::ePlayerGamePrivilege_CreativeMode));
#endif
removeControl( &m_buttonKick, true );
removeControl( &m_checkboxes[eControl_CheatTeleport], true );
if(cheats)
{
bool canBeInvisible = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleInvisible) != 0;
m_checkboxes[eControl_HostInvisible].SetEnable(canBeInvisible);
bool checked = canBeInvisible && (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_Invisible)!=0 && Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_Invulnerable)!=0);
m_checkboxes[eControl_HostInvisible].init( app.GetString(IDS_INVISIBLE), eControl_HostInvisible, checked);
removeControl(&m_buttonKick, true);
removeControl(&m_checkboxes[eControl_CheatTeleport], true);
bool inCreativeMode = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode) != 0;
if(inCreativeMode)
{
removeControl( &m_checkboxes[eControl_HostFly], true );
removeControl( &m_checkboxes[eControl_HostHunger], true );
}
else
{
bool canFly = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleFly);
bool canChangeHunger = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleClassicHunger);
if (cheats) {
bool canBeInvisible =
Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CanToggleInvisible) != 0;
m_checkboxes[eControl_HostInvisible].SetEnable(canBeInvisible);
bool checked =
canBeInvisible &&
(Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_Invisible) != 0 &&
Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_Invulnerable) != 0);
m_checkboxes[eControl_HostInvisible].init(
app.GetString(IDS_INVISIBLE), eControl_HostInvisible, checked);
m_checkboxes[eControl_HostFly].SetEnable(canFly);
checked = canFly && Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanFly)!=0;
m_checkboxes[eControl_HostFly].init( app.GetString(IDS_CAN_FLY), eControl_HostFly, checked);
bool inCreativeMode =
Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CreativeMode) != 0;
if (inCreativeMode) {
removeControl(&m_checkboxes[eControl_HostFly], true);
removeControl(&m_checkboxes[eControl_HostHunger], true);
} else {
bool canFly = Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CanToggleFly);
bool canChangeHunger = Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CanToggleClassicHunger);
m_checkboxes[eControl_HostHunger].SetEnable(canChangeHunger);
checked = canChangeHunger && Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_ClassicHunger)!=0;
m_checkboxes[eControl_HostHunger].init( app.GetString(IDS_DISABLE_EXHAUSTION), eControl_HostHunger, checked);
}
}
else
{
removeControl( &m_checkboxes[eControl_HostInvisible], true );
removeControl( &m_checkboxes[eControl_HostFly], true );
removeControl( &m_checkboxes[eControl_HostHunger], true );
}
}
else
{
if(localPlayer->IsHost())
{
// Only host can make people moderators, or enable teleporting for them
m_checkboxes[eControl_Op].init( app.GetString(IDS_MODERATOR), eControl_Op, Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_Op)!=0);
}
else
{
removeControl( &m_checkboxes[eControl_Op], true );
}
m_checkboxes[eControl_HostFly].SetEnable(canFly);
checked =
canFly && Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CanFly) != 0;
m_checkboxes[eControl_HostFly].init(app.GetString(IDS_CAN_FLY),
eControl_HostFly, checked);
/*if(localPlayer->IsHost() && cheats )
{
m_checkboxes[eControl_HostInvisible].SetEnable(true);
bool checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleInvisible)!=0;
m_checkboxes[eControl_HostInvisible].init( app.GetString(IDS_CAN_INVISIBLE), eControl_HostInvisible, checked);
m_checkboxes[eControl_HostHunger].SetEnable(canChangeHunger);
checked = canChangeHunger &&
Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_ClassicHunger) != 0;
m_checkboxes[eControl_HostHunger].init(
app.GetString(IDS_DISABLE_EXHAUSTION), eControl_HostHunger,
checked);
}
} else {
removeControl(&m_checkboxes[eControl_HostInvisible], true);
removeControl(&m_checkboxes[eControl_HostFly], true);
removeControl(&m_checkboxes[eControl_HostHunger], true);
}
} else {
if (localPlayer->IsHost()) {
// Only host can make people moderators, or enable teleporting for
// them
m_checkboxes[eControl_Op].init(
app.GetString(IDS_MODERATOR), eControl_Op,
Player::getPlayerGamePrivilege(
m_playerPrivileges, Player::ePlayerGamePrivilege_Op) != 0);
} else {
removeControl(&m_checkboxes[eControl_Op], true);
}
m_checkboxes[eControl_HostFly].SetEnable(true);
checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleFly)!=0;
m_checkboxes[eControl_HostFly].init( app.GetString(IDS_CAN_FLY), eControl_HostFly, checked);
/*if(localPlayer->IsHost() && cheats )
{
m_checkboxes[eControl_HostInvisible].SetEnable(true);
bool checked =
Player::getPlayerGamePrivilege(m_playerPrivileges,
Player::ePlayerGamePrivilege_CanToggleInvisible)!=0;
m_checkboxes[eControl_HostInvisible].init(
app.GetString(IDS_CAN_INVISIBLE), eControl_HostInvisible, checked);
m_checkboxes[eControl_HostHunger].SetEnable(true);
checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleClassicHunger)!=0;
m_checkboxes[eControl_HostHunger].init( app.GetString(IDS_CAN_DISABLE_EXHAUSTION), eControl_HostHunger, checked);
checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanTeleport)!=0;
m_checkboxes[eControl_CheatTeleport].init(app.GetString(IDS_ENABLE_TELEPORT),eControl_CheatTeleport,checked);
}
else
{
removeControl( &m_checkboxes[eControl_HostInvisible], true );
removeControl( &m_checkboxes[eControl_HostFly], true );
removeControl( &m_checkboxes[eControl_HostHunger], true );
removeControl( &m_checkboxes[eControl_CheatTeleport], true );
}*/
m_checkboxes[eControl_HostFly].SetEnable(true);
checked = Player::getPlayerGamePrivilege(m_playerPrivileges,
Player::ePlayerGamePrivilege_CanToggleFly)!=0;
m_checkboxes[eControl_HostFly].init( app.GetString(IDS_CAN_FLY),
eControl_HostFly, checked);
if(localPlayer->IsHost() && cheats )
{
m_checkboxes[eControl_HostInvisible].SetEnable(true);
bool checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleInvisible)!=0;
m_checkboxes[eControl_HostInvisible].init( app.GetString(IDS_CAN_INVISIBLE), eControl_HostInvisible, checked);
m_checkboxes[eControl_HostHunger].SetEnable(true);
checked = Player::getPlayerGamePrivilege(m_playerPrivileges,
Player::ePlayerGamePrivilege_CanToggleClassicHunger)!=0;
m_checkboxes[eControl_HostHunger].init(
app.GetString(IDS_CAN_DISABLE_EXHAUSTION), eControl_HostHunger,
checked);
checked = Player::getPlayerGamePrivilege(m_playerPrivileges,
Player::ePlayerGamePrivilege_CanTeleport)!=0;
m_checkboxes[eControl_CheatTeleport].init(app.GetString(IDS_ENABLE_TELEPORT),eControl_CheatTeleport,checked);
}
else
{
removeControl( &m_checkboxes[eControl_HostInvisible], true );
removeControl( &m_checkboxes[eControl_HostFly], true );
removeControl( &m_checkboxes[eControl_HostHunger], true );
removeControl( &m_checkboxes[eControl_CheatTeleport], true );
}*/
bool inCreativeMode = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode) != 0;
if(inCreativeMode)
{
removeControl( &m_checkboxes[eControl_HostFly], true );
removeControl( &m_checkboxes[eControl_HostHunger], true );
}
else
{
m_checkboxes[eControl_HostFly].SetEnable(true);
checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleFly)!=0;
m_checkboxes[eControl_HostFly].init( app.GetString(IDS_CAN_FLY), eControl_HostFly, checked);
if (localPlayer->IsHost() && cheats) {
m_checkboxes[eControl_HostInvisible].SetEnable(true);
bool checked =
Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CanToggleInvisible) != 0;
m_checkboxes[eControl_HostInvisible].init(
app.GetString(IDS_CAN_INVISIBLE), eControl_HostInvisible,
checked);
m_checkboxes[eControl_HostHunger].SetEnable(true);
checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleClassicHunger)!=0;
m_checkboxes[eControl_HostHunger].init( app.GetString(IDS_CAN_DISABLE_EXHAUSTION), eControl_HostHunger, checked);
}
bool inCreativeMode =
Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CreativeMode) != 0;
if (inCreativeMode) {
removeControl(&m_checkboxes[eControl_HostFly], true);
removeControl(&m_checkboxes[eControl_HostHunger], true);
} else {
m_checkboxes[eControl_HostFly].SetEnable(true);
checked = Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CanToggleFly) != 0;
m_checkboxes[eControl_HostFly].init(app.GetString(IDS_CAN_FLY),
eControl_HostFly, checked);
checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanTeleport)!=0;
m_checkboxes[eControl_CheatTeleport].init(app.GetString(IDS_ENABLE_TELEPORT),eControl_CheatTeleport,checked);
}
else
{
removeControl( &m_checkboxes[eControl_HostInvisible], true );
removeControl( &m_checkboxes[eControl_HostFly], true );
removeControl( &m_checkboxes[eControl_HostHunger], true );
removeControl( &m_checkboxes[eControl_CheatTeleport], true );
}
m_checkboxes[eControl_HostHunger].SetEnable(true);
checked =
Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CanToggleClassicHunger) !=
0;
m_checkboxes[eControl_HostHunger].init(
app.GetString(IDS_CAN_DISABLE_EXHAUSTION),
eControl_HostHunger, checked);
}
checked = Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CanTeleport) != 0;
m_checkboxes[eControl_CheatTeleport].init(
app.GetString(IDS_ENABLE_TELEPORT), eControl_CheatTeleport,
checked);
} else {
removeControl(&m_checkboxes[eControl_HostInvisible], true);
removeControl(&m_checkboxes[eControl_HostFly], true);
removeControl(&m_checkboxes[eControl_HostHunger], true);
removeControl(&m_checkboxes[eControl_CheatTeleport], true);
}
// Can only kick people if they are not local, and not local to the host
if(editingPlayer->IsLocal() != TRUE && editingPlayer->IsSameSystem(g_NetworkManager.GetHostPlayer()) != TRUE)
{
m_buttonKick.init( app.GetString(IDS_KICK_PLAYER), eControl_Kick);
}
else
{
removeControl( &m_buttonKick, true );
}
}
// Can only kick people if they are not local, and not local to the host
if (editingPlayer->IsLocal() != TRUE &&
editingPlayer->IsSameSystem(g_NetworkManager.GetHostPlayer()) !=
TRUE) {
m_buttonKick.init(app.GetString(IDS_KICK_PLAYER), eControl_Kick);
} else {
removeControl(&m_buttonKick, true);
}
}
short colourIndex = app.GetPlayerColour( m_networkSmallId );
IggyDataValue result;
IggyDataValue value[1];
value[0].type = IGGY_DATATYPE_number;
value[0].number = colourIndex;
IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetPlayerIcon , 1 , value );
short colourIndex = app.GetPlayerColour(m_networkSmallId);
IggyDataValue result;
IggyDataValue value[1];
value[0].type = IGGY_DATATYPE_number;
value[0].number = colourIndex;
IggyResult out = IggyPlayerCallMethodRS(getMovie(), &result,
IggyPlayerRootPath(getMovie()),
m_funcSetPlayerIcon, 1, value);
#if TO_BE_IMPLEMENTED
if(app.GetLocalPlayerCount()>1)
{
app.AdjustSplitscreenScene(m_hObj,&m_OriginalPosition,m_iPad);
}
if (app.GetLocalPlayerCount() > 1) {
app.AdjustSplitscreenScene(m_hObj, &m_OriginalPosition, m_iPad);
}
#endif
m_bModeratorState = m_checkboxes[eControl_Op].IsChecked();
m_bModeratorState = m_checkboxes[eControl_Op].IsChecked();
resetCheatCheckboxes();
resetCheatCheckboxes();
addTimer(CHECKBOXES_TIMER_ID,CHECKBOXES_TIMER_TIME);
addTimer(CHECKBOXES_TIMER_ID, CHECKBOXES_TIMER_TIME);
g_NetworkManager.RegisterPlayerChangedCallback(m_iPad, &UIScene_InGamePlayerOptionsMenu::OnPlayerChanged, this);
g_NetworkManager.RegisterPlayerChangedCallback(
m_iPad, &UIScene_InGamePlayerOptionsMenu::OnPlayerChanged, this);
#ifdef __PSVITA__
ui.TouchBoxRebuild(this);
ui.TouchBoxRebuild(this);
#endif
}
std::wstring UIScene_InGamePlayerOptionsMenu::getMoviePath()
{
if(app.GetLocalPlayerCount() > 1)
{
return L"InGamePlayerOptionsSplit";
}
else
{
return L"InGamePlayerOptions";
}
std::wstring UIScene_InGamePlayerOptionsMenu::getMoviePath() {
if (app.GetLocalPlayerCount() > 1) {
return L"InGamePlayerOptionsSplit";
} else {
return L"InGamePlayerOptions";
}
}
void UIScene_InGamePlayerOptionsMenu::updateTooltips()
{
ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK);
void UIScene_InGamePlayerOptionsMenu::updateTooltips() {
ui.SetTooltips(m_iPad, IDS_TOOLTIPS_SELECT, IDS_TOOLTIPS_BACK);
}
void UIScene_InGamePlayerOptionsMenu::tick()
{
UIScene::tick();
void UIScene_InGamePlayerOptionsMenu::tick() {
UIScene::tick();
if(m_bShouldNavBack)
{
m_bShouldNavBack = false;
ui.NavigateBack(m_iPad);
}
if (m_bShouldNavBack) {
m_bShouldNavBack = false;
ui.NavigateBack(m_iPad);
}
}
void UIScene_InGamePlayerOptionsMenu::handleDestroy()
{
g_NetworkManager.UnRegisterPlayerChangedCallback(m_iPad, &UIScene_InGamePlayerOptionsMenu::OnPlayerChanged, this);
void UIScene_InGamePlayerOptionsMenu::handleDestroy() {
g_NetworkManager.UnRegisterPlayerChangedCallback(
m_iPad, &UIScene_InGamePlayerOptionsMenu::OnPlayerChanged, this);
}
void UIScene_InGamePlayerOptionsMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled)
{
//app.DebugPrintf("UIScene_DebugOverlay handling input for pad %d, key %d, down- %s, pressed- %s, released- %s\n", iPad, key, down?"TRUE":"FALSE", pressed?"TRUE":"FALSE", released?"TRUE":"FALSE");
void UIScene_InGamePlayerOptionsMenu::handleInput(int iPad, int key,
bool repeat, bool pressed,
bool released,
bool& handled) {
// app.DebugPrintf("UIScene_DebugOverlay handling input for pad %d, key %d,
// down- %s, pressed- %s, released- %s\n", iPad, key, down?"TRUE":"FALSE",
// pressed?"TRUE":"FALSE", released?"TRUE":"FALSE");
ui.AnimateKeyPress(iPad, key, repeat, pressed, released);
switch(key)
{
case ACTION_MENU_CANCEL:
if(pressed)
{
bool trustPlayers = app.GetGameHostOption(eGameHostOption_TrustPlayers) != 0;
bool cheats = app.GetGameHostOption(eGameHostOption_CheatsEnabled) != 0;
if(m_editingSelf)
{
#if (defined(_CONTENT_PACKAGE) || defined(_FINAL_BUILD) && !defined(_DEBUG_MENUS_ENABLED))
ui.AnimateKeyPress(iPad, key, repeat, pressed, released);
switch (key) {
case ACTION_MENU_CANCEL:
if (pressed) {
bool trustPlayers =
app.GetGameHostOption(eGameHostOption_TrustPlayers) != 0;
bool cheats =
app.GetGameHostOption(eGameHostOption_CheatsEnabled) != 0;
if (m_editingSelf) {
#if (defined(_CONTENT_PACKAGE) || \
defined(_FINAL_BUILD) && !defined(_DEBUG_MENUS_ENABLED))
#else
Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode,m_checkboxes[eControl_Op].IsChecked());
Player::setPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CreativeMode,
m_checkboxes[eControl_Op].IsChecked());
#endif
if(cheats)
{
bool canBeInvisible = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleInvisible) != 0;
if(canBeInvisible) Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_Invisible,m_checkboxes[eControl_HostInvisible].IsChecked());
if(canBeInvisible) Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_Invulnerable,m_checkboxes[eControl_HostInvisible].IsChecked());
if (cheats) {
bool canBeInvisible =
Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::
ePlayerGamePrivilege_CanToggleInvisible) !=
0;
if (canBeInvisible)
Player::setPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_Invisible,
m_checkboxes[eControl_HostInvisible]
.IsChecked());
if (canBeInvisible)
Player::setPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_Invulnerable,
m_checkboxes[eControl_HostInvisible]
.IsChecked());
bool inCreativeMode = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode) != 0;
if(!inCreativeMode)
{
bool canFly = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleFly);
bool canChangeHunger = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleClassicHunger);
bool inCreativeMode =
Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CreativeMode) != 0;
if (!inCreativeMode) {
bool canFly = Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CanToggleFly);
bool canChangeHunger = Player::getPlayerGamePrivilege(
m_playerPrivileges,
Player::
ePlayerGamePrivilege_CanToggleClassicHunger);
if(canFly) Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanFly,m_checkboxes[eControl_HostFly].IsChecked());
if(canChangeHunger) Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_ClassicHunger,m_checkboxes[eControl_HostHunger].IsChecked());
}
}
}
else
{
INetworkPlayer *editingPlayer = g_NetworkManager.GetPlayerBySmallId(m_networkSmallId);
if(!trustPlayers && (editingPlayer != NULL && !editingPlayer->IsHost() ) )
{
Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CannotMine,!m_checkboxes[eControl_BuildAndMine].IsChecked());
Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CannotBuild,!m_checkboxes[eControl_BuildAndMine].IsChecked());
Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CannotAttackPlayers,!m_checkboxes[eControl_AttackPlayers].IsChecked());
Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CannotAttackAnimals, !m_checkboxes[eControl_AttackAnimals].IsChecked());
Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanUseDoorsAndSwitches, m_checkboxes[eControl_UseDoorsAndSwitches].IsChecked());
Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanUseContainers, m_checkboxes[eControl_UseContainers].IsChecked());
}
if (canFly)
Player::setPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CanFly,
m_checkboxes[eControl_HostFly].IsChecked());
if (canChangeHunger)
Player::setPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_ClassicHunger,
m_checkboxes[eControl_HostHunger]
.IsChecked());
}
}
} else {
INetworkPlayer* editingPlayer =
g_NetworkManager.GetPlayerBySmallId(m_networkSmallId);
if (!trustPlayers &&
(editingPlayer != NULL && !editingPlayer->IsHost())) {
Player::setPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CannotMine,
!m_checkboxes[eControl_BuildAndMine].IsChecked());
Player::setPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CannotBuild,
!m_checkboxes[eControl_BuildAndMine].IsChecked());
Player::setPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CannotAttackPlayers,
!m_checkboxes[eControl_AttackPlayers].IsChecked());
Player::setPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CannotAttackAnimals,
!m_checkboxes[eControl_AttackAnimals].IsChecked());
Player::setPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CanUseDoorsAndSwitches,
m_checkboxes[eControl_UseDoorsAndSwitches]
.IsChecked());
Player::setPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CanUseContainers,
m_checkboxes[eControl_UseContainers].IsChecked());
}
INetworkPlayer *localPlayer = g_NetworkManager.GetLocalPlayerByUserIndex( m_iPad );
INetworkPlayer* localPlayer =
g_NetworkManager.GetLocalPlayerByUserIndex(m_iPad);
if(localPlayer->IsHost())
{
if(cheats)
{
Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleInvisible,m_checkboxes[eControl_HostInvisible].IsChecked());
Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleFly,m_checkboxes[eControl_HostFly].IsChecked());
Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleClassicHunger,m_checkboxes[eControl_HostHunger].IsChecked());
Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanTeleport,m_checkboxes[eControl_CheatTeleport].IsChecked());
}
if (localPlayer->IsHost()) {
if (cheats) {
Player::setPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CanToggleInvisible,
m_checkboxes[eControl_HostInvisible]
.IsChecked());
Player::setPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CanToggleFly,
m_checkboxes[eControl_HostFly].IsChecked());
Player::setPlayerGamePrivilege(
m_playerPrivileges,
Player::
ePlayerGamePrivilege_CanToggleClassicHunger,
m_checkboxes[eControl_HostHunger].IsChecked());
Player::setPlayerGamePrivilege(
m_playerPrivileges,
Player::ePlayerGamePrivilege_CanTeleport,
m_checkboxes[eControl_CheatTeleport]
.IsChecked());
}
Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_Op,m_checkboxes[eControl_Op].IsChecked());
}
}
unsigned int originalPrivileges = app.GetPlayerPrivileges(m_networkSmallId);
if(originalPrivileges != m_playerPrivileges)
{
// Send update settings packet to server
Minecraft *pMinecraft = Minecraft::GetInstance();
std::shared_ptr<MultiplayerLocalPlayer> player = pMinecraft->localplayers[m_iPad];
if(player->connection)
{
player->connection->send( std::shared_ptr<PlayerInfoPacket>( new PlayerInfoPacket( m_networkSmallId, -1, m_playerPrivileges) ) );
}
}
navigateBack();
Player::setPlayerGamePrivilege(
m_playerPrivileges, Player::ePlayerGamePrivilege_Op,
m_checkboxes[eControl_Op].IsChecked());
}
}
unsigned int originalPrivileges =
app.GetPlayerPrivileges(m_networkSmallId);
if (originalPrivileges != m_playerPrivileges) {
// Send update settings packet to server
Minecraft* pMinecraft = Minecraft::GetInstance();
std::shared_ptr<MultiplayerLocalPlayer> player =
pMinecraft->localplayers[m_iPad];
if (player->connection) {
player->connection->send(
std::shared_ptr<PlayerInfoPacket>(
new PlayerInfoPacket(m_networkSmallId, -1,
m_playerPrivileges)));
}
}
navigateBack();
handled = true;
}
break;
case ACTION_MENU_OK:
handled = true;
}
break;
case ACTION_MENU_OK:
#ifdef __ORBIS__
case ACTION_MENU_TOUCHPAD_PRESS:
case ACTION_MENU_TOUCHPAD_PRESS:
#endif
sendInputToMovie(key, repeat, pressed, released);
break;
case ACTION_MENU_UP:
case ACTION_MENU_DOWN:
sendInputToMovie(key, repeat, pressed, released);
break;
}
sendInputToMovie(key, repeat, pressed, released);
break;
case ACTION_MENU_UP:
case ACTION_MENU_DOWN:
sendInputToMovie(key, repeat, pressed, released);
break;
}
}
void UIScene_InGamePlayerOptionsMenu::handlePress(F64 controlId, F64 childId)
{
switch((int)controlId)
{
case eControl_Kick:
{
std::uint8_t *smallId = new std::uint8_t();
*smallId = m_networkSmallId;
unsigned int uiIDA[2];
uiIDA[0]=IDS_CONFIRM_OK;
uiIDA[1]=IDS_CONFIRM_CANCEL;
void UIScene_InGamePlayerOptionsMenu::handlePress(F64 controlId, F64 childId) {
switch ((int)controlId) {
case eControl_Kick: {
std::uint8_t* smallId = new std::uint8_t();
*smallId = m_networkSmallId;
unsigned int uiIDA[2];
uiIDA[0] = IDS_CONFIRM_OK;
uiIDA[1] = IDS_CONFIRM_CANCEL;
ui.RequestMessageBox(IDS_UNLOCK_KICK_PLAYER_TITLE, IDS_UNLOCK_KICK_PLAYER, uiIDA, 2, m_iPad,&UIScene_InGamePlayerOptionsMenu::KickPlayerReturned,smallId,app.GetStringTable(),NULL,0,false);
}
break;
};
ui.RequestMessageBox(
IDS_UNLOCK_KICK_PLAYER_TITLE, IDS_UNLOCK_KICK_PLAYER, uiIDA, 2,
m_iPad, &UIScene_InGamePlayerOptionsMenu::KickPlayerReturned,
smallId, app.GetStringTable(), NULL, 0, false);
} break;
};
}
int UIScene_InGamePlayerOptionsMenu::KickPlayerReturned(void *pParam,int iPad,C4JStorage::EMessageResult result)
{
std::uint8_t smallId = *(std::uint8_t *)pParam;
delete (std::uint8_t *)pParam;
int UIScene_InGamePlayerOptionsMenu::KickPlayerReturned(
void* pParam, int iPad, C4JStorage::EMessageResult result) {
std::uint8_t smallId = *(std::uint8_t*)pParam;
delete (std::uint8_t*)pParam;
if(result==C4JStorage::EMessage_ResultAccept)
{
Minecraft *pMinecraft = Minecraft::GetInstance();
std::shared_ptr<MultiplayerLocalPlayer> localPlayer = pMinecraft->localplayers[iPad];
if(localPlayer->connection)
{
localPlayer->connection->send( std::shared_ptr<KickPlayerPacket>( new KickPlayerPacket(smallId) ) );
}
if (result == C4JStorage::EMessage_ResultAccept) {
Minecraft* pMinecraft = Minecraft::GetInstance();
std::shared_ptr<MultiplayerLocalPlayer> localPlayer =
pMinecraft->localplayers[iPad];
if (localPlayer->connection) {
localPlayer->connection->send(std::shared_ptr<KickPlayerPacket>(
new KickPlayerPacket(smallId)));
}
// Fix for #61494 - [CRASH]: TU7: Code: Multiplayer: Title may crash while kicking a player from an online game.
// We cannot do a navigate back here is this actually occurs on a thread other than the main thread. On rare occasions this can clash
// with the XUI render and causes a crash. The OnPlayerChanged event should perform the navigate back on the main thread
//app.NavigateBack(iPad);
}
// Fix for #61494 - [CRASH]: TU7: Code: Multiplayer: Title may crash
// while kicking a player from an online game. We cannot do a navigate
// back here is this actually occurs on a thread other than the main
// thread. On rare occasions this can clash with the XUI render and
// causes a crash. The OnPlayerChanged event should perform the navigate
// back on the main thread
// app.NavigateBack(iPad);
}
return 0;
return 0;
}
void UIScene_InGamePlayerOptionsMenu::OnPlayerChanged(void *callbackParam, INetworkPlayer *pPlayer, bool leaving)
{
app.DebugPrintf("UIScene_InGamePlayerOptionsMenu::OnPlayerChanged");
UIScene_InGamePlayerOptionsMenu *scene = (UIScene_InGamePlayerOptionsMenu *)callbackParam;
void UIScene_InGamePlayerOptionsMenu::OnPlayerChanged(void* callbackParam,
INetworkPlayer* pPlayer,
bool leaving) {
app.DebugPrintf("UIScene_InGamePlayerOptionsMenu::OnPlayerChanged");
UIScene_InGamePlayerOptionsMenu* scene =
(UIScene_InGamePlayerOptionsMenu*)callbackParam;
UIScene_InGameInfoMenu *infoScene = (UIScene_InGameInfoMenu *)scene->getBackScene();
if(infoScene != NULL) UIScene_InGameInfoMenu::OnPlayerChanged(infoScene,pPlayer,leaving);
UIScene_InGameInfoMenu* infoScene =
(UIScene_InGameInfoMenu*)scene->getBackScene();
if (infoScene != NULL)
UIScene_InGameInfoMenu::OnPlayerChanged(infoScene, pPlayer, leaving);
if(leaving && pPlayer != NULL && pPlayer->GetSmallId() == scene->m_networkSmallId)
{
scene->m_bShouldNavBack = true;
}
if (leaving && pPlayer != NULL &&
pPlayer->GetSmallId() == scene->m_networkSmallId) {
scene->m_bShouldNavBack = true;
}
}
void UIScene_InGamePlayerOptionsMenu::resetCheatCheckboxes()
{
bool isModerator = m_checkboxes[eControl_Op].IsChecked();
//bool cheatsEnabled = app.GetGameHostOption(eGameHostOption_CheatsEnabled) != 0;
void UIScene_InGamePlayerOptionsMenu::resetCheatCheckboxes() {
bool isModerator = m_checkboxes[eControl_Op].IsChecked();
// bool cheatsEnabled =
// app.GetGameHostOption(eGameHostOption_CheatsEnabled) != 0;
if (!m_editingSelf)
{
m_checkboxes[eControl_HostInvisible].SetEnable(isModerator);
m_checkboxes[eControl_HostFly].SetEnable(isModerator);
m_checkboxes[eControl_HostHunger].SetEnable(isModerator);
m_checkboxes[eControl_CheatTeleport].SetEnable(isModerator);
}
if (!m_editingSelf) {
m_checkboxes[eControl_HostInvisible].SetEnable(isModerator);
m_checkboxes[eControl_HostFly].SetEnable(isModerator);
m_checkboxes[eControl_HostHunger].SetEnable(isModerator);
m_checkboxes[eControl_CheatTeleport].SetEnable(isModerator);
}
}
void UIScene_InGamePlayerOptionsMenu::handleCheckboxToggled(F64 controlId, bool selected)
{
switch((int)controlId)
{
case eControl_Op:
// flag that the moderator state has changed
//resetCheatCheckboxes();
break;
}
void UIScene_InGamePlayerOptionsMenu::handleCheckboxToggled(F64 controlId,
bool selected) {
switch ((int)controlId) {
case eControl_Op:
// flag that the moderator state has changed
// resetCheatCheckboxes();
break;
}
}
void UIScene_InGamePlayerOptionsMenu::handleTimerComplete(int id)
{
switch(id)
{
case CHECKBOXES_TIMER_ID:
{
bool bIsModerator = m_checkboxes[eControl_Op].IsChecked();
if(m_bModeratorState!=bIsModerator)
{
m_bModeratorState=bIsModerator;
resetCheatCheckboxes();
}
}
break;
}
void UIScene_InGamePlayerOptionsMenu::handleTimerComplete(int id) {
switch (id) {
case CHECKBOXES_TIMER_ID: {
bool bIsModerator = m_checkboxes[eControl_Op].IsChecked();
if (m_bModeratorState != bIsModerator) {
m_bModeratorState = bIsModerator;
resetCheatCheckboxes();
}
} break;
}
}