Skip to content

Commit

Permalink
#5231: Refactor StartupMapLoader into a standalone module in the UI b…
Browse files Browse the repository at this point in the history
…inary.
  • Loading branch information
codereader committed Jun 1, 2020
1 parent 1a565a0 commit 2e1d3ea
Show file tree
Hide file tree
Showing 8 changed files with 82 additions and 48 deletions.
Expand Up @@ -6,25 +6,15 @@
#include "iregistry.h"
#include "igame.h"
#include "iradiant.h"
#include "Map.h"
#include "ui/mru/MRU.h"
#include "module/StaticModule.h"

#include "os/path.h"
#include "os/file.h"

namespace map
{

StartupMapLoader::StartupMapLoader()
{
GlobalRadiant().signal_radiantStarted().connect(
sigc::mem_fun(*this, &StartupMapLoader::onRadiantStartup)
);
GlobalRadiant().signal_radiantShutdown().connect(
sigc::mem_fun(*this, &StartupMapLoader::onRadiantShutdown)
);
}

void StartupMapLoader::onRadiantStartup()
{
std::string mapToLoad = "";
Expand All @@ -35,7 +25,8 @@ void StartupMapLoader::onRadiantStartup()

for (const std::string& candidate : args)
{
if (os::getExtension(candidate) != "map") continue;
if (os::getExtension(candidate) != "map" &&
os::getExtension(candidate) != "mapx") continue;

// We have a map file, check if it exists (and where)

Expand Down Expand Up @@ -70,10 +61,6 @@ void StartupMapLoader::onRadiantStartup()
{
loadMapSafe(lastMap);
}
else
{
GlobalMap().createNew();
}
}
}

Expand All @@ -82,14 +69,14 @@ void StartupMapLoader::loadMapSafe(const std::string& mapToLoad)
// Check if we have a valid openGL context, otherwise postpone the load
if (GlobalOpenGL().wxContextValid())
{
GlobalMap().load(mapToLoad);
GlobalCommandSystem().executeCommand("OpenMap", mapToLoad);
return;
}

// No valid context, subscribe to the extensionsInitialised signal
GlobalRenderSystem().signal_extensionsInitialised().connect([mapToLoad]()
{
GlobalMap().load(mapToLoad);
GlobalCommandSystem().executeCommand("OpenMap", mapToLoad);
});
}

Expand All @@ -98,4 +85,36 @@ void StartupMapLoader::onRadiantShutdown()
GlobalMRU().saveRecentFiles();
}

const std::string& StartupMapLoader::getName() const
{
static std::string _name("StartupMapLoader");
return _name;
}

const StringSet& StartupMapLoader::getDependencies() const
{
static StringSet _dependencies;

if (_dependencies.empty())
{
_dependencies.insert(MODULE_RADIANT_APP);
}

return _dependencies;
}

void StartupMapLoader::initialiseModule(const ApplicationContext& ctx)
{
rMessage() << getName() << "::initialiseModule called." << std::endl;

GlobalRadiant().signal_radiantStarted().connect(
sigc::mem_fun(*this, &StartupMapLoader::onRadiantStartup)
);
GlobalRadiant().signal_radiantShutdown().connect(
sigc::mem_fun(*this, &StartupMapLoader::onRadiantShutdown)
);
}

module::StaticModule<StartupMapLoader> startupMapLoader;

} // namespace map
@@ -1,25 +1,28 @@
#pragma once

#include "iradiant.h"
#include "imodule.h"
#include <memory>

