Files
mcpe/source/client/gui/screens/SavingWorldScreen.cpp

80 lines
1.9 KiB
C++

/********************************************************************
Minecraft: Pocket Edition - Decompilation Project
Copyright (C) 2023 iProgramInCpp
The following code is licensed under the BSD 1 clause license.
SPDX-License-Identifier: BSD-1-Clause
********************************************************************/
#include "SavingWorldScreen.hpp"
#include "RenameMPLevelScreen.hpp"
#include "StartMenuScreen.hpp"
#ifdef ENH_IMPROVED_SAVING
SavingWorldScreen::SavingWorldScreen(bool bCopyMap, Entity *pEnt)
{
m_bCopyMapAtEnd = bCopyMap;
m_timer = 0;
m_pEntityToDeleteAfterSave = pEnt;
}
void SavingWorldScreen::render(int mouseX, int mouseY, float f)
{
renderDirtBackground(0);
//! why not use the screen stuff
int x_width = int(Minecraft::width * m_pMinecraft->m_pGui->scale);
int x_height = int(Minecraft::height * m_pMinecraft->m_pGui->scale);
int yPos = x_height / 2;
int width = m_pFont->width("Saving chunks");
m_pFont->drawShadow("Saving chunks", (x_width - width) / 2, yPos, 0xFFFFFF);
}
void SavingWorldScreen::tick()
{
if (m_timer < 0)
return;
m_timer++;
if (m_timer >= 5)
{
m_timer = -1;
Level* pLevel = m_pMinecraft->m_pLevel;
if (pLevel)
{
pLevel->saveUnsavedChunks();
pLevel->saveLevelData();
pLevel->savePlayerData();
LevelStorage* pStorage = pLevel->getLevelStorage();
SAFE_DELETE(pStorage);
SAFE_DELETE(pLevel);
m_pMinecraft->m_pLevel = nullptr;
}
// this is safe to do, since on destruction, nothing accesses the parent level or anything
SAFE_DELETE(m_pEntityToDeleteAfterSave);
m_pMinecraft->m_pMobPersp = m_pMinecraft->m_pLocalPlayer = nullptr;
m_pMinecraft->m_bUsingScreen = true;
if (m_bCopyMapAtEnd)
m_pMinecraft->setScreen(new RenameMPLevelScreen("_LastJoinedServer"));
else
m_pMinecraft->setScreen(new StartMenuScreen);
m_pMinecraft->m_bUsingScreen = false;
m_pMinecraft->field_288 = false;
}
}
#endif