TESForm * TempClone(TESForm * thisForm) { TESForm * result = NULL; if(thisForm) { IFormFactory * factory = IFormFactory::GetFactoryForType(thisForm->formType); if(factory) { result = factory->Create(); if(result) { result->Init(); result->CopyFrom(thisForm); result->CopyFromEx(thisForm); } else { _ERROR("Form::TempClone: factory for type %02X failed", thisForm->formType); } } else { _MESSAGE("Form::TempClone: tried to clone form %08X (type %02X), no factory found", thisForm->formID, thisForm->formType); } } return result; }
TESForm* TESForm::CreateTemporaryCopy(TESForm* Source, bool CopyModifiedState /*= true*/) { SME_ASSERT(Source); TESForm* Buffer = TESForm::CreateInstance(Source->formType); Buffer->MarkAsTemporary(); Buffer->CopyFrom(Source); if (CopyModifiedState) Buffer->SetFromActiveFile(Source->GetFromActiveFile()); return Buffer; }
TESForm * TESForm::CloneForm(bool persist) const { TESForm * result = CreateFormInstance(typeID); if(result) { result->CopyFrom(this); CALL_MEMBER_FN(DataHandler::Get(), DoAddForm)(result); if(persist) { CALL_MEMBER_FN(TESSaveLoadGame::Get(), AddCreatedForm)(result); } } return result; }
TESForm * TESForm::CloneForm(bool persist) const { TESForm * result = CreateFormInstance(typeID); if(result) { result->CopyFrom(this); // it looks like some fields are not copied, case in point: TESObjectCONT does not copy BoundObject information. TESBoundObject* boundObject = DYNAMIC_CAST(result, TESForm, TESBoundObject); if (boundObject) { TESBoundObject* boundSource = DYNAMIC_CAST(this, TESForm, TESBoundObject); if (boundSource) { for (UInt8 i=0; i<6; i++) boundObject->bounds[i] = boundSource->bounds[i]; } } DoAddForm(result, persist); } return result; }