~widelands-dev/widelands/workarea-fixes

« back to all changes in this revision

Viewing changes to src/map_io/world_legacy_lookup_table.cc

  • Committer: Nordfriese
  • Date: 2019-08-11 10:53:14 UTC
  • mfrom: (9129.1.47 trunk)
  • Revision ID: nordfriese-20190811105314-ex9xogd4cf5uwuy4
Merged trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
        // Implements OneWorldLegacyLookupTable.
34
34
        std::string lookup_resource(const std::string& resource) const override;
35
35
        std::string lookup_terrain(const std::string& terrain) const override;
36
 
        std::string lookup_critter(const std::string& critter) const override;
 
36
        std::string lookup_critter(const std::string& critter, uint16_t packet_version) const override;
37
37
        std::string lookup_immovable(const std::string& immovable) const override;
38
38
 
39
39
private:
 
40
        // Old name, <packet version when it got changed, new name>
 
41
        const std::map<std::string, std::map<uint16_t, std::string>> critters_;
40
42
        const std::map<std::string, std::string> immovables_;
41
43
        const std::map<std::string, std::string> resources_;
42
44
        const std::map<std::string, std::string> terrains_;
43
45
};
44
46
 
45
47
PostOneWorldLegacyLookupTable::PostOneWorldLegacyLookupTable() :
 
48
critters_
 
49
{
 
50
        // We need to bump the packet version in Critter every time we rename a critter.
 
51
        // Also, don't forget to edit the OneWorldLegacyLookupTable! You can look up which world had which units in Build 18.
 
52
        {"elk", {{2, "moose"}}},
 
53
},
46
54
immovables_
47
55
{
48
56
        {"blackland_stones1", "blackland_rocks1"},
113
121
        return i->second;
114
122
}
115
123
 
116
 
std::string PostOneWorldLegacyLookupTable::lookup_critter(const std::string& critter) const {
117
 
        return critter;
 
124
std::string PostOneWorldLegacyLookupTable::lookup_critter(const std::string& critter,
 
125
                                                          uint16_t packet_version) const {
 
126
        std::string result = critter;
 
127
        if (critters_.count(critter) == 1) {
 
128
                for (const auto& candidate : critters_.at(result)) {
 
129
                        if (candidate.first >= packet_version) {
 
130
                                result = candidate.second;
 
131
                        }
 
132
                }
 
133
        }
 
134
        return result;
118
135
}
119
136
 
120
137
std::string PostOneWorldLegacyLookupTable::lookup_immovable(const std::string& immovable) const {
132
149
        // Implements OneWorldLegacyLookupTable.
133
150
        std::string lookup_resource(const std::string& resource) const override;
134
151
        std::string lookup_terrain(const std::string& terrain) const override;
135
 
        std::string lookup_critter(const std::string& critter) const override;
 
152
        std::string lookup_critter(const std::string& critter, uint16_t packet_version) const override;
136
153
        std::string lookup_immovable(const std::string& immovable) const override;
137
154
 
138
155
private:
205
222
        std::make_pair("greenland",
206
223
                       std::map<std::string, std::string>{
207
224
                          {"deer", "stag"},
 
225
                          {"elk", "moose"},
208
226
                       }),
209
227
        std::make_pair("blackland",
210
228
                       std::map<std::string, std::string>{
213
231
        std::make_pair("winterland",
214
232
                       std::map<std::string, std::string>{
215
233
                          {"deer", "stag"},
 
234
                          {"elk", "moose"},
216
235
                       }),
217
236
        std::make_pair("desert",
218
237
                       std::map<std::string, std::string>{
418
437
        return terrain;
419
438
}
420
439
 
421
 
std::string OneWorldLegacyLookupTable::lookup_critter(const std::string& critter) const {
 
440
std::string OneWorldLegacyLookupTable::lookup_critter(const std::string& critter, uint16_t) const {
422
441
        const std::map<std::string, std::string>& world_critters = critters_.at(old_world_name_);
423
442
        const auto& i = world_critters.find(critter);
424
443
        if (i != world_critters.end()) {