4jcraft/targets/app/common/GameSettingsManager.cpp
2026-04-07 15:55:45 -05:00

1437 lines
59 KiB
C++

#include "app/common/GameSettingsManager.h"
#include "app/common/Game.h"
#include "app/common/App_Defines.h"
#include "minecraft/GameEnums.h"
#include "app/common/Console_Debug_enum.h"
#include "app/common/Network/GameNetworkManager.h"
#include "app/linux/LinuxGame.h"
#include "app/linux/Linux_UIController.h"
#include "minecraft/client/Minecraft.h"
#include "minecraft/client/Options.h"
#include "minecraft/client/gui/Gui.h"
#include "minecraft/client/multiplayer/MultiPlayerGameMode.h"
#include "minecraft/client/multiplayer/MultiPlayerLocalPlayer.h"
#include "minecraft/client/renderer/GameRenderer.h"
#include "minecraft/client/skins/TexturePack.h"
#include "minecraft/client/skins/TexturePackRepository.h"
#include "minecraft/server/MinecraftServer.h"
#include "minecraft/server/PlayerList.h"
#include "minecraft/server/level/ServerPlayer.h"
#include "minecraft/world/entity/player/Player.h"
#include "minecraft/world/level/tile/Tile.h"
#include "platform/input/input.h"
#include "platform/renderer/renderer.h"
#include "platform/storage/storage.h"
#include "app/common/Audio/SoundEngine.h"
#include <cstring>
GameSettingsManager::GameSettingsManager() {
memset(GameSettingsA, 0, sizeof(GameSettingsA));
m_uiGameHostSettings = 0;
}
void GameSettingsManager::initGameSettings() {
for (int i = 0; i < XUSER_MAX_COUNT; i++) {
GameSettingsA[i] =
(GAME_SETTINGS*)PlatformProfile.GetGameDefinedProfileData(i);
// clear the flag to say the settings have changed
GameSettingsA[i]->bSettingsChanged = false;
#if defined(_WINDOWS64)
IPlatformProfile::PROFILESETTINGS* pProfileSettings =
PlatformProfile.GetDashboardProfileSettings(i);
memset(pProfileSettings, 0, sizeof(IPlatformProfile::PROFILESETTINGS));
setDefaultOptions(pProfileSettings, i);
#else
IPlatformProfile::PROFILESETTINGS* pProfileSettings =
PlatformProfile.GetDashboardProfileSettings(i);
memset(pProfileSettings, 0, sizeof(IPlatformProfile::PROFILESETTINGS));
setDefaultOptions(pProfileSettings, i);
#endif
}
}
int GameSettingsManager::setDefaultOptions(
IPlatformProfile::PROFILESETTINGS* pSettings, const int iPad) {
setGameSettings(iPad, eGameSetting_MusicVolume, DEFAULT_VOLUME_LEVEL);
setGameSettings(iPad, eGameSetting_SoundFXVolume, DEFAULT_VOLUME_LEVEL);
setGameSettings(iPad, eGameSetting_Gamma, 50);
if (Minecraft::GetInstance()->level == nullptr) {
app.DebugPrintf("SetDefaultOptions - Difficulty = 1\n");
setGameSettings(iPad, eGameSetting_Difficulty, 1);
}
setGameSettings(iPad, eGameSetting_Sensitivity_InGame, 100);
setGameSettings(iPad, eGameSetting_ViewBob, 1);
setGameSettings(iPad, eGameSetting_ControlScheme, 0);
setGameSettings(iPad, eGameSetting_ControlInvertLook,
(pSettings->iYAxisInversion != 0) ? 1 : 0);
setGameSettings(iPad, eGameSetting_ControlSouthPaw,
pSettings->bSwapSticks ? 1 : 0);
setGameSettings(iPad, eGameSetting_SplitScreenVertical, 0);
setGameSettings(iPad, eGameSetting_GamertagsVisible, 1);
// Interim TU 1.6.6
setGameSettings(iPad, eGameSetting_Sensitivity_InMenu, 100);
setGameSettings(iPad, eGameSetting_DisplaySplitscreenGamertags, 1);
setGameSettings(iPad, eGameSetting_Hints, 1);
setGameSettings(iPad, eGameSetting_Autosave, 2);
setGameSettings(iPad, eGameSetting_Tooltips, 1);
setGameSettings(iPad, eGameSetting_InterfaceOpacity, 80);
// TU 5
setGameSettings(iPad, eGameSetting_Clouds, 1);
setGameSettings(iPad, eGameSetting_Online, 1);
setGameSettings(iPad, eGameSetting_InviteOnly, 0);
setGameSettings(iPad, eGameSetting_FriendsOfFriends, 1);
// TU 6
setGameSettings(iPad, eGameSetting_BedrockFog, 0);
setGameSettings(iPad, eGameSetting_DisplayHUD, 1);
setGameSettings(iPad, eGameSetting_DisplayHand, 1);
// TU 7
setGameSettings(iPad, eGameSetting_CustomSkinAnim, 1);
// TU 9
setGameSettings(iPad, eGameSetting_DeathMessages, 1);
setGameSettings(iPad, eGameSetting_UISize, 1);
setGameSettings(iPad, eGameSetting_UISizeSplitscreen, 2);
setGameSettings(iPad, eGameSetting_AnimatedCharacter, 1);
// TU 12
GameSettingsA[iPad]->ucCurrentFavoriteSkinPos = 0;
for (int i = 0; i < MAX_FAVORITE_SKINS; i++) {
GameSettingsA[iPad]->uiFavoriteSkinA[i] = 0xFFFFFFFF;
}
// TU 13
GameSettingsA[iPad]->uiMashUpPackWorldsDisplay = 0xFFFFFFFF;
// 1.6.4
app.SetGameHostOption(eGameHostOption_MobGriefing, 1);
app.SetGameHostOption(eGameHostOption_KeepInventory, 0);
app.SetGameHostOption(eGameHostOption_DoMobSpawning, 1);
app.SetGameHostOption(eGameHostOption_DoMobLoot, 1);
app.SetGameHostOption(eGameHostOption_DoTileDrops, 1);
app.SetGameHostOption(eGameHostOption_NaturalRegeneration, 1);
app.SetGameHostOption(eGameHostOption_DoDaylightCycle, 1);
// PS3DEC13
setGameSettings(iPad, eGameSetting_PS3_EULA_Read, 0);
if (!app.GetGameStarted()) {
GameSettingsA[iPad]->ucLanguage =
MINECRAFT_LANGUAGE_DEFAULT;
GameSettingsA[iPad]->ucLocale =
MINECRAFT_LANGUAGE_DEFAULT;
}
return 0;
}
int GameSettingsManager::defaultOptionsCallback(
void* pParam, IPlatformProfile::PROFILESETTINGS* pSettings, const int iPad) {
Game* pApp = (Game*)pParam;
pApp->DebugPrintf("Setting default options for player %d", iPad);
pApp->SetAction(iPad, eAppAction_SetDefaultOptions, (void*)pSettings);
return 0;
}
int GameSettingsManager::oldProfileVersionCallback(
void* pParam, unsigned char* pucData, const unsigned short usVersion,
const int iPad) {
switch (usVersion) {
case PROFILE_VERSION_8: {
GAME_SETTINGS* pGameSettings = (GAME_SETTINGS*)pucData;
pGameSettings->uiBitmaskValues |= GAMESETTING_DISPLAYUPDATEMSG;
pGameSettings->uiMashUpPackWorldsDisplay = 0xFFFFFFFF;
pGameSettings->uiBitmaskValues &= ~GAMESETTING_PS3EULAREAD;
pGameSettings->ucLanguage = MINECRAFT_LANGUAGE_DEFAULT;
} break;
case PROFILE_VERSION_9: {
GAME_SETTINGS* pGameSettings = (GAME_SETTINGS*)pucData;
pGameSettings->uiBitmaskValues |= GAMESETTING_DISPLAYUPDATEMSG;
pGameSettings->uiBitmaskValues &= ~GAMESETTING_PS3EULAREAD;
pGameSettings->ucLanguage = MINECRAFT_LANGUAGE_DEFAULT;
} break;
case PROFILE_VERSION_10: {
GAME_SETTINGS* pGameSettings = (GAME_SETTINGS*)pucData;
pGameSettings->uiBitmaskValues |= GAMESETTING_DISPLAYUPDATEMSG;
pGameSettings->ucLanguage = MINECRAFT_LANGUAGE_DEFAULT;
} break;
case PROFILE_VERSION_11: {
GAME_SETTINGS* pGameSettings = (GAME_SETTINGS*)pucData;
pGameSettings->uiBitmaskValues |= GAMESETTING_DISPLAYUPDATEMSG;
} break;
case PROFILE_VERSION_12: {
GAME_SETTINGS* pGameSettings = (GAME_SETTINGS*)pucData;
pGameSettings->uiBitmaskValues |= GAMESETTING_DISPLAYUPDATEMSG;
} break;
default: {
app.DebugPrintf(
"Don't know what to do with this profile version!\n");
GAME_SETTINGS* pGameSettings = (GAME_SETTINGS*)pucData;
pGameSettings->ucMenuSensitivity = 100;
pGameSettings->ucInterfaceOpacity = 80;
pGameSettings->usBitmaskValues |= 0x0200;
pGameSettings->usBitmaskValues |= 0x0400;
pGameSettings->usBitmaskValues |= 0x1000;
pGameSettings->usBitmaskValues |= 0x8000;
pGameSettings->uiBitmaskValues = 0L;
pGameSettings->uiBitmaskValues |= GAMESETTING_CLOUDS;
pGameSettings->uiBitmaskValues |= GAMESETTING_ONLINE;
pGameSettings->uiBitmaskValues |= GAMESETTING_FRIENDSOFFRIENDS;
pGameSettings->uiBitmaskValues |= GAMESETTING_DISPLAYUPDATEMSG;
pGameSettings->uiBitmaskValues &= ~GAMESETTING_BEDROCKFOG;
pGameSettings->uiBitmaskValues |= GAMESETTING_DISPLAYHUD;
pGameSettings->uiBitmaskValues |= GAMESETTING_DISPLAYHAND;
pGameSettings->uiBitmaskValues |= GAMESETTING_CUSTOMSKINANIM;
pGameSettings->uiBitmaskValues |= GAMESETTING_DEATHMESSAGES;
pGameSettings->uiBitmaskValues |=
(GAMESETTING_UISIZE & 0x00000800);
pGameSettings->uiBitmaskValues |=
(GAMESETTING_UISIZE_SPLITSCREEN & 0x00004000);
pGameSettings->uiBitmaskValues |= GAMESETTING_ANIMATEDCHARACTER;
for (int i = 0; i < MAX_FAVORITE_SKINS; i++) {
pGameSettings->uiFavoriteSkinA[i] = 0xFFFFFFFF;
}
pGameSettings->ucCurrentFavoriteSkinPos = 0;
pGameSettings->uiMashUpPackWorldsDisplay = 0xFFFFFFFF;
pGameSettings->uiBitmaskValues &= ~GAMESETTING_PS3EULAREAD;
pGameSettings->ucLanguage = MINECRAFT_LANGUAGE_DEFAULT;
} break;
}
return 0;
}
void GameSettingsManager::applyGameSettingsChanged(int iPad) {
actionGameSettings(iPad, eGameSetting_MusicVolume);
actionGameSettings(iPad, eGameSetting_SoundFXVolume);
actionGameSettings(iPad, eGameSetting_Gamma);
actionGameSettings(iPad, eGameSetting_Difficulty);
actionGameSettings(iPad, eGameSetting_Sensitivity_InGame);
actionGameSettings(iPad, eGameSetting_ViewBob);
actionGameSettings(iPad, eGameSetting_ControlScheme);
actionGameSettings(iPad, eGameSetting_ControlInvertLook);
actionGameSettings(iPad, eGameSetting_ControlSouthPaw);
actionGameSettings(iPad, eGameSetting_SplitScreenVertical);
actionGameSettings(iPad, eGameSetting_GamertagsVisible);
// Interim TU 1.6.6
actionGameSettings(iPad, eGameSetting_Sensitivity_InMenu);
actionGameSettings(iPad, eGameSetting_DisplaySplitscreenGamertags);
actionGameSettings(iPad, eGameSetting_Hints);
actionGameSettings(iPad, eGameSetting_InterfaceOpacity);
actionGameSettings(iPad, eGameSetting_Tooltips);
actionGameSettings(iPad, eGameSetting_Clouds);
actionGameSettings(iPad, eGameSetting_BedrockFog);
actionGameSettings(iPad, eGameSetting_DisplayHUD);
actionGameSettings(iPad, eGameSetting_DisplayHand);
actionGameSettings(iPad, eGameSetting_CustomSkinAnim);
actionGameSettings(iPad, eGameSetting_DeathMessages);
actionGameSettings(iPad, eGameSetting_UISize);
actionGameSettings(iPad, eGameSetting_UISizeSplitscreen);
actionGameSettings(iPad, eGameSetting_AnimatedCharacter);
actionGameSettings(iPad, eGameSetting_PS3_EULA_Read);
}
void GameSettingsManager::actionGameSettings(int iPad, eGameSetting eVal) {
Minecraft* pMinecraft = Minecraft::GetInstance();
switch (eVal) {
case eGameSetting_MusicVolume:
if (iPad == PlatformProfile.GetPrimaryPad()) {
pMinecraft->options->set(
Options::Option::MUSIC,
((float)GameSettingsA[iPad]->ucMusicVolume) / 100.0f);
}
break;
case eGameSetting_SoundFXVolume:
if (iPad == PlatformProfile.GetPrimaryPad()) {
pMinecraft->options->set(
Options::Option::SOUND,
((float)GameSettingsA[iPad]->ucSoundFXVolume) / 100.0f);
}
break;
case eGameSetting_Gamma:
if (iPad == PlatformProfile.GetPrimaryPad()) {
float fVal = ((float)GameSettingsA[iPad]->ucGamma) * 327.68f;
PlatformRenderer.UpdateGamma((unsigned short)fVal);
}
break;
case eGameSetting_Difficulty:
if (iPad == PlatformProfile.GetPrimaryPad()) {
pMinecraft->options->toggle(
Options::Option::DIFFICULTY,
GameSettingsA[iPad]->usBitmaskValues & 0x03);
app.DebugPrintf("Difficulty toggle to %d\n",
GameSettingsA[iPad]->usBitmaskValues & 0x03);
app.SetGameHostOption(eGameHostOption_Difficulty,
pMinecraft->options->difficulty);
bool bInGame = pMinecraft->level != nullptr;
if (bInGame && g_NetworkManager.IsHost() &&
(iPad == PlatformProfile.GetPrimaryPad())) {
app.SetXuiServerAction(
iPad, eXuiServerAction_ServerSettingChanged_Difficulty);
}
} else {
app.DebugPrintf(
"NOT ACTIONING DIFFICULTY - Primary pad is %d, This pad is "
"%d\n",
PlatformProfile.GetPrimaryPad(), iPad);
}
break;
case eGameSetting_Sensitivity_InGame:
pMinecraft->options->set(
Options::Option::SENSITIVITY,
((float)GameSettingsA[iPad]->ucSensitivity) / 100.0f);
break;
case eGameSetting_ViewBob:
break;
case eGameSetting_ControlScheme:
PlatformInput.SetJoypadMapVal(
iPad, (GameSettingsA[iPad]->usBitmaskValues & 0x30) >> 4);
break;
case eGameSetting_ControlInvertLook:
break;
case eGameSetting_ControlSouthPaw:
if (GameSettingsA[iPad]->usBitmaskValues & 0x80) {
PlatformInput.SetJoypadStickAxisMap(iPad, AXIS_MAP_LX,
AXIS_MAP_RX);
PlatformInput.SetJoypadStickAxisMap(iPad, AXIS_MAP_LY,
AXIS_MAP_RY);
PlatformInput.SetJoypadStickAxisMap(iPad, AXIS_MAP_RX,
AXIS_MAP_LX);
PlatformInput.SetJoypadStickAxisMap(iPad, AXIS_MAP_RY,
AXIS_MAP_LY);
PlatformInput.SetJoypadStickTriggerMap(iPad, TRIGGER_MAP_0,
TRIGGER_MAP_1);
PlatformInput.SetJoypadStickTriggerMap(iPad, TRIGGER_MAP_1,
TRIGGER_MAP_0);
} else {
PlatformInput.SetJoypadStickAxisMap(iPad, AXIS_MAP_LX,
AXIS_MAP_LX);
PlatformInput.SetJoypadStickAxisMap(iPad, AXIS_MAP_LY,
AXIS_MAP_LY);
PlatformInput.SetJoypadStickAxisMap(iPad, AXIS_MAP_RX,
AXIS_MAP_RX);
PlatformInput.SetJoypadStickAxisMap(iPad, AXIS_MAP_RY,
AXIS_MAP_RY);
PlatformInput.SetJoypadStickTriggerMap(iPad, TRIGGER_MAP_0,
TRIGGER_MAP_0);
PlatformInput.SetJoypadStickTriggerMap(iPad, TRIGGER_MAP_1,
TRIGGER_MAP_1);
}
break;
case eGameSetting_SplitScreenVertical:
if (iPad == PlatformProfile.GetPrimaryPad()) {
pMinecraft->updatePlayerViewportAssignments();
}
break;
case eGameSetting_GamertagsVisible: {
bool bInGame = pMinecraft->level != nullptr;
// Game Host only
if (bInGame && g_NetworkManager.IsHost() &&
(iPad == PlatformProfile.GetPrimaryPad())) {
app.SetGameHostOption(
eGameHostOption_Gamertags,
((GameSettingsA[iPad]->usBitmaskValues & 0x0008) != 0) ? 1
: 0);
app.SetXuiServerAction(
iPad, eXuiServerAction_ServerSettingChanged_Gamertags);
PlayerList* players =
MinecraftServer::getInstance()->getPlayerList();
for (auto it3 = players->players.begin();
it3 != players->players.end(); ++it3) {
std::shared_ptr<ServerPlayer> decorationPlayer = *it3;
decorationPlayer->setShowOnMaps(
(app.GetGameHostOption(eGameHostOption_Gamertags) != 0)
? true
: false);
}
}
} break;
case eGameSetting_Sensitivity_InMenu:
break;
case eGameSetting_DisplaySplitscreenGamertags:
for (std::uint8_t idx = 0; idx < XUSER_MAX_COUNT; ++idx) {
if (pMinecraft->localplayers[idx] != nullptr) {
if (pMinecraft->localplayers[idx]->m_iScreenSection ==
IPlatformRenderer::VIEWPORT_TYPE_FULLSCREEN) {
ui.DisplayGamertag(idx, false);
} else {
ui.DisplayGamertag(idx, true);
}
}
}
break;
case eGameSetting_InterfaceOpacity:
ui.RefreshTooltips(iPad);
break;
case eGameSetting_Hints:
break;
case eGameSetting_Tooltips:
if ((GameSettingsA[iPad]->usBitmaskValues & 0x8000) != 0) {
ui.SetEnableTooltips(iPad, true);
} else {
ui.SetEnableTooltips(iPad, false);
}
break;
case eGameSetting_Clouds:
break;
case eGameSetting_Online:
break;
case eGameSetting_InviteOnly:
break;
case eGameSetting_FriendsOfFriends:
break;
case eGameSetting_BedrockFog: {
bool bInGame = pMinecraft->level != nullptr;
if (bInGame && g_NetworkManager.IsHost() &&
(iPad == PlatformProfile.GetPrimaryPad())) {
app.SetGameHostOption(
eGameHostOption_BedrockFog,
getGameSettings(iPad, eGameSetting_BedrockFog) ? 1 : 0);
app.SetXuiServerAction(
iPad, eXuiServerAction_ServerSettingChanged_BedrockFog);
}
} break;
case eGameSetting_DisplayHUD:
break;
case eGameSetting_DisplayHand:
break;
case eGameSetting_CustomSkinAnim:
break;
case eGameSetting_DeathMessages:
break;
case eGameSetting_UISize:
break;
case eGameSetting_UISizeSplitscreen:
break;
case eGameSetting_AnimatedCharacter:
break;
case eGameSetting_PS3_EULA_Read:
break;
case eGameSetting_PSVita_NetworkModeAdhoc:
break;
default:
break;
}
}
void GameSettingsManager::hideMashupPackWorld(int iPad,
unsigned int iMashupPackID) {
unsigned int uiPackID = iMashupPackID - 1024;
GameSettingsA[iPad]->uiMashUpPackWorldsDisplay &= ~(1 << uiPackID);
GameSettingsA[iPad]->bSettingsChanged = true;
}
void GameSettingsManager::enableMashupPackWorlds(int iPad) {
GameSettingsA[iPad]->uiMashUpPackWorldsDisplay = 0xFFFFFFFF;
GameSettingsA[iPad]->bSettingsChanged = true;
}
unsigned int GameSettingsManager::getMashupPackWorlds(int iPad) {
return GameSettingsA[iPad]->uiMashUpPackWorldsDisplay;
}
void GameSettingsManager::setMinecraftLanguage(int iPad,
unsigned char ucLanguage) {
GameSettingsA[iPad]->ucLanguage = ucLanguage;
GameSettingsA[iPad]->bSettingsChanged = true;
}
unsigned char GameSettingsManager::getMinecraftLanguage(int iPad) {
if (GameSettingsA[iPad] == nullptr) {
return 0;
} else {
return GameSettingsA[iPad]->ucLanguage;
}
}
void GameSettingsManager::setMinecraftLocale(int iPad,
unsigned char ucLocale) {
GameSettingsA[iPad]->ucLocale = ucLocale;
GameSettingsA[iPad]->bSettingsChanged = true;
}
unsigned char GameSettingsManager::getMinecraftLocale(int iPad) {
if (GameSettingsA[iPad] == nullptr) {
return 0;
} else {
return GameSettingsA[iPad]->ucLocale;
}
}
void GameSettingsManager::setGameSettings(int iPad, eGameSetting eVal,
unsigned char ucVal) {
switch (eVal) {
case eGameSetting_MusicVolume:
if (GameSettingsA[iPad]->ucMusicVolume != ucVal) {
GameSettingsA[iPad]->ucMusicVolume = ucVal;
if (iPad == PlatformProfile.GetPrimaryPad()) {
actionGameSettings(iPad, eVal);
}
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_SoundFXVolume:
if (GameSettingsA[iPad]->ucSoundFXVolume != ucVal) {
GameSettingsA[iPad]->ucSoundFXVolume = ucVal;
if (iPad == PlatformProfile.GetPrimaryPad()) {
actionGameSettings(iPad, eVal);
}
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_Gamma:
if (GameSettingsA[iPad]->ucGamma != ucVal) {
GameSettingsA[iPad]->ucGamma = ucVal;
if (iPad == PlatformProfile.GetPrimaryPad()) {
actionGameSettings(iPad, eVal);
}
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_Difficulty:
if ((GameSettingsA[iPad]->usBitmaskValues & 0x03) !=
(ucVal & 0x03)) {
GameSettingsA[iPad]->usBitmaskValues &= ~0x03;
GameSettingsA[iPad]->usBitmaskValues |= ucVal & 0x03;
if (iPad == PlatformProfile.GetPrimaryPad()) {
actionGameSettings(iPad, eVal);
}
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_Sensitivity_InGame:
if (GameSettingsA[iPad]->ucSensitivity != ucVal) {
GameSettingsA[iPad]->ucSensitivity = ucVal;
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_ViewBob:
if ((GameSettingsA[iPad]->usBitmaskValues & 0x0004) !=
((ucVal & 0x01) << 2)) {
if (ucVal != 0) {
GameSettingsA[iPad]->usBitmaskValues |= 0x0004;
} else {
GameSettingsA[iPad]->usBitmaskValues &= ~0x0004;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_ControlScheme:
if ((GameSettingsA[iPad]->usBitmaskValues & 0x30) !=
((ucVal & 0x03) << 4)) {
GameSettingsA[iPad]->usBitmaskValues &= ~0x0030;
if (ucVal != 0) {
GameSettingsA[iPad]->usBitmaskValues |= (ucVal & 0x03) << 4;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_ControlInvertLook:
if ((GameSettingsA[iPad]->usBitmaskValues & 0x0040) !=
((ucVal & 0x01) << 6)) {
if (ucVal != 0) {
GameSettingsA[iPad]->usBitmaskValues |= 0x0040;
} else {
GameSettingsA[iPad]->usBitmaskValues &= ~0x0040;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_ControlSouthPaw:
if ((GameSettingsA[iPad]->usBitmaskValues & 0x0080) !=
((ucVal & 0x01) << 7)) {
if (ucVal != 0) {
GameSettingsA[iPad]->usBitmaskValues |= 0x0080;
} else {
GameSettingsA[iPad]->usBitmaskValues &= ~0x0080;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_SplitScreenVertical:
if ((GameSettingsA[iPad]->usBitmaskValues & 0x0100) !=
((ucVal & 0x01) << 8)) {
if (ucVal != 0) {
GameSettingsA[iPad]->usBitmaskValues |= 0x0100;
} else {
GameSettingsA[iPad]->usBitmaskValues &= ~0x0100;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_GamertagsVisible:
if ((GameSettingsA[iPad]->usBitmaskValues & 0x0008) !=
((ucVal & 0x01) << 3)) {
if (ucVal != 0) {
GameSettingsA[iPad]->usBitmaskValues |= 0x0008;
} else {
GameSettingsA[iPad]->usBitmaskValues &= ~0x0008;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_Sensitivity_InMenu:
if (GameSettingsA[iPad]->ucMenuSensitivity != ucVal) {
GameSettingsA[iPad]->ucMenuSensitivity = ucVal;
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_DisplaySplitscreenGamertags:
if ((GameSettingsA[iPad]->usBitmaskValues & 0x0200) !=
((ucVal & 0x01) << 9)) {
if (ucVal != 0) {
GameSettingsA[iPad]->usBitmaskValues |= 0x0200;
} else {
GameSettingsA[iPad]->usBitmaskValues &= ~0x0200;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_Hints:
if ((GameSettingsA[iPad]->usBitmaskValues & 0x0400) !=
((ucVal & 0x01) << 10)) {
if (ucVal != 0) {
GameSettingsA[iPad]->usBitmaskValues |= 0x0400;
} else {
GameSettingsA[iPad]->usBitmaskValues &= ~0x0400;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_Autosave:
if ((GameSettingsA[iPad]->usBitmaskValues & 0x7800) !=
((ucVal & 0x0F) << 11)) {
GameSettingsA[iPad]->usBitmaskValues &= ~0x7800;
if (ucVal != 0) {
GameSettingsA[iPad]->usBitmaskValues |= (ucVal & 0x0F)
<< 11;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_Tooltips:
if ((GameSettingsA[iPad]->usBitmaskValues & 0x8000) !=
((ucVal & 0x01) << 15)) {
if (ucVal != 0) {
GameSettingsA[iPad]->usBitmaskValues |= 0x8000;
} else {
GameSettingsA[iPad]->usBitmaskValues &= ~0x8000;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_InterfaceOpacity:
if (GameSettingsA[iPad]->ucInterfaceOpacity != ucVal) {
GameSettingsA[iPad]->ucInterfaceOpacity = ucVal;
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_Clouds:
if ((GameSettingsA[iPad]->uiBitmaskValues & GAMESETTING_CLOUDS) !=
(ucVal & 0x01)) {
if (ucVal == 1) {
GameSettingsA[iPad]->uiBitmaskValues |= GAMESETTING_CLOUDS;
} else {
GameSettingsA[iPad]->uiBitmaskValues &= ~GAMESETTING_CLOUDS;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_Online:
if ((GameSettingsA[iPad]->uiBitmaskValues & GAMESETTING_ONLINE) !=
(ucVal & 0x01) << 1) {
if (ucVal == 1) {
GameSettingsA[iPad]->uiBitmaskValues |= GAMESETTING_ONLINE;
} else {
GameSettingsA[iPad]->uiBitmaskValues &= ~GAMESETTING_ONLINE;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_InviteOnly:
if ((GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_INVITEONLY) != (ucVal & 0x01) << 2) {
if (ucVal == 1) {
GameSettingsA[iPad]->uiBitmaskValues |=
GAMESETTING_INVITEONLY;
} else {
GameSettingsA[iPad]->uiBitmaskValues &=
~GAMESETTING_INVITEONLY;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_FriendsOfFriends:
if ((GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_FRIENDSOFFRIENDS) != (ucVal & 0x01) << 3) {
if (ucVal == 1) {
GameSettingsA[iPad]->uiBitmaskValues |=
GAMESETTING_FRIENDSOFFRIENDS;
} else {
GameSettingsA[iPad]->uiBitmaskValues &=
~GAMESETTING_FRIENDSOFFRIENDS;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_DisplayUpdateMessage:
if ((GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_DISPLAYUPDATEMSG) != (ucVal & 0x03) << 4) {
GameSettingsA[iPad]->uiBitmaskValues &=
~GAMESETTING_DISPLAYUPDATEMSG;
if (ucVal > 0) {
GameSettingsA[iPad]->uiBitmaskValues |= (ucVal & 0x03) << 4;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_BedrockFog:
if ((GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_BEDROCKFOG) != (ucVal & 0x01) << 6) {
if (ucVal == 1) {
GameSettingsA[iPad]->uiBitmaskValues |=
GAMESETTING_BEDROCKFOG;
} else {
GameSettingsA[iPad]->uiBitmaskValues &=
~GAMESETTING_BEDROCKFOG;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_DisplayHUD:
if ((GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_DISPLAYHUD) != (ucVal & 0x01) << 7) {
if (ucVal == 1) {
GameSettingsA[iPad]->uiBitmaskValues |=
GAMESETTING_DISPLAYHUD;
} else {
GameSettingsA[iPad]->uiBitmaskValues &=
~GAMESETTING_DISPLAYHUD;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_DisplayHand:
if ((GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_DISPLAYHAND) != (ucVal & 0x01) << 8) {
if (ucVal == 1) {
GameSettingsA[iPad]->uiBitmaskValues |=
GAMESETTING_DISPLAYHAND;
} else {
GameSettingsA[iPad]->uiBitmaskValues &=
~GAMESETTING_DISPLAYHAND;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_CustomSkinAnim:
if ((GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_CUSTOMSKINANIM) != (ucVal & 0x01) << 9) {
if (ucVal == 1) {
GameSettingsA[iPad]->uiBitmaskValues |=
GAMESETTING_CUSTOMSKINANIM;
} else {
GameSettingsA[iPad]->uiBitmaskValues &=
~GAMESETTING_CUSTOMSKINANIM;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_DeathMessages:
if ((GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_DEATHMESSAGES) != (ucVal & 0x01) << 10) {
if (ucVal == 1) {
GameSettingsA[iPad]->uiBitmaskValues |=
GAMESETTING_DEATHMESSAGES;
} else {
GameSettingsA[iPad]->uiBitmaskValues &=
~GAMESETTING_DEATHMESSAGES;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_UISize:
if ((GameSettingsA[iPad]->uiBitmaskValues & GAMESETTING_UISIZE) !=
((ucVal & 0x03) << 11)) {
GameSettingsA[iPad]->uiBitmaskValues &= ~GAMESETTING_UISIZE;
if (ucVal != 0) {
GameSettingsA[iPad]->uiBitmaskValues |= (ucVal & 0x03)
<< 11;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_UISizeSplitscreen:
if ((GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_UISIZE_SPLITSCREEN) != ((ucVal & 0x03) << 13)) {
GameSettingsA[iPad]->uiBitmaskValues &=
~GAMESETTING_UISIZE_SPLITSCREEN;
if (ucVal != 0) {
GameSettingsA[iPad]->uiBitmaskValues |= (ucVal & 0x03)
<< 13;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_AnimatedCharacter:
if ((GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_ANIMATEDCHARACTER) != (ucVal & 0x01) << 15) {
if (ucVal == 1) {
GameSettingsA[iPad]->uiBitmaskValues |=
GAMESETTING_ANIMATEDCHARACTER;
} else {
GameSettingsA[iPad]->uiBitmaskValues &=
~GAMESETTING_ANIMATEDCHARACTER;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_PS3_EULA_Read:
if ((GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_PS3EULAREAD) != (ucVal & 0x01) << 16) {
if (ucVal == 1) {
GameSettingsA[iPad]->uiBitmaskValues |=
GAMESETTING_PS3EULAREAD;
} else {
GameSettingsA[iPad]->uiBitmaskValues &=
~GAMESETTING_PS3EULAREAD;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
case eGameSetting_PSVita_NetworkModeAdhoc:
if ((GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_PSVITANETWORKMODEADHOC) != (ucVal & 0x01) << 17) {
if (ucVal == 1) {
GameSettingsA[iPad]->uiBitmaskValues |=
GAMESETTING_PSVITANETWORKMODEADHOC;
} else {
GameSettingsA[iPad]->uiBitmaskValues &=
~GAMESETTING_PSVITANETWORKMODEADHOC;
}
actionGameSettings(iPad, eVal);
GameSettingsA[iPad]->bSettingsChanged = true;
}
break;
}
}
unsigned char GameSettingsManager::getGameSettings(eGameSetting eVal) {
int iPad = PlatformProfile.GetPrimaryPad();
return getGameSettings(iPad, eVal);
}
unsigned char GameSettingsManager::getGameSettings(int iPad,
eGameSetting eVal) {
switch (eVal) {
case eGameSetting_MusicVolume:
return GameSettingsA[iPad]->ucMusicVolume;
case eGameSetting_SoundFXVolume:
return GameSettingsA[iPad]->ucSoundFXVolume;
case eGameSetting_Gamma:
return GameSettingsA[iPad]->ucGamma;
case eGameSetting_Difficulty:
return GameSettingsA[iPad]->usBitmaskValues & 0x0003;
case eGameSetting_Sensitivity_InGame:
return GameSettingsA[iPad]->ucSensitivity;
case eGameSetting_ViewBob:
return ((GameSettingsA[iPad]->usBitmaskValues & 0x0004) >> 2);
case eGameSetting_GamertagsVisible:
return ((GameSettingsA[iPad]->usBitmaskValues & 0x0008) >> 3);
case eGameSetting_ControlScheme:
return ((GameSettingsA[iPad]->usBitmaskValues & 0x0030) >> 4);
case eGameSetting_ControlInvertLook:
return ((GameSettingsA[iPad]->usBitmaskValues & 0x0040) >> 6);
case eGameSetting_ControlSouthPaw:
return ((GameSettingsA[iPad]->usBitmaskValues & 0x0080) >> 7);
case eGameSetting_SplitScreenVertical:
return ((GameSettingsA[iPad]->usBitmaskValues & 0x0100) >> 8);
case eGameSetting_Sensitivity_InMenu:
return GameSettingsA[iPad]->ucMenuSensitivity;
case eGameSetting_DisplaySplitscreenGamertags:
return ((GameSettingsA[iPad]->usBitmaskValues & 0x0200) >> 9);
case eGameSetting_Hints:
return ((GameSettingsA[iPad]->usBitmaskValues & 0x0400) >> 10);
case eGameSetting_Autosave: {
unsigned char ucVal =
(GameSettingsA[iPad]->usBitmaskValues & 0x7800) >> 11;
return ucVal;
}
case eGameSetting_Tooltips:
return ((GameSettingsA[iPad]->usBitmaskValues & 0x8000) >> 15);
case eGameSetting_InterfaceOpacity:
return GameSettingsA[iPad]->ucInterfaceOpacity;
case eGameSetting_Clouds:
return (GameSettingsA[iPad]->uiBitmaskValues & GAMESETTING_CLOUDS);
case eGameSetting_Online:
return (GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_ONLINE) >>
1;
case eGameSetting_InviteOnly:
return (GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_INVITEONLY) >>
2;
case eGameSetting_FriendsOfFriends:
return (GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_FRIENDSOFFRIENDS) >>
3;
case eGameSetting_DisplayUpdateMessage:
return (GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_DISPLAYUPDATEMSG) >>
4;
case eGameSetting_BedrockFog:
return (GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_BEDROCKFOG) >>
6;
case eGameSetting_DisplayHUD:
return (GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_DISPLAYHUD) >>
7;
case eGameSetting_DisplayHand:
return (GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_DISPLAYHAND) >>
8;
case eGameSetting_CustomSkinAnim:
return (GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_CUSTOMSKINANIM) >>
9;
case eGameSetting_DeathMessages:
return (GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_DEATHMESSAGES) >>
10;
case eGameSetting_UISize: {
unsigned char ucVal =
(GameSettingsA[iPad]->uiBitmaskValues & GAMESETTING_UISIZE) >>
11;
return ucVal;
}
case eGameSetting_UISizeSplitscreen: {
unsigned char ucVal = (GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_UISIZE_SPLITSCREEN) >>
13;
return ucVal;
}
case eGameSetting_AnimatedCharacter:
return (GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_ANIMATEDCHARACTER) >>
15;
case eGameSetting_PS3_EULA_Read:
return (GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_PS3EULAREAD) >>
16;
case eGameSetting_PSVita_NetworkModeAdhoc:
return (GameSettingsA[iPad]->uiBitmaskValues &
GAMESETTING_PSVITANETWORKMODEADHOC) >>
17;
}
return 0;
}
void GameSettingsManager::checkGameSettingsChanged(bool bOverride5MinuteTimer,
int iPad) {
if (iPad == XUSER_INDEX_ANY) {
for (int i = 0; i < XUSER_MAX_COUNT; i++) {
if (GameSettingsA[i]->bSettingsChanged) {
PlatformProfile.WriteToProfile(i, true, bOverride5MinuteTimer);
GameSettingsA[i]->bSettingsChanged = false;
}
}
} else {
if (GameSettingsA[iPad]->bSettingsChanged) {
PlatformProfile.WriteToProfile(iPad, true, bOverride5MinuteTimer);
GameSettingsA[iPad]->bSettingsChanged = false;
}
}
}
void GameSettingsManager::clearGameSettingsChangedFlag(int iPad) {
GameSettingsA[iPad]->bSettingsChanged = false;
}
#if !defined(_DEBUG_MENUS_ENABLED)
unsigned int GameSettingsManager::getGameSettingsDebugMask(
int iPad, bool bOverridePlayer) {
return 0;
}
void GameSettingsManager::setGameSettingsDebugMask(int iPad,
unsigned int uiVal) {}
void GameSettingsManager::actionDebugMask(int iPad, bool bSetAllClear) {}
#else
unsigned int GameSettingsManager::getGameSettingsDebugMask(
int iPad, bool bOverridePlayer) {
if (iPad == -1) {
iPad = PlatformProfile.GetPrimaryPad();
}
if (iPad < 0) iPad = 0;
std::shared_ptr<Player> player =
Minecraft::GetInstance()->localplayers[iPad];
if (bOverridePlayer || player == nullptr) {
return GameSettingsA[iPad]->uiDebugBitmask;
} else {
return player->GetDebugOptions();
}
}
void GameSettingsManager::setGameSettingsDebugMask(int iPad,
unsigned int uiVal) {
#if !defined(_CONTENT_PACKAGE)
GameSettingsA[iPad]->bSettingsChanged = true;
GameSettingsA[iPad]->uiDebugBitmask = uiVal;
std::shared_ptr<Player> player =
Minecraft::GetInstance()->localplayers[iPad];
if (player) {
Minecraft::GetInstance()->localgameModes[iPad]->handleDebugOptions(
uiVal, player);
}
#endif
}
void GameSettingsManager::actionDebugMask(int iPad, bool bSetAllClear) {
unsigned int ulBitmask = app.GetGameSettingsDebugMask(iPad);
if (bSetAllClear) ulBitmask = 0L;
if (PlatformProfile.GetPrimaryPad() != iPad) return;
for (int i = 0; i < eDebugSetting_Max; i++) {
switch (i) {
case eDebugSetting_LoadSavesFromDisk:
if (ulBitmask & (1 << i)) {
app.SetLoadSavesFromFolderEnabled(true);
} else {
app.SetLoadSavesFromFolderEnabled(false);
}
break;
case eDebugSetting_WriteSavesToDisk:
if (ulBitmask & (1 << i)) {
app.SetWriteSavesToFolderEnabled(true);
} else {
app.SetWriteSavesToFolderEnabled(false);
}
break;
case eDebugSetting_FreezePlayers:
if (ulBitmask & (1 << i)) {
app.SetFreezePlayers(true);
} else {
app.SetFreezePlayers(false);
}
break;
case eDebugSetting_Safearea:
if (ulBitmask & (1 << i)) {
app.ShowSafeArea(true);
} else {
app.ShowSafeArea(false);
}
break;
case eDebugSetting_ShowUIConsole:
if (ulBitmask & (1 << i)) {
ui.ShowUIDebugConsole(true);
} else {
ui.ShowUIDebugConsole(false);
}
break;
case eDebugSetting_ShowUIMarketingGuide:
if (ulBitmask & (1 << i)) {
ui.ShowUIDebugMarketingGuide(true);
} else {
ui.ShowUIDebugMarketingGuide(false);
}
break;
case eDebugSetting_MobsDontAttack:
if (ulBitmask & (1 << i)) {
app.SetMobsDontAttackEnabled(true);
} else {
app.SetMobsDontAttackEnabled(false);
}
break;
case eDebugSetting_UseDpadForDebug:
if (ulBitmask & (1 << i)) {
app.SetUseDPadForDebug(true);
} else {
app.SetUseDPadForDebug(false);
}
break;
case eDebugSetting_MobsDontTick:
if (ulBitmask & (1 << i)) {
app.SetMobsDontTickEnabled(true);
} else {
app.SetMobsDontTickEnabled(false);
}
break;
}
}
}
#endif
void GameSettingsManager::setSpecialTutorialCompletionFlag(int iPad,
int index) {
if (index >= 0 && index < 32 && GameSettingsA[iPad] != nullptr) {
GameSettingsA[iPad]->uiSpecialTutorialBitmask |= (1 << index);
}
}
int GameSettingsManager::displaySavingMessage(
IPlatformStorage::ESavingMessage eVal, int iPad) {
ui.ShowSavingMessage(iPad, eVal);
return 0;
}
void GameSettingsManager::setActionConfirmed(void* param) {
XuiActionParam* actionInfo = (XuiActionParam*)param;
app.SetAction(actionInfo->iPad, actionInfo->action);
}
void GameSettingsManager::handleButtonPresses() {
for (int i = 0; i < 4; i++) {
handleButtonPresses(i);
}
}
void GameSettingsManager::handleButtonPresses(int iPad) {
// Stub - button presses are handled elsewhere now
}
void GameSettingsManager::setGameHostOption(unsigned int& uiHostSettings,
eGameHostOption eVal,
unsigned int uiVal) {
switch (eVal) {
case eGameHostOption_FriendsOfFriends:
if (uiVal != 0) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_FRIENDSOFFRIENDS;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_FRIENDSOFFRIENDS;
}
break;
case eGameHostOption_Difficulty:
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_DIFFICULTY;
uiHostSettings |= (GAME_HOST_OPTION_BITMASK_DIFFICULTY & uiVal);
break;
case eGameHostOption_Gamertags:
if (uiVal != 0) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_GAMERTAGS;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_GAMERTAGS;
}
break;
case eGameHostOption_GameType:
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_GAMETYPE;
uiHostSettings |=
(GAME_HOST_OPTION_BITMASK_GAMETYPE & (uiVal << 4));
break;
case eGameHostOption_LevelType:
if (uiVal != 0) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_LEVELTYPE;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_LEVELTYPE;
}
break;
case eGameHostOption_Structures:
if (uiVal != 0) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_STRUCTURES;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_STRUCTURES;
}
break;
case eGameHostOption_BonusChest:
if (uiVal != 0) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_BONUSCHEST;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_BONUSCHEST;
}
break;
case eGameHostOption_HasBeenInCreative:
if (uiVal != 0) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_BEENINCREATIVE;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_BEENINCREATIVE;
}
break;
case eGameHostOption_PvP:
if (uiVal != 0) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_PVP;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_PVP;
}
break;
case eGameHostOption_TrustPlayers:
if (uiVal != 0) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_TRUSTPLAYERS;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_TRUSTPLAYERS;
}
break;
case eGameHostOption_TNT:
if (uiVal != 0) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_TNT;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_TNT;
}
break;
case eGameHostOption_FireSpreads:
if (uiVal != 0) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_FIRESPREADS;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_FIRESPREADS;
}
break;
case eGameHostOption_CheatsEnabled:
if (uiVal != 0) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_HOSTFLY;
uiHostSettings |= GAME_HOST_OPTION_BITMASK_HOSTHUNGER;
uiHostSettings |= GAME_HOST_OPTION_BITMASK_HOSTINVISIBLE;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_HOSTFLY;
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_HOSTHUNGER;
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_HOSTINVISIBLE;
}
break;
case eGameHostOption_HostCanFly:
if (uiVal != 0) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_HOSTFLY;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_HOSTFLY;
}
break;
case eGameHostOption_HostCanChangeHunger:
if (uiVal != 0) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_HOSTHUNGER;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_HOSTHUNGER;
}
break;
case eGameHostOption_HostCanBeInvisible:
if (uiVal != 0) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_HOSTINVISIBLE;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_HOSTINVISIBLE;
}
break;
case eGameHostOption_BedrockFog:
if (uiVal != 0) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_BEDROCKFOG;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_BEDROCKFOG;
}
break;
case eGameHostOption_DisableSaving:
if (uiVal != 0) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_DISABLESAVE;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_DISABLESAVE;
}
break;
case eGameHostOption_WasntSaveOwner:
if (uiVal != 0) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_NOTOWNER;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_NOTOWNER;
}
break;
case eGameHostOption_MobGriefing:
if (uiVal != 1) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_MOBGRIEFING;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_MOBGRIEFING;
}
break;
case eGameHostOption_KeepInventory:
if (uiVal != 0) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_KEEPINVENTORY;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_KEEPINVENTORY;
}
break;
case eGameHostOption_DoMobSpawning:
if (uiVal != 1) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_DOMOBSPAWNING;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_DOMOBSPAWNING;
}
break;
case eGameHostOption_DoMobLoot:
if (uiVal != 1) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_DOMOBLOOT;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_DOMOBLOOT;
}
break;
case eGameHostOption_DoTileDrops:
if (uiVal != 1) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_DOTILEDROPS;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_DOTILEDROPS;
}
break;
case eGameHostOption_NaturalRegeneration:
if (uiVal != 1) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_NATURALREGEN;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_NATURALREGEN;
}
break;
case eGameHostOption_DoDaylightCycle:
if (uiVal != 1) {
uiHostSettings |= GAME_HOST_OPTION_BITMASK_DODAYLIGHTCYCLE;
} else {
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_DODAYLIGHTCYCLE;
}
break;
case eGameHostOption_WorldSize:
uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_WORLDSIZE;
uiHostSettings |=
(GAME_HOST_OPTION_BITMASK_WORLDSIZE &
(uiVal << GAME_HOST_OPTION_BITMASK_WORLDSIZE_BITSHIFT));
break;
case eGameHostOption_All:
uiHostSettings = uiVal;
break;
default:
break;
}
}
unsigned int GameSettingsManager::getGameHostOption(
unsigned int uiHostSettings, eGameHostOption eVal) {
switch (eVal) {
case eGameHostOption_FriendsOfFriends:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_FRIENDSOFFRIENDS);
case eGameHostOption_Difficulty:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_DIFFICULTY);
case eGameHostOption_Gamertags:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_GAMERTAGS);
case eGameHostOption_GameType:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_GAMETYPE) >> 4;
case eGameHostOption_All:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_ALL);
case eGameHostOption_Tutorial:
return ((uiHostSettings & GAME_HOST_OPTION_BITMASK_GAMERTAGS) |
GAME_HOST_OPTION_BITMASK_TRUSTPLAYERS |
GAME_HOST_OPTION_BITMASK_FIRESPREADS |
GAME_HOST_OPTION_BITMASK_TNT |
GAME_HOST_OPTION_BITMASK_PVP |
GAME_HOST_OPTION_BITMASK_STRUCTURES | 1);
case eGameHostOption_LevelType:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_LEVELTYPE);
case eGameHostOption_Structures:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_STRUCTURES);
case eGameHostOption_BonusChest:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_BONUSCHEST);
case eGameHostOption_HasBeenInCreative:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_BEENINCREATIVE);
case eGameHostOption_PvP:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_PVP);
case eGameHostOption_TrustPlayers:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_TRUSTPLAYERS);
case eGameHostOption_TNT:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_TNT);
case eGameHostOption_FireSpreads:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_FIRESPREADS);
case eGameHostOption_CheatsEnabled:
return (uiHostSettings & (GAME_HOST_OPTION_BITMASK_HOSTFLY |
GAME_HOST_OPTION_BITMASK_HOSTHUNGER |
GAME_HOST_OPTION_BITMASK_HOSTINVISIBLE));
case eGameHostOption_HostCanFly:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_HOSTFLY);
case eGameHostOption_HostCanChangeHunger:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_HOSTHUNGER);
case eGameHostOption_HostCanBeInvisible:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_HOSTINVISIBLE);
case eGameHostOption_BedrockFog:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_BEDROCKFOG);
case eGameHostOption_DisableSaving:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_DISABLESAVE);
case eGameHostOption_WasntSaveOwner:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_NOTOWNER);
case eGameHostOption_WorldSize:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_WORLDSIZE) >>
GAME_HOST_OPTION_BITMASK_WORLDSIZE_BITSHIFT;
case eGameHostOption_MobGriefing:
return !(uiHostSettings & GAME_HOST_OPTION_BITMASK_MOBGRIEFING);
case eGameHostOption_KeepInventory:
return (uiHostSettings & GAME_HOST_OPTION_BITMASK_KEEPINVENTORY);
case eGameHostOption_DoMobSpawning:
return !(uiHostSettings & GAME_HOST_OPTION_BITMASK_DOMOBSPAWNING);
case eGameHostOption_DoMobLoot:
return !(uiHostSettings & GAME_HOST_OPTION_BITMASK_DOMOBLOOT);
case eGameHostOption_DoTileDrops:
return !(uiHostSettings & GAME_HOST_OPTION_BITMASK_DOTILEDROPS);
case eGameHostOption_NaturalRegeneration:
return !(uiHostSettings & GAME_HOST_OPTION_BITMASK_NATURALREGEN);
case eGameHostOption_DoDaylightCycle:
return !(uiHostSettings & GAME_HOST_OPTION_BITMASK_DODAYLIGHTCYCLE);
default:
return 0;
}
return false;
}
bool GameSettingsManager::canRecordStatsAndAchievements() {
bool isTutorial = Minecraft::GetInstance() != nullptr &&
Minecraft::GetInstance()->isTutorial();
return !(app.GetGameHostOption(eGameHostOption_HasBeenInCreative) ||
app.GetGameHostOption(eGameHostOption_HostCanBeInvisible) ||
app.GetGameHostOption(eGameHostOption_HostCanChangeHunger) ||
app.GetGameHostOption(eGameHostOption_HostCanFly) ||
app.GetGameHostOption(eGameHostOption_WasntSaveOwner) ||
!app.GetGameHostOption(eGameHostOption_MobGriefing) ||
app.GetGameHostOption(eGameHostOption_KeepInventory) ||
!app.GetGameHostOption(eGameHostOption_DoMobSpawning) ||
(!app.GetGameHostOption(eGameHostOption_DoDaylightCycle) &&
!isTutorial));
}