namespace map {
namespace map
{

class StartupMapLoader :
public sigc::trackable
class StartupMapLoader :
public RegisterableModule
{
public:
StartupMapLoader();
const std::string& getName() const override;
const StringSet& getDependencies() const override;
void initialiseModule(const ApplicationContext& ctx) override;

private:
// This gets called as soon as the mainframe starts up
void onRadiantStartup();

// Called when the mainframe shuts down
void onRadiantShutdown();

private:
void loadMapSafe(const std::string& map);
};
typedef std::shared_ptr<StartupMapLoader> StartupMapLoaderPtr;

} // namespace map
21 changes: 12 additions & 9 deletions radiantcore/map/Map.cpp
Expand Up @@ -31,19 +31,16 @@
#include "wxutil/ScopeTimer.h"

#include "brush/BrushModule.h"
#include "xyview/GlobalXYWnd.h"
#include "camera/GlobalCamera.h"
#include "scene/BasicRootNode.h"
#include "map/MapFileManager.h"
#include "map/MapPositionManager.h"
#include "map/StartupMapLoader.h"
#include "map/MapResource.h"
#include "map/algorithm/Import.h"
#include "map/algorithm/Export.h"
#include "scene/Traverse.h"
#include "map/algorithm/MapExporter.h"
#include "model/ModelExporter.h"
#include "model/ModelScalePreserver.h"
#include "model/export/ModelExporter.h"
#include "model/export/ModelScalePreserver.h"
#include "map/algorithm/Skins.h"
#include "ui/mru/MRU.h"
#include "ui/mainframe/ScreenUpdateBlocker.h"
Expand Down Expand Up @@ -638,7 +635,7 @@ void Map::saveMapCopyAs(const cmd::ArgumentList& args)
void Map::registerCommands()
{
GlobalCommandSystem().addCommand("NewMap", Map::newMap);
GlobalCommandSystem().addCommand("OpenMap", Map::openMap);
GlobalCommandSystem().addCommand("OpenMap", Map::openMap, { cmd::ARGTYPE_STRING | cmd::ARGTYPE_OPTIONAL });
GlobalCommandSystem().addCommand("ImportMap", Map::importMap);
GlobalCommandSystem().addCommand("LoadPrefab", Map::loadPrefab);
GlobalCommandSystem().addCommand("SaveSelectedAsPrefab", Map::saveSelectedAsPrefab);
Expand Down Expand Up @@ -671,10 +668,16 @@ void Map::openMap(const cmd::ArgumentList& args)
if (!GlobalMap().askForSave(_("Open Map")))
return;

// Get the map file name to load
MapFileSelection fileInfo = MapFileManager::getMapFileSelection(true, _("Open map"), filetype::TYPE_MAP);
std::string fullPath;

if (!fileInfo.fullPath.empty())
if (args.empty())
{
// No arguments passed, get the map file name to load
MapFileSelection fileInfo = MapFileManager::getMapFileSelection(true, _("Open map"), filetype::TYPE_MAP);
fullPath = fileInfo.fullPath;
}

if (!fullPath.empty())
{
GlobalMRU().insert(fileInfo.fullPath);

Expand Down
20 changes: 13 additions & 7 deletions radiantcore/map/MapPositionManager.cpp
Expand Up @@ -2,6 +2,7 @@

#include "maplib.h"
#include "ientity.h"
#include "icamera.h"
#include "gamelib.h"
#include "ieventmanager.h"
#include "iregistry.h"
Expand All @@ -12,8 +13,6 @@
#include "entitylib.h"
#include <functional>

#include "camera/GlobalCamera.h"
#include "xyview/GlobalXYWnd.h"
#include "map/Map.h"

namespace map
Expand Down Expand Up @@ -172,15 +171,22 @@ void MapPositionManager::removeLegacyCameraPosition()

void MapPositionManager::saveLastCameraPosition(const scene::IMapRootNodePtr& root)
{
auto camWnd = GlobalCamera().getActiveCamWnd();

if (!root || !camWnd)
if (!root)
{
return;
}

root->setProperty(LAST_CAM_POSITION_KEY, string::to_string(camWnd->getCameraOrigin()));
root->setProperty(LAST_CAM_ANGLE_KEY, string::to_string(camWnd->getCameraAngles()));
try
{
auto& camView = GlobalCameraView().getActiveView();

root->setProperty(LAST_CAM_POSITION_KEY, string::to_string(camView.getCameraOrigin()));
root->setProperty(LAST_CAM_ANGLE_KEY, string::to_string(camView.getCameraAngles()));
}
catch (const std::runtime_error& ex)
{
rError() << "Cannot save last camera position: " << ex.what() << std::endl;
}
}

void MapPositionManager::gotoLastCameraPosition()
Expand Down
2 changes: 2 additions & 0 deletions tools/msvc/DarkRadiant.vcxproj
Expand Up @@ -204,6 +204,7 @@
<ClCompile Include="..\..\radiant\eventmanager\Toggle.cpp" />
<ClCompile Include="..\..\radiant\eventmanager\WidgetToggle.cpp" />
<ClCompile Include="..\..\radiant\main.cpp" />
<ClCompile Include="..\..\radiant\map\StartupMapLoader.cpp" />
<ClCompile Include="..\..\radiant\precompiled.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">precompiled.h</PrecompiledHeaderFile>
Expand Down Expand Up @@ -378,6 +379,7 @@
<ClInclude Include="..\..\radiant\eventmanager\Statement.h" />
<ClInclude Include="..\..\radiant\eventmanager\Toggle.h" />
<ClInclude Include="..\..\radiant\eventmanager\WidgetToggle.h" />
<ClInclude Include="..\..\radiant\map\StartupMapLoader.h" />
<ClInclude Include="..\..\radiant\precompiled.h" />
<ClInclude Include="..\..\radiant\RadiantApp.h" />
<ClInclude Include="..\..\radiant\RadiantModule.h" />
Expand Down
9 changes: 9 additions & 0 deletions tools/msvc/DarkRadiant.vcxproj.filters
Expand Up @@ -158,6 +158,9 @@
<Filter Include="src\ui\selectionset">
<UniqueIdentifier>{44f6abf2-2b6d-46ce-8c41-291f862855f6}</UniqueIdentifier>
</Filter>
<Filter Include="src\map">
<UniqueIdentifier>{8d1f0555-13d0-4735-ad5e-26bdf8578bc6}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\radiant\main.cpp">
Expand Down Expand Up @@ -628,6 +631,9 @@
<ClCompile Include="..\..\radiant\ui\modelexport\ExportCollisionModelDialog.cpp">
<Filter>src\ui\modelexport</Filter>
</ClCompile>
<ClCompile Include="..\..\radiant\map\StartupMapLoader.cpp">
<Filter>src\map</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\radiant\RadiantModule.h">
Expand Down Expand Up @@ -1212,6 +1218,9 @@
<ClInclude Include="..\..\radiant\ui\modelexport\ExportCollisionModelDialog.h">
<Filter>src\ui\modelexport</Filter>
</ClInclude>
<ClInclude Include="..\..\radiant\map\StartupMapLoader.h">
<Filter>src\map</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\radiant\darkradiant.rc" />
Expand Down
2 changes: 0 additions & 2 deletions tools/msvc/DarkRadiantCore.vcxproj
Expand Up @@ -140,7 +140,6 @@
<ClCompile Include="..\..\radiantcore\map\RegionManager.cpp" />
<ClCompile Include="..\..\radiantcore\map\RenderableAasFile.cpp" />
<ClCompile Include="..\..\radiantcore\map\RootNode.cpp" />
<ClCompile Include="..\..\radiantcore\map\StartupMapLoader.cpp" />
<ClCompile Include="..\..\radiantcore\model\export\AseExporter.cpp" />
<ClCompile Include="..\..\radiantcore\model\export\Lwo2Chunk.cpp" />
<ClCompile Include="..\..\radiantcore\model\export\Lwo2Exporter.cpp" />
Expand Down Expand Up @@ -855,7 +854,6 @@
<ClInclude Include="..\..\radiantcore\map\RenderableAasFile.h" />
<ClInclude Include="..\..\radiantcore\map\RootNode.h" />
<ClInclude Include="..\..\radiantcore\map\ShaderBreakdown.h" />
<ClInclude Include="..\..\radiantcore\map\StartupMapLoader.h" />
<ClInclude Include="..\..\radiantcore\model\export\AseExporter.h" />
<ClInclude Include="..\..\radiantcore\model\export\Lwo2Chunk.h" />
<ClInclude Include="..\..\radiantcore\model\export\Lwo2Exporter.h" />
Expand Down
6 changes: 0 additions & 6 deletions tools/msvc/DarkRadiantCore.vcxproj.filters
Expand Up @@ -991,9 +991,6 @@
<ClCompile Include="..\..\radiantcore\map\RootNode.cpp">
<Filter>src\map</Filter>
</ClCompile>
<ClCompile Include="..\..\radiantcore\map\StartupMapLoader.cpp">
<Filter>src\map</Filter>
</ClCompile>
<ClCompile Include="..\..\radiantcore\model\export\ModelExporter.cpp">
<Filter>src\model\export</Filter>
</ClCompile>
Expand Down Expand Up @@ -2061,9 +2058,6 @@
<ClInclude Include="..\..\radiantcore\map\ShaderBreakdown.h">
<Filter>src\map</Filter>
</ClInclude>
<ClInclude Include="..\..\radiantcore\map\StartupMapLoader.h">
<Filter>src\map</Filter>
</ClInclude>
<ClInclude Include="..\..\radiantcore\model\export\ModelExporter.h">
<Filter>src\model\export</Filter>
</ClInclude>
Expand Down

0 comments on commit 2e1d3ea

Please sign in to comment.