Refresh world list to show newly created worlds #176

This commit is contained in:
Chase Cooper 2026-03-03 23:56:52 -05:00
parent f870ef2a10
commit fdcf4622c9
9 changed files with 66 additions and 73 deletions

View file

@ -370,11 +370,9 @@ void UIScene_InGameSaveManagementMenu::GetSaveInfo( )
m_iSaveInfoC=0; m_iSaveInfoC=0;
m_controlSavesTimer.setVisible(true); m_controlSavesTimer.setVisible(true);
m_pSaveDetails=StorageManager.ReturnSavesInfo(); // Always refresh the saves list to pick up newly created worlds
if(m_pSaveDetails==NULL)
{
C4JStorage::ESaveGameState eSGIStatus= StorageManager.GetSavesInfo(m_iPad,NULL,this,"save"); C4JStorage::ESaveGameState eSGIStatus= StorageManager.GetSavesInfo(m_iPad,NULL,this,"save");
} m_pSaveDetails = nullptr; // Force refresh
return; return;

View file

@ -833,11 +833,9 @@ void UIScene_LoadOrJoinMenu::GetSaveInfo()
{ {
#ifdef __ORBIS__ #ifdef __ORBIS__
// We need to make sure this is non-null so that we have an idea of free space // We need to make sure this is non-null so that we have an idea of free space
m_pSaveDetails=StorageManager.ReturnSavesInfo(); // Always refresh the saves list to pick up newly created worlds
if(m_pSaveDetails==NULL)
{
C4JStorage::ESaveGameState eSGIStatus= StorageManager.GetSavesInfo(m_iPad,NULL,this,"save"); C4JStorage::ESaveGameState eSGIStatus= StorageManager.GetSavesInfo(m_iPad,NULL,this,"save");
} m_pSaveDetails = NULL; // Force refresh
#endif #endif
uiSaveC = 0; uiSaveC = 0;
@ -882,11 +880,9 @@ void UIScene_LoadOrJoinMenu::GetSaveInfo()
m_iSaveInfoC=0; m_iSaveInfoC=0;
m_controlSavesTimer.setVisible(true); m_controlSavesTimer.setVisible(true);
m_pSaveDetails=StorageManager.ReturnSavesInfo(); // Always refresh the saves list to pick up newly created worlds
if(m_pSaveDetails==NULL)
{
C4JStorage::ESaveGameState eSGIStatus= StorageManager.GetSavesInfo(m_iPad,NULL,this,"save"); C4JStorage::ESaveGameState eSGIStatus= StorageManager.GetSavesInfo(m_iPad,NULL,this,"save");
} m_pSaveDetails = NULL; // Force refresh
#if TO_BE_IMPLEMENTED #if TO_BE_IMPLEMENTED
if(eSGIStatus==C4JStorage::ESGIStatus_NoSaves) if(eSGIStatus==C4JStorage::ESGIStatus_NoSaves)

View file

@ -44,18 +44,17 @@ void SelectWorldScreen::loadLevelList()
{ {
LevelStorageSource *levelSource = minecraft->getLevelSource(); LevelStorageSource *levelSource = minecraft->getLevelSource();
levelList = levelSource->getLevelList(); levelList = levelSource->getLevelList();
// Collections.sort(levelList); // 4J - TODO - get sort functor etc.
selectedWorld = -1; selectedWorld = -1;
} }
wstring SelectWorldScreen::getWorldId(int id) wstring SelectWorldScreen::getWorldId(int id)
{ {
return levelList->at(id)->getLevelId(); return levelList.at(id)->getLevelId();
} }
wstring SelectWorldScreen::getWorldName(int id) wstring SelectWorldScreen::getWorldName(int id)
{ {
wstring levelName = levelList->at(id)->getLevelName(); wstring levelName = levelList.at(id)->getLevelName();
if ( levelName.length() == 0 ) if ( levelName.length() == 0 )
{ {
@ -80,6 +79,9 @@ void SelectWorldScreen::postInit()
deleteButton->active = false; deleteButton->active = false;
renameButton->active = false; renameButton->active = false;
// Refresh the world list in case new worlds were created
loadLevelList();
} }
void SelectWorldScreen::buttonClicked(Button *button) void SelectWorldScreen::buttonClicked(Button *button)
@ -190,7 +192,7 @@ void SelectWorldScreen::render(int xm, int ym, float a)
static bool forceCreateLevel = false; static bool forceCreateLevel = false;
if( count++ >= 100 ) if( count++ >= 100 )
{ {
if( !forceCreateLevel && levelList->size() > 0 ) if( !forceCreateLevel && levelList.size() > 0 )
{ {
// 4J Stu - For some obscures reason the "delete" button is called "renameButton" and vice versa. // 4J Stu - For some obscures reason the "delete" button is called "renameButton" and vice versa.
//if( levelList->size() > 2 && deleteButton->active ) //if( levelList->size() > 2 && deleteButton->active )
@ -200,7 +202,7 @@ void SelectWorldScreen::render(int xm, int ym, float a)
// buttonClicked(deleteButton); // buttonClicked(deleteButton);
//} //}
//else //else
if( levelList->size() > 1 && renameButton->active ) if( levelList.size() > 1 && renameButton->active )
{ {
this->selectedWorld = 1; this->selectedWorld = 1;
count = 0; count = 0;
@ -235,7 +237,7 @@ SelectWorldScreen::WorldSelectionList::WorldSelectionList(SelectWorldScreen *sws
int SelectWorldScreen::WorldSelectionList::getNumberOfItems() int SelectWorldScreen::WorldSelectionList::getNumberOfItems()
{ {
return (int)this->parent->levelList->size(); return static_cast<int>(this->parent->levelList.size());
} }
void SelectWorldScreen::WorldSelectionList::selectItem(int item, bool doubleClick) void SelectWorldScreen::WorldSelectionList::selectItem(int item, bool doubleClick)
@ -259,7 +261,7 @@ bool SelectWorldScreen::WorldSelectionList::isSelectedItem(int item)
int SelectWorldScreen::WorldSelectionList::getMaxPosition() int SelectWorldScreen::WorldSelectionList::getMaxPosition()
{ {
return (int)parent->levelList->size() * 36; return static_cast<int>(parent->levelList.size()) * 36;
} }
void SelectWorldScreen::WorldSelectionList::renderBackground() void SelectWorldScreen::WorldSelectionList::renderBackground()
@ -269,7 +271,7 @@ void SelectWorldScreen::WorldSelectionList::renderBackground()
void SelectWorldScreen::WorldSelectionList::renderItem(int i, int x, int y, int h, Tesselator *t) void SelectWorldScreen::WorldSelectionList::renderItem(int i, int x, int y, int h, Tesselator *t)
{ {
LevelSummary *levelSummary = parent->levelList->at(i); LevelSummary *levelSummary = parent->levelList.at(i).get();
wstring name = levelSummary->getLevelName(); wstring name = levelSummary->getLevelName();
if (name.length()==0) if (name.length()==0)

View file

@ -29,7 +29,7 @@ protected:
private: private:
bool done; bool done;
int selectedWorld; int selectedWorld;
vector<LevelSummary *> *levelList; vector<shared_ptr<LevelSummary>> levelList;
WorldSelectionList *worldSelectionList; WorldSelectionList *worldSelectionList;
wstring worldLang; wstring worldLang;
wstring conversionLang; wstring conversionLang;

View file

@ -22,22 +22,9 @@ wstring DirectoryLevelStorageSource::getName()
return L"Old Format"; return L"Old Format";
} }
vector<LevelSummary *> *DirectoryLevelStorageSource::getLevelList() vector<shared_ptr<LevelSummary>> DirectoryLevelStorageSource::getLevelList()
{ {
// 4J Stu - We don't use directory list with the Xbox save locations vector<shared_ptr<LevelSummary>> levels;
vector<LevelSummary *> *levels = new vector<LevelSummary *>;
#if 0
for (int i = 0; i < 5; i++)
{
wstring levelId = wstring(L"World").append( _toString( (i+1) ) );
LevelData *levelData = getDataTagFor(saveFile, levelId);
if (levelData != NULL)
{
levels->push_back(new LevelSummary(levelId, L"", levelData->getLastPlayed(), levelData->getSizeOnDisk(), levelData.getGameType(), false, levelData->isHardcore()));
}
}
#endif
return levels; return levels;
} }

View file

@ -16,7 +16,7 @@ protected:
public: public:
DirectoryLevelStorageSource(const File dir); DirectoryLevelStorageSource(const File dir);
virtual wstring getName(); virtual wstring getName();
virtual vector<LevelSummary *> *getLevelList(); virtual vector<shared_ptr<LevelSummary>> getLevelList();
virtual void clearAll(); virtual void clearAll();
virtual LevelData *getDataTagFor(ConsoleSaveFile *saveFile, const wstring& levelId); virtual LevelData *getDataTagFor(ConsoleSaveFile *saveFile, const wstring& levelId);
virtual void renameLevel(const wstring& levelId, const wstring& newLevelName); virtual void renameLevel(const wstring& levelId, const wstring& newLevelName);

View file

@ -14,7 +14,7 @@ class LevelStorageSource
public: public:
virtual wstring getName() = 0; virtual wstring getName() = 0;
virtual shared_ptr<LevelStorage> selectLevel(ConsoleSaveFile *saveFile, const wstring& levelId, bool createPlayerDir) = 0; virtual shared_ptr<LevelStorage> selectLevel(ConsoleSaveFile *saveFile, const wstring& levelId, bool createPlayerDir) = 0;
virtual vector<LevelSummary *> *getLevelList() = 0; virtual vector<shared_ptr<LevelSummary>> getLevelList() = 0;
virtual void clearAll() = 0; virtual void clearAll() = 0;
virtual LevelData *getDataTagFor(ConsoleSaveFile *saveFile, const wstring& levelId) = 0; virtual LevelData *getDataTagFor(ConsoleSaveFile *saveFile, const wstring& levelId) = 0;

View file

@ -12,6 +12,7 @@
#include "McRegionLevelStorage.h" #include "McRegionLevelStorage.h"
#include "File.h" #include "File.h"
#include "LevelData.h" #include "LevelData.h"
#include "LevelSettings.h"
#include "McRegionLevelStorageSource.h" #include "McRegionLevelStorageSource.h"
#include "ConsoleSaveFileIO.h" #include "ConsoleSaveFileIO.h"
@ -32,41 +33,50 @@ wstring McRegionLevelStorageSource::getName()
return L"Scaevolus' McRegion"; return L"Scaevolus' McRegion";
} }
vector<LevelSummary *> *McRegionLevelStorageSource::getLevelList() vector<shared_ptr<LevelSummary>> McRegionLevelStorageSource::getLevelList()
{ {
// 4J Stu - We don't need to do directory lookups with the xbox save files vector<shared_ptr<LevelSummary>> levels;
vector<LevelSummary *> *levels = new vector<LevelSummary *>;
#if 0 const unique_ptr<vector<File*>> subFolders(baseDir.listFiles());
vector<File *> *subFolders = baseDir.listFiles(); if (subFolders)
File *file;
AUTO_VAR(itEnd, subFolders->end());
for (AUTO_VAR(it, subFolders->begin()); it != itEnd; it++)
{ {
file = *it; //subFolders->at(i); const auto itEnd = subFolders->end();
for (auto it = subFolders->begin(); it != itEnd; ++it)
{
const File* file = *it;
if (file->isDirectory()) if (file->isDirectory())
{
continue; continue;
}
wstring levelId = file->getName(); wstring levelId = file->getName();
LevelData *levelData = getDataTagFor(levelId); shared_ptr<LevelData> levelData(getDataTagFor(nullptr, levelId));
if (levelData != NULL) if (levelData)
{ {
bool requiresConversion = levelData->getVersion() != McRegionLevelStorage::MCREGION_VERSION_ID; bool requiresConversion = levelData->getVersion() != McRegionLevelStorage::MCREGION_VERSION_ID;
wstring levelName = levelData->getLevelName(); wstring levelName = levelData->getLevelName();
if (levelName.empty()) // 4J Jev TODO: levelName can't be NULL? if (levelName == NULL || isEmpty(levelName)) if (levelName.empty())
{
levelName = levelId; levelName = levelId;
}
// long size = getLevelSize(folder);
long size = 0; long size = 0;
levels->push_back(new LevelSummary(levelId, levelName, levelData->getLastPlayed(), size, requiresConversion, levelData->isHardcore()));
GameType* gameType = levelData->getGameType();
if (gameType == nullptr)
gameType = GameType::SURVIVAL;
levels.push_back(make_shared<LevelSummary>(
levelId,
levelName,
levelData->getLastPlayed(),
size,
gameType,
requiresConversion,
levelData->isHardcore(),
false));
}
} }
} }
#endif
return levels; return levels;
} }

View file

@ -15,7 +15,7 @@ public:
McRegionLevelStorageSource(File dir); McRegionLevelStorageSource(File dir);
virtual wstring getName(); virtual wstring getName();
virtual vector<LevelSummary *> *getLevelList(); virtual vector<shared_ptr<LevelSummary>> getLevelList();
virtual void clearAll(); virtual void clearAll();
virtual shared_ptr<LevelStorage> selectLevel(ConsoleSaveFile *saveFile, const wstring& levelId, bool createPlayerDir); virtual shared_ptr<LevelStorage> selectLevel(ConsoleSaveFile *saveFile, const wstring& levelId, bool createPlayerDir);
virtual bool isConvertible(ConsoleSaveFile *saveFile, const wstring& levelId); virtual bool isConvertible(ConsoleSaveFile *saveFile, const wstring& levelId);