40 likes | 154 Views
Cloning NiObject. NiObject* NiObject::Clone() { NiCloningProcess kCloning; NiObject* pClone = CreateClone(kCloning); ProcessClone(kCloning); return pClone; }. NiObject* NiObject::Clone(NiCloningProcess& kCloning) { NiObject* pClone = CreateClone(kCloning);
E N D
CloningNiObject NiObject* NiObject::Clone() { NiCloningProcess kCloning; NiObject* pClone = CreateClone(kCloning); ProcessClone(kCloning); return pClone; } NiObject* NiObject::Clone(NiCloningProcess& kCloning) { NiObject* pClone = CreateClone(kCloning); ProcessClone(kCloning); return pClone; }
Cloning (cont.)NiObject void NiObject::CopyMembers(NiObject* pDest, NiCloningProcess& kCloning) { kCloning.m_pkCloneMap->SetAt(this, pDest); } NiObject* NiObject::CreateSharedClone(NiCloningProcess& kCloning) { NiObject* pkClone; if (kCloning.m_pkCloneMap->GetAt(this, pkClone)) return pkClone; else return CreateClone(kCloning); }
Cloning (cont.)NiAVObject • NiCloningProcess가 필요한 이유 • Property를 다수의 NiAVObject가 공유할 수 있기 때문 void NiAVObject::CloneProperties(NiAVObject* pkDest, NiPropertyList* pkList, NiCloningProcess& kCloning) { NiTListIterator kPos = pkList->GetTailPos(); while (kPos) { NiProperty* pkProperty = pkList->GetPrev(kPos); pkDest->AttachProperty((NiProperty*)pkProperty->CreateSharedClone( kCloning)); } }
Clone (cont.)NiNode void NiNode::ProcessClone( NiCloningProcess& kCloning) { NiAVObject::ProcessClone(kCloning); NiObject* pkClone; bool bCloned = kCloning.m_pkCloneMap->GetAt(this, pkClone); NiNode* pkNode = (NiNode*) pkClone; const NiDynamicEffectList *pkList = &GetEffectList(); if (!pkList->IsEmpty()) pkNode->CopyEffectListClones(pkList, kCloning); … }