void Object::copyPropertiesFrom(const Object* rhs) { // write properties TypeInfo* typeinfo = rhs->getTypeInfo(); while (typeinfo) { // don't copy objectname if (typeinfo == Object::m_typeinfo) break; const MemberSeq& members = typeinfo->getMembers(); AX_FOREACH(Member* m, members) { if (!m->isProperty()) { continue; } if (m->isConst()) { continue; } setProperty(m->getName(), m->getProperty(rhs)); } typeinfo = typeinfo->getBaseTypeInfo(); } // write script properties const ClassInfo* classinfo = getClassInfo(); if (!classinfo) return; const ScriptPropSeq& props = classinfo->m_scriptPropSeq; AX_FOREACH(ScriptProp* m, props) { if (m->getPropKind() == ScriptProp::kGroup) continue; setProperty(m->getName(), m->getProperty(rhs)); } }
void Object::writeProperties(File* f, int indent) const { String indstr(indent*2, ' '); #define INDENT if (indent) f->printf("%s", indstr.c_str()); // write properties TypeInfo* typeinfo = getTypeInfo(); while (typeinfo) { const MemberSeq& members = typeinfo->getMembers(); AX_FOREACH(Member* m, members) { if (!m->isProperty()) { continue; } if (m->isConst()) { continue; } INDENT; f->printf(" %s=\"%s\"\n", m->getName(), getProperty(m->getName()).toString().c_str()); } typeinfo = typeinfo->getBaseTypeInfo(); } // write script properties const ClassInfo* classinfo = getClassInfo(); if (!classinfo) return; const ScriptPropSeq& props = classinfo->m_scriptPropSeq; AX_FOREACH(ScriptProp* m, props) { if (m->getPropKind() == ScriptProp::kGroup) continue; INDENT; f->printf(" %s=\"%s\"\n", m->getName(), m->getProperty(this).toString().c_str()); } #undef INDENT }