/
MapFormatManager.cpp
124 lines (100 loc) · 2.68 KB
/
MapFormatManager.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include "MapFormatManager.h"
#include "itextstream.h"
#include "igame.h"
#include "module/StaticModule.h"
#include "debugging/debugging.h"
#include "string/case_conv.h"
#include "os/path.h"
namespace map
{
void MapFormatManager::registerMapFormat(const std::string& extension, const MapFormatPtr& mapFormat)
{
_mapFormats.insert(std::make_pair(string::to_lower_copy(extension), mapFormat));
}
void MapFormatManager::unregisterMapFormat(const MapFormatPtr& mapFormat)
{
for (auto i = _mapFormats.begin(); i != _mapFormats.end(); )
{
if (i->second == mapFormat)
{
_mapFormats.erase(i++);
}
else
{
++i;
}
}
}
MapFormatPtr MapFormatManager::getMapFormatByName(const std::string& mapFormatName)
{
for (const auto& pair : _mapFormats)
{
if (pair.second->getMapFormatName() == mapFormatName)
{
return pair.second;
}
}
return MapFormatPtr(); // nothing found
}
MapFormatPtr MapFormatManager::getMapFormatForGameType(const std::string& gameType,
const std::string& extension)
{
std::string extLower = string::to_lower_copy(extension);
for (const auto& pair : _mapFormats)
{
if (pair.first == extLower && pair.second->getGameType() == gameType)
{
return pair.second;
}
}
return MapFormatPtr(); // nothing found
}
MapFormatPtr MapFormatManager::getMapFormatForFilename(const std::string& filename)
{
if (!GlobalGameManager().currentGame())
{
return MapFormatPtr();
}
// Look up the module name which loads the given extension
std::string gameType = GlobalGameManager().currentGame()->getKeyValue("type");
return getMapFormatForGameType(gameType, os::getExtension(filename));
}
std::set<MapFormatPtr> MapFormatManager::getAllMapFormats()
{
std::set<MapFormatPtr> set;
for (const auto& fmt : _mapFormats)
{
set.insert(fmt.second);
}
return set;
}
std::set<MapFormatPtr> MapFormatManager::getMapFormatList(const std::string& extension)
{
std::set<MapFormatPtr> list;
std::string extLower = string::to_lower_copy(extension);
for (auto it = _mapFormats.find(extLower);
it != _mapFormats.upper_bound(extLower) && it != _mapFormats.end();
++it)
{
list.insert(it->second);
}
return list;
}
// RegisterableModule implementation
const std::string& MapFormatManager::getName() const
{
static std::string _name(MODULE_MAPFORMATMANAGER);
return _name;
}
const StringSet& MapFormatManager::getDependencies() const
{
static StringSet _dependencies; // no deps
return _dependencies;
}
void MapFormatManager::initialiseModule(const IApplicationContext& ctx)
{
rMessage() << getName() << "::initialiseModule called." << std::endl;
}
// Creates the static module instance
module::StaticModuleRegistration<MapFormatManager> staticMapFormatManagerModule;
}