finish CKMesh writer
- fix some writing issue. - create a internal object adder in CKFileWriter shared by AddObject and Ctor(copy Reader).
This commit is contained in:
		| @ -244,35 +244,17 @@ namespace LibCmo::CK2 { | ||||
|  | ||||
| #pragma region Deep Assign | ||||
|  | ||||
| 			// copy object and calc max id | ||||
| 			CK_ID maxid = 0; | ||||
| 			// call internal object adder one by one | ||||
| 			for (const auto& item : reader->GetFileObjects()) { | ||||
| 				CKFileObject obj; | ||||
|  | ||||
| 				// skip if invalid | ||||
| 				if (item.ObjPtr == nullptr) continue; | ||||
|  | ||||
| 				// set obj ptr | ||||
| 				obj.ObjPtr = item.ObjPtr; | ||||
|  | ||||
| 				// set other data | ||||
| 				obj.ObjectId = obj.ObjPtr->GetID(); | ||||
| 				obj.ObjectCid = obj.ObjPtr->GetClassID(); | ||||
| 				obj.Data = nullptr;	// blank statechunk | ||||
| 				obj.SaveFlags = CK_STATESAVE_ALL; | ||||
| 				XContainer::NSXString::FromCKSTRING(obj.Name, obj.ObjPtr->GetName()); | ||||
|  | ||||
| 				// update max id | ||||
| 				maxid = std::max(maxid, obj.ObjectId); | ||||
|  | ||||
| 				// insert | ||||
| 				m_FileObjects.emplace_back(std::move(obj)); | ||||
|  | ||||
| 				// try add | ||||
| 				InternalObjectAdder(item.ObjPtr); | ||||
| 			} | ||||
|  | ||||
| 			// set max id | ||||
| 			m_SaveIDMax = maxid; | ||||
|  | ||||
| #pragma endregion | ||||
|  | ||||
| 		} | ||||
| @ -280,8 +262,7 @@ namespace LibCmo::CK2 { | ||||
|  | ||||
| 	CKFileWriter::~CKFileWriter() {} | ||||
|  | ||||
| 	bool CKFileWriter::AddSavedObject(ObjImpls::CKObject* obj, CKDWORD flags) { | ||||
| 		if (m_Done || m_DisableAddingObject) return false; | ||||
| 	bool LibCmo::CK2::CKFileWriter::InternalObjectAdder(ObjImpls::CKObject * obj, CKDWORD flags) { | ||||
| 		if (obj == nullptr) return false; | ||||
|  | ||||
| 		// check whether is saved. | ||||
| @ -306,11 +287,19 @@ namespace LibCmo::CK2 { | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	bool CKFileWriter::AddSavedObject(ObjImpls::CKObject* obj, CKDWORD flags) { | ||||
| 		if (m_Done || m_DisableAddingObject) return false; | ||||
|  | ||||
| 		// call internal adder | ||||
| 		return InternalObjectAdder(obj, flags); | ||||
| 	} | ||||
|  | ||||
| 	bool CKFileWriter::AddSavedObjects(const XContainer::XObjectPointerArray& objarray, CKDWORD flags) { | ||||
| 		if (m_Done || m_DisableAddingObject) return false; | ||||
| 		 | ||||
| 		bool ret = true; | ||||
| 		for (auto obj : objarray) { | ||||
| 			// call AddSavedObject one by one | ||||
| 			if (!AddSavedObject(obj, flags)) { | ||||
| 				ret = false; | ||||
| 			} | ||||
|  | ||||
		Reference in New Issue
	
	Block a user