1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-09-16 09:26:28 +02:00

Fixes. Everything works now.

This commit is contained in:
DjWarmonger
2016-08-12 21:40:22 +02:00
parent 9b58450cb0
commit 2a9ddadedd
2 changed files with 24 additions and 20 deletions

View File

@@ -326,7 +326,7 @@ TerrainViewPattern::WeightedRule::WeightedRule(std::string &Name) : points(0), n
standardRule = (TerrainViewPattern::RULE_ANY == Name || TerrainViewPattern::RULE_DIRT == Name standardRule = (TerrainViewPattern::RULE_ANY == Name || TerrainViewPattern::RULE_DIRT == Name
|| TerrainViewPattern::RULE_NATIVE == Name || TerrainViewPattern::RULE_SAND == Name || TerrainViewPattern::RULE_NATIVE == Name || TerrainViewPattern::RULE_SAND == Name
|| TerrainViewPattern::RULE_TRANSITION == Name || TerrainViewPattern::RULE_NATIVE_STRONG == Name); || TerrainViewPattern::RULE_TRANSITION == Name || TerrainViewPattern::RULE_NATIVE_STRONG == Name);
anyRule = (TerrainViewPattern::RULE_ANY == Name); anyRule = (Name == TerrainViewPattern::RULE_ANY);
dirtRule = (Name == TerrainViewPattern::RULE_DIRT); dirtRule = (Name == TerrainViewPattern::RULE_DIRT);
sandRule = (Name == TerrainViewPattern::RULE_SAND); sandRule = (Name == TerrainViewPattern::RULE_SAND);
transitionRule = (Name == TerrainViewPattern::RULE_TRANSITION); transitionRule = (Name == TerrainViewPattern::RULE_TRANSITION);
@@ -418,8 +418,9 @@ CTerrainViewPatternConfig::CTerrainViewPatternConfig()
for (int i = 1; i < 4; ++i) for (int i = 1; i < 4; ++i)
{ {
flipPattern(pattern, i); //flip original by 90 degrees and push back copy //auto p = terGroupPattern;
terrainViewPatternFlips.push_back(pattern); flipPattern(terGroupPattern, i); //FIXME: we flip in place - doesn't make much sense now, but used to work
terrainViewPatternFlips.push_back(terGroupPattern);
} }
terrainViewPatterns[terGroup].push_back(terrainViewPatternFlips); terrainViewPatterns[terGroup].push_back(terrainViewPatternFlips);
} }
@@ -429,7 +430,8 @@ CTerrainViewPatternConfig::CTerrainViewPatternConfig()
terrainTypePatterns[pattern.id].push_back(pattern); terrainTypePatterns[pattern.id].push_back(pattern);
for (int i = 1; i < 4; ++i) for (int i = 1; i < 4; ++i)
{ {
flipPattern(pattern, i); //flip original by 90 degrees and push back copy //auto p = pattern;
flipPattern(pattern, i); ///FIXME: we flip in place - doesn't make much sense now
terrainTypePatterns[pattern.id].push_back(pattern); terrainTypePatterns[pattern.id].push_back(pattern);
} }
} }
@@ -457,15 +459,15 @@ ETerrainGroup::ETerrainGroup CTerrainViewPatternConfig::getTerrainGroup(const st
return it->second; return it->second;
} }
const std::vector<std::vector<TerrainViewPattern>> & CTerrainViewPatternConfig::getTerrainViewPatternsForGroup(ETerrainGroup::ETerrainGroup terGroup) const const std::vector<CTerrainViewPatternConfig::TVPVector> & CTerrainViewPatternConfig::getTerrainViewPatternsForGroup(ETerrainGroup::ETerrainGroup terGroup) const
{ {
return terrainViewPatterns.find(terGroup)->second; return terrainViewPatterns.find(terGroup)->second;
} }
boost::optional<const TerrainViewPattern &> CTerrainViewPatternConfig::getTerrainViewPatternById(ETerrainGroup::ETerrainGroup terGroup, const std::string & id) const boost::optional<const TerrainViewPattern &> CTerrainViewPatternConfig::getTerrainViewPatternById(ETerrainGroup::ETerrainGroup terGroup, const std::string & id) const
{ {
const std::vector<std::vector<TerrainViewPattern>> & groupPatterns = getTerrainViewPatternsForGroup(terGroup); const std::vector<TVPVector> & groupPatterns = getTerrainViewPatternsForGroup(terGroup);
for (const std::vector<TerrainViewPattern> & patternFlips : groupPatterns) for (const TVPVector & patternFlips : groupPatterns)
{ {
const TerrainViewPattern & pattern = patternFlips.front(); const TerrainViewPattern & pattern = patternFlips.front();
if(id == pattern.id) if(id == pattern.id)
@@ -475,22 +477,22 @@ boost::optional<const TerrainViewPattern &> CTerrainViewPatternConfig::getTerrai
} }
return boost::optional<const TerrainViewPattern &>(); return boost::optional<const TerrainViewPattern &>();
} }
boost::optional<const std::vector<TerrainViewPattern> &> CTerrainViewPatternConfig::getTerrainViewPatternsById(ETerrainGroup::ETerrainGroup terGroup, const std::string & id) const boost::optional<const CTerrainViewPatternConfig::TVPVector &> CTerrainViewPatternConfig::getTerrainViewPatternsById(ETerrainGroup::ETerrainGroup terGroup, const std::string & id) const
{ {
const std::vector<std::vector<TerrainViewPattern>> & groupPatterns = getTerrainViewPatternsForGroup(terGroup); const std::vector<TVPVector> & groupPatterns = getTerrainViewPatternsForGroup(terGroup);
for (const std::vector<TerrainViewPattern> & patternFlips : groupPatterns) for (const TVPVector & patternFlips : groupPatterns)
{ {
const TerrainViewPattern & pattern = patternFlips.front(); const TerrainViewPattern & pattern = patternFlips.front();
if (id == pattern.id) if (id == pattern.id)
{ {
return boost::optional<const std::vector<TerrainViewPattern> &>(patternFlips); return boost::optional<const TVPVector &>(patternFlips);
} }
} }
return boost::optional<const std::vector<TerrainViewPattern> &>(); return boost::optional<const TVPVector &>();
} }
const std::vector<TerrainViewPattern> * CTerrainViewPatternConfig::getTerrainTypePatternById(const std::string & id) const const CTerrainViewPatternConfig::TVPVector * CTerrainViewPatternConfig::getTerrainTypePatternById(const std::string & id) const
{ {
auto it = terrainTypePatterns.find(id); auto it = terrainTypePatterns.find(id);
assert(it != terrainTypePatterns.end()); assert(it != terrainTypePatterns.end());
@@ -725,7 +727,7 @@ void CDrawTerrainOperation::updateTerrainViews()
} }
// Get mapping // Get mapping
const TerrainViewPattern & pattern = patterns[bestPattern].front(); const TerrainViewPattern & pattern = patterns[bestPattern][valRslt.flip];
std::pair<int, int> mapping; std::pair<int, int> mapping;
if(valRslt.transitionReplacement.empty()) if(valRslt.transitionReplacement.empty())
{ {
@@ -1015,7 +1017,7 @@ CDrawTerrainOperation::InvalidTiles CDrawTerrainOperation::getInvalidTiles(const
} }
CDrawTerrainOperation::ValidationResult::ValidationResult(bool result, const std::string & transitionReplacement /*= ""*/) CDrawTerrainOperation::ValidationResult::ValidationResult(bool result, const std::string & transitionReplacement /*= ""*/)
: result(result), transitionReplacement(transitionReplacement) : result(result), transitionReplacement(transitionReplacement), flip(0)
{ {
} }

View File

@@ -333,19 +333,21 @@ struct DLL_LINKAGE TerrainViewPattern
class DLL_LINKAGE CTerrainViewPatternConfig : public boost::noncopyable class DLL_LINKAGE CTerrainViewPatternConfig : public boost::noncopyable
{ {
public: public:
typedef std::vector<TerrainViewPattern> TVPVector;
CTerrainViewPatternConfig(); CTerrainViewPatternConfig();
~CTerrainViewPatternConfig(); ~CTerrainViewPatternConfig();
const std::vector<std::vector<TerrainViewPattern>> & getTerrainViewPatternsForGroup(ETerrainGroup::ETerrainGroup terGroup) const; const std::vector<TVPVector> & getTerrainViewPatternsForGroup(ETerrainGroup::ETerrainGroup terGroup) const;
boost::optional<const TerrainViewPattern &> getTerrainViewPatternById(ETerrainGroup::ETerrainGroup terGroup, const std::string & id) const; boost::optional<const TerrainViewPattern &> getTerrainViewPatternById(ETerrainGroup::ETerrainGroup terGroup, const std::string & id) const;
boost::optional<const std::vector<TerrainViewPattern> &> getTerrainViewPatternsById(ETerrainGroup::ETerrainGroup terGroup, const std::string & id) const; boost::optional<const TVPVector &> getTerrainViewPatternsById(ETerrainGroup::ETerrainGroup terGroup, const std::string & id) const;
const std::vector<TerrainViewPattern> * getTerrainTypePatternById(const std::string & id) const; const TVPVector * getTerrainTypePatternById(const std::string & id) const;
ETerrainGroup::ETerrainGroup getTerrainGroup(const std::string & terGroup) const; ETerrainGroup::ETerrainGroup getTerrainGroup(const std::string & terGroup) const;
void flipPattern(TerrainViewPattern & pattern, int flip) const; void flipPattern(TerrainViewPattern & pattern, int flip) const;
private: private:
std::map<ETerrainGroup::ETerrainGroup, std::vector<std::vector<TerrainViewPattern> > > terrainViewPatterns; std::map<ETerrainGroup::ETerrainGroup, std::vector<TVPVector> > terrainViewPatterns;
std::map<std::string, std::vector<TerrainViewPattern>> terrainTypePatterns; std::map<std::string, TVPVector> terrainTypePatterns;
}; };
/// The CDrawTerrainOperation class draws a terrain area on the map. /// The CDrawTerrainOperation class draws a terrain area on the map.