소스 검색

Added ObjectTemplate copy constructor and assignment operator

AlexVinS 9 년 전
부모
커밋
114dac7e81
2개의 변경된 파일35개의 추가작업 그리고 0개의 파일을 삭제
  1. 31 0
      lib/mapObjects/ObjectTemplate.cpp
  2. 4 0
      lib/mapObjects/ObjectTemplate.h

+ 31 - 0
lib/mapObjects/ObjectTemplate.cpp

@@ -58,6 +58,37 @@ ObjectTemplate::ObjectTemplate():
 {
 }
 
+ObjectTemplate::ObjectTemplate(const ObjectTemplate& other):
+	visitDir(other.visitDir),
+	allowedTerrains(other.allowedTerrains),
+    id(other.id),
+    subid(other.subid),
+	printPriority(other.printPriority),
+	animationFile(other.animationFile)
+{
+	//default copy constructor is failing with usedTiles this for unknown reason
+
+    usedTiles.resize(other.usedTiles.size());
+    for(size_t i = 0; i < usedTiles.size(); i++)
+		std::copy(other.usedTiles[i].begin(), other.usedTiles[i].end(), std::back_inserter(usedTiles[i]));
+}
+
+ObjectTemplate & ObjectTemplate::operator=(const ObjectTemplate & rhs)
+{
+	visitDir = rhs.visitDir;
+	allowedTerrains = rhs.allowedTerrains;
+    id = rhs.id;
+    subid = rhs.subid;
+	printPriority = rhs.printPriority;
+	animationFile = rhs.animationFile;
+
+	usedTiles.clear();
+    usedTiles.resize(rhs.usedTiles.size());
+    for(size_t i = 0; i < usedTiles.size(); i++)
+		std::copy(rhs.usedTiles[i].begin(), rhs.usedTiles[i].end(), std::back_inserter(usedTiles[i]));
+	return *this;
+}
+
 void ObjectTemplate::readTxt(CLegacyConfigParser & parser)
 {
 	std::string data = parser.readString();

+ 4 - 0
lib/mapObjects/ObjectTemplate.h

@@ -69,6 +69,10 @@ public:
 	bool canBePlacedAt(ETerrainType terrain) const;
 
 	ObjectTemplate();
+	//custom copy constructor is required
+	ObjectTemplate(const ObjectTemplate & other);
+
+	ObjectTemplate& operator=(const ObjectTemplate & rhs);
 
 	void readTxt(CLegacyConfigParser & parser);
 	void readMsk();