4jcraft/Minecraft.Client/Platform/Linux/Linux_App.cpp
ViniciusCruzMoura 580b947c6e UIScene_MainMenu: Enable the Exit Game Button Behaviour
i noticed that the exit game button on the menu screen wasn't working,
so i went ahead and enabled it and added the behavior to close the game.
i added a Close method in the 4J_Render class and made a tweak to the _xbox check.
the catch is that it uses the xbox text for the confirmation button,
so i’m not sure if it’s the best approach, but it does work fine for me

Signed-off-by: ViniciusCruzMoura <contato.cruz.moura@gmail.com>
2026-03-17 02:08:16 -04:00

135 lines
5.1 KiB
C++

#include "../../../Minecraft.World/Platform/stdafx.h"
#include "../Common/Consoles_App.h"
#include "../../Player/User.h"
#include "../../Minecraft.h"
#include "../../MinecraftServer.h"
#include "../../Network/PlayerList.h"
#include "../../Player/ServerPlayer.h"
#include "../../../Minecraft.World/Level/Level.h"
#include "../../../Minecraft.World/Level/Storage/LevelSettings.h"
#include "../../../Minecraft.World/WorldGen/Biomes/BiomeSource.h"
#include "../../../Minecraft.World/Level/Storage/LevelType.h"
#include "Linux_App.h"
CConsoleMinecraftApp app;
#define CONTEXT_GAME_STATE 0
CConsoleMinecraftApp::CConsoleMinecraftApp() : CMinecraftApp() {}
void CConsoleMinecraftApp::SetRichPresenceContext(int iPad, int contextId) {
ProfileManager.SetRichPresenceContextValue(iPad, CONTEXT_GAME_STATE,
contextId);
}
void CConsoleMinecraftApp::StoreLaunchData() {}
void CConsoleMinecraftApp::ExitGame() {
app.DebugPrintf("Linux_App CConsoleMinecraftApp::ExitGame AFTER START\n");
RenderManager.Close();
}
void CConsoleMinecraftApp::FatalLoadError() {
app.DebugPrintf(
"CConsoleMinecraftApp::FatalLoadError - asserting 0 and dying...\n");
assert(0);
}
void CConsoleMinecraftApp::CaptureSaveThumbnail() {}
void CConsoleMinecraftApp::GetSaveThumbnail(std::uint8_t** thumbnailData,
unsigned int* thumbnailSize) {}
void CConsoleMinecraftApp::ReleaseSaveThumbnail() {}
void CConsoleMinecraftApp::GetScreenshot(int iPad,
std::uint8_t** screenshotData,
unsigned int* screenshotSize) {}
void CConsoleMinecraftApp::TemporaryCreateGameStart() {
//////////////////////////////////////////////////////////////////////////////////////////////
///From CScene_Main::OnInit
app.setLevelGenerationOptions(NULL);
// From CScene_Main::RunPlayGame
Minecraft* pMinecraft = Minecraft::GetInstance();
app.ReleaseSaveThumbnail();
ProfileManager.SetLockedProfile(0);
pMinecraft->user->name = L"Windows";
app.ApplyGameSettingsChanged(0);
//////////////////////////////////////////////////////////////////////////////////////////////
///From CScene_MultiGameJoinLoad::OnInit
MinecraftServer::resetFlags();
// From CScene_MultiGameJoinLoad::OnNotifyPressEx
app.SetTutorialMode(false);
app.SetCorruptSaveDeleted(false);
//////////////////////////////////////////////////////////////////////////////////////////////
///From CScene_MultiGameCreate::CreateGame
app.ClearTerrainFeaturePosition();
std::wstring wWorldName = L"TestWorld";
StorageManager.ResetSaveData();
StorageManager.SetSaveTitle(wWorldName.c_str());
bool isFlat = false;
__int64 seedValue =
0; // BiomeSource::findSeed(isFlat?LevelType::lvl_flat:LevelType::lvl_normal);
// // 4J - was (new Random())->nextLong() - now trying to actually
// find a seed to suit our requirements
NetworkGameInitData* param = new NetworkGameInitData();
param->seed = seedValue;
param->saveData = NULL;
app.SetGameHostOption(eGameHostOption_Difficulty, 0);
app.SetGameHostOption(eGameHostOption_FriendsOfFriends, 0);
app.SetGameHostOption(eGameHostOption_Gamertags, 1);
app.SetGameHostOption(eGameHostOption_BedrockFog, 1);
app.SetGameHostOption(
eGameHostOption_GameType,
GameType::CREATIVE->getId()); // LevelSettings::GAMETYPE_SURVIVAL
app.SetGameHostOption(eGameHostOption_LevelType, 0);
app.SetGameHostOption(eGameHostOption_Structures, 1);
app.SetGameHostOption(eGameHostOption_BonusChest, 0);
app.SetGameHostOption(eGameHostOption_PvP, 1);
app.SetGameHostOption(eGameHostOption_TrustPlayers, 1);
app.SetGameHostOption(eGameHostOption_FireSpreads, 1);
app.SetGameHostOption(eGameHostOption_TNT, 1);
app.SetGameHostOption(eGameHostOption_HostCanFly, 1);
app.SetGameHostOption(eGameHostOption_HostCanChangeHunger, 1);
app.SetGameHostOption(eGameHostOption_HostCanBeInvisible, 1);
param->settings = app.GetGameHostOption(eGameHostOption_All);
g_NetworkManager.FakeLocalPlayerJoined();
LoadingInputParams* loadingParams = new LoadingInputParams();
loadingParams->func = &CGameNetworkManager::RunNetworkGameThreadProc;
loadingParams->lpParam = (LPVOID)param;
// Reset the autosave time
app.SetAutosaveTimerTime();
C4JThread* thread = new C4JThread(loadingParams->func,
loadingParams->lpParam, "RunNetworkGame");
thread->Run();
}
int CConsoleMinecraftApp::GetLocalTMSFileIndex(WCHAR* wchTMSFile,
bool bFilenameIncludesExtension,
eFileExtensionType eEXT) {
return -1;
}
int CConsoleMinecraftApp::LoadLocalTMSFile(WCHAR* wchTMSFile) { return -1; }
int CConsoleMinecraftApp::LoadLocalTMSFile(WCHAR* wchTMSFile,
eFileExtensionType eExt) {
return -1;
}
void CConsoleMinecraftApp::FreeLocalTMSFiles(eTMSFileType eType) {